2009-01-20 56 views
9

我想添加一個新的系統調用通過LKM,但我不知道如何做到這一點。也就是說,我知道如果我想添加一個全新的系統調用,我可以查看sys_call_table並找到一個sys_ni_syscall並將其替換,但我很好奇是否有可能實際上添加到sys_call_table。我意識到它可能是而不是可能,因爲它是一個固定大小的數組,但我想知道是否有其他聰明的方法來添加系統調用而不覆蓋未使用的系統調用號碼。是否可以通過LKM添加系統調用?

+0

[使用LKM實現Linux系統調用]可能的副本(https://stackoverflow.com/questions/12623066/implementing-linux-system-call-using-lkm) – 2018-01-29 15:26:15

回答

3

下面是一個例子
linux system calls

編輯:
上面的例子顯示HOWTO實現系統調用,就實現一個從一個可加載的模塊; AFAIK,這是不可能的,除非你在哪裏覆蓋現有的,因爲數組的大小是#define。

請記住,還需要更改用戶空間,至少如果您希望能夠實際使用新的系統調用。

1

這是一個老問題,但我想提出我的解決方案。實施「類似系統調用」環境的最簡單方法是依靠假設備。 特別是,您可以創建一個新的設備驅動程序,它實際上不會驅動任何東西。然而,寫上它可能會導致已安裝的模塊執行所需的操作。 此外,如果您想要提供多項服務,則可以將它們映射到ioctl操作。

相關問題