【问题标题】:Debug new system call without recompiling Debian kernel在不重新编译 Debian 内核的情况下调试新的系统调用
【发布时间】:2023-03-03 01:47:01
【问题描述】:

正如标题所说,我只想在不重新编译整个内核的情况下测试/调试系统调用。我正在使用 Debian 4.0.15 内核。我已经读到,如果不重新编译,您实际上无法将系统调用添加到内核,但我希望至少有一些方法可以更快地检查错误。我以前从未真正这样做过,但我所有的实现文件都是用 C 编写的;我可以用 gcc 编译它们并运行它吗?我希望系统调用获得一些额外的访问权限,并且我被告知根本不要使用浮点运算,所以我想系统调用中还存在其他限制,在使用 gcc 编译时不会被捕获。

【问题讨论】:

  • 也许您可以详细说明您希望测试/调试系统调用的哪个方面?您是否计划在测试/调试工作中针对特定的系统调用?就目前而言,这个问题相当广泛。
  • @MahonriMoriancumer 我的意思是,能够在不重新编译的情况下完全测试任何东西会很有帮助。如果有语法错误,看到打印语句,任何东西。我不是在问如何测试特定的功能,我只是想在重新编译整个内核之前尽可能多地捕获错误(语法、逻辑等)。
  • 如何在不重新编译的情况下在内核中添加系统调用?恕我直言,这是不可能的......

标签: c linux-kernel debian system-calls


【解决方案1】:

系统调用调度表是由系统构建过程中精心设计的程序构建而成。该程序会注意相同的系统调用将始终获得相同的入口点,因此您无法获得与请求的调用不同的调用。没有办法在运行时注册系统调用并使其可供用户程序使用(我认为这是出于安全原因,除此之外)但是您可以安装一个通过指针调用已安装函数的新调用,然后安装默认情况下,在模块加载时更改的无操作函数,并在模块卸载时替换为哑默认值。这允许您将代码移动到模块并动态加载/卸载它,而无需重新编译基本内核。然后,测试完代码后,就可以通过指针消除对函数的调用,直接调用函数。

【讨论】:

    猜你喜欢
    • 2013-06-17
    • 2013-11-15
    • 2017-03-31
    • 2013-12-31
    • 1970-01-01
    • 2018-01-23
    • 2011-04-07
    • 1970-01-01
    • 2016-09-21
    相关资源
    最近更新 更多