在不重新编译Debian内核的情况下调试新的系统调用

时间:2018-03-14 02:53:52

标签: c linux-kernel debian system-calls

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

1 个答案:

答案 0 :(得分:0)

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