您的位置:首页 > 运维架构 > Linux

linux X86-64 获取系统调用表

2011-09-02 18:07 260 查看
static void init_x64_syscalls(void)

{

int i;

void* system_call_addr = 0;

unsigned char* lpbin;

rdmsrl(MSR_LSTAR, system_call_addr);

printk(KERN_ALERT "X64 init_linux_shell %x \n", system_call_addr);

for (lpbin = (char*)system_call_addr, i = 0; i < 255; i++) {

/*

* 测试发现 call指令对应特征码为 ff 14 c5

*/

if (lpbin[i] == 0xff && lpbin[i+1]== 0x14){

unsigned long long* sys_call_table =

(0xffffffff00000000) + *(unsigned int*)(lpbin + i + 3);

printk(KERN_ALERT "sys_call_table %p\n", sys_call_table);

printk(KERN_ALERT "sys_mknode %p\n",sys_call_table[__NR_mknod]);

break;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: