从/ proc/kcore获取系统调用表中的系统调用地址

use*_*879 4 linux debugging linux-kernel

我怎样才能从中检索系统调用地址/proc/kcore.我可以从System.map文件中获取系统调用表地址.

jmk*_*yes 9

如果您使用的是基于x86的计算机,则可以使用该sidt指令获取中断描述符表寄存器,从而获取中断描述符表本身.有了这些,您可以获得system_call0x80系统调用中断调用的(或x32-64兼容性的ia32等效)函数的地址.反汇编中断处理程序并扫描特定的间接调用指令,可以在调用指令中提取地址.该地址是您的系统调用表(在x86上)或x86-64上的IA32兼容性系统调用表.

获取x86-64本机系统调用表是类似的:不使用重构中断表,而是sidt读取处理器的IA32_LSTAR MSR.地址at (high << 32 | low)是系统调用调度程序.像以前一样扫描存储器,sys_call_table从调用指令中提取地址,但记得屏蔽地址的高32位.

这掩盖了许多更加技术性的信息(比如要搜索的字节),你应该在内核代码中探讨之前理解这些信息.快速谷歌搜索后,我发现整个过程(包括示例模块代码)在这里.

祝你好运,尽量不要惹恼自己!