2011-04-22 79 views

回答

9

如果您使用的是基于x86的机器,则可以使用sidt指令来获取中断描述符表寄存器以及中断描述符表本身。有了这个功能,您可以获得0x80系统调用中断调用的system_call(或与x86-64兼容的ia32等价物)函数的地址。拆解该中断处理程序并扫描特定的间接调用指令,可以提取调用指令中的地址。该地址是您的系统调用表(在x86上)或x86-64上的IA32兼容性系统调用表。

获取x86-64本地系统调用表是类似的:不要用sidt重建中断表,请阅读处理器的IA32_LSTAR MSR。 (high << 32 | low)的地址是系统调用调度程序。像以前一样扫描内存,从调用指令中提取地址,但请记住掩盖地址的高32位。

这可以掩盖很多的更多技术信息(比如要搜索哪些字节),您应该先理解内核代码。在Google快速搜索后,我发现整个过程都有文档记录(例如模块代码)here

祝你好运,并尽量不要自责!

+0

不幸的是,链接已经死了:( – galaxy 2015-07-17 13:27:10