gpt4 book ai didi

c - 在现代内核中查找不带符号的 sys_call_table 的地址

转载 作者:行者123 更新时间:2023-12-04 15:42:14 29 4
gpt4 key购买 nike

我正在尝试开发一个 KLM(内核可加载模块),它在 linux(4.15.0-55-generic x86_64)下 Hook 系统调用,但我的问题是我找不到 sys_call_table 的地址(而不是ia32_sys_call_table),我不想依赖 kallsyms_lookup_name 的符号技术

我已经在一系列地址上尝试过迭代技术,但由于我真的不知道从哪个地址开始迭代,我认为自己是非法访问,我的 KLM 崩溃了..

什么时候用kallsyms_lookup_name的技术,我拒绝采用它,因为它真的不可移植..


我试过这种技术,但在我的内核上她不起作用,我试过这个功能:

int search_sct(void) {

sys_call_table = (void *)kallsyms_lookup_name("sys_call_table");

if (sys_call_table == NULL) {
printk(KERN_ERR "Couldn't look up sys_call_table\n");
return -1;
}

return 0;
}

我在/boot/System.map 上没有相同的地址,当我用这个函数打印地址时

最佳答案

没有干净的机制来 Hook 系统调用,因此您无论如何都必须找到一个 hackish 解决方案。一种可能性是,简单地获取目标系统调用的地址,必要时取消保护内存页面(取决于平台)并向目标函数插入 jmp 指令。您还可以保存已覆盖的字节,以在模块卸载时撤消此操作。

关于c - 在现代内核中查找不带符号的 sys_call_table 的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57456738/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com