linux 内核 2.6.18 中的 sys_call_table

hah*_*g65 0 system-calls linux-kernel

我正在尝试将 sys exit 调用设置为一个变量

extern void *sys_call_table[];
real_sys_exit = sys_call_table[__NR_exit]
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试制作时,控制台给了我错误

error: ‘__NR_exit’ undeclared (first use in this function) 
Run Code Online (Sandbox Code Playgroud)

任何提示将不胜感激:) 谢谢

lla*_*aro 5

由于您在内核 2.6.x 中,因此不再导出 sys_call_table 。如果您想避免编译错误,请尝试包含

#include<linux/unistd.h>
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用。因此,使用 sys_call_table 的解决方法是使用以下命令在 SystemXXXX.map(位于 /boot)中找到 sys_call_table 的地址:

grep sys_call System.map-2.6.X -i
Run Code Online (Sandbox Code Playgroud)

这将给出地址,然后此代码应允许您修改表:

unsigned long *sys_call_table; 
sys_call_table = (unsigned long *) simple_strtoul("0xc0318500",NULL,16); 


original_mkdir = sys_call_table[__NR_mkdir];
sys_call_table[__NR_mkdir] = mkdir_modificado;
Run Code Online (Sandbox Code Playgroud)

希望它对你有用,我刚刚在内核 2.6.24 下测试过,所以应该适用于 2.6.18

也在这里检查,它是一个非常好的 http://commons.oreilly.com/wiki/index.php/Network_Security_Tools/Modifying_and_Hacking_Security_Tools/Fun_with_Linux_Kernel_Modules