我可以从模块添加系统调用吗?
答案 0 :(得分:3)
在某些内核版本中,可以通过更改sys_call_table来添加或修改systemcall
。但是因为这个表不打算在运行时更改,所以它没有保护。更换桌子将导致比赛条件。即使没有竞争条件,也存在与在使用或堆叠时移除模块有关的问题。由于从模块更改sys_call_table
时出现问题,因此不再在新内核中导出符号。换句话说,如果在尝试加载模块时得到"unresolved symbol sys_call_table"
,则表示模块中存在错误,内核不再接受此类错误模块。
答案 1 :(得分:1)
无论你是否可以,这听起来都是一个非常糟糕的主意。如果你的新系统调用将在文件/设备上运行,也许你可以把它变成一个ioctl或类似的东西,而不是让它成为自己的系统调用?