【问题标题】:sys_call_table in linux kernel 2.6.18linux 内核 2.6.18 中的 sys_call_table
【发布时间】:2010-12-07 20:57:41
【问题描述】:

我正在尝试将 sys 退出调用设置为变量

extern void *sys_call_table[];
real_sys_exit = sys_call_table[__NR_exit]

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

error: ‘__NR_exit’ undeclared (first use in this function) 

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

【问题讨论】:

    标签: linux-kernel system-calls


    【解决方案1】:

    如果您没有包含文件 syscall.h,您应该在引用 __NR_exit 之前执行此操作。例如,

    #include <syscall.h>
    #include <stdio.h>
    
    int main()
    {
        printf("%d\n", __NR_exit);
        return 0;
    }
    

    返回:

    $ cc t.c
    $ ./a.out 
    60
    

    其他一些观察:

      1234563因为它正在通过#undef 在其他地方删除。
    1. 如果您正在为内核空间编写代码,则可以使用一组完全不同的标头。 LXR (http://lxr.linux.no/linux) 可搜索、可浏览的内核源代码存档是一个有用的资源。

    【讨论】:

    • 我有,实际上由于某种原因,它在这个内核版本中实际上是 linux/syscalls.h ...... :( 也许我弄错了?
    • 抱歉没有帮助的答案。我必须对您的编译环境进行很多猜测才能回答这个问题。例如,我仍然不知道:什么版本的 linux 内核,什么编译器版本,编译器标志,代码是否用于交叉编译,以及您是否正在尝试编译内核模块或用户空间的东西。您能否提供有关您项目的任何其他信息?
    • 它的 linux 内核 2.6.18 用 Makefile 编译(gcc 不知道什么版本) obj -m += file.c 制作一个内核模块来拦截系统调用。我查看了 lxr,它为我的 linux 版本列出了一堆 syscall.h,但它是一个补丁内核,所以我可能只需要问我的教授。我尝试了 lxr 中的一些标头,但它们要么丢失,要么是因为架构错误,要么就是不起作用。
    【解决方案2】:

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

    #include<linux/unistd.h>
    

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

    grep sys_call System.map-2.6.X -i
    

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

    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;
    

    希望它对你有用,我刚刚在内核 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

    【讨论】:

    • ...你为什么在静态值上使用strtoul?为什么不直接使用文字0xc0318500?此外,这将在可重定位内核上失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 2015-10-02
    • 2013-11-21
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多