是否可以使用LD_PRELOAD
來覆蓋其中一個Linux內核函數?在內核級函數上使用LD_PRELOAD
例如,我想更改函數Linux/net/ipv4/syncookie.c
爲我的程序fooserver
的監聽套接字。我可以使用LD_PRELOAD來完成,還是我需要重新編譯內核?
還有其他的選擇嗎?
感謝,
是否可以使用LD_PRELOAD
來覆蓋其中一個Linux內核函數?在內核級函數上使用LD_PRELOAD
例如,我想更改函數Linux/net/ipv4/syncookie.c
爲我的程序fooserver
的監聽套接字。我可以使用LD_PRELOAD來完成,還是我需要重新編譯內核?
還有其他的選擇嗎?
感謝,
不,這是不可能使用LD_PRELOAD內核替換功能。
您將需要重新編譯內核。
如果函數在內核模塊中,那麼您可以卸載,重新編譯和重新加載模塊,而無需重新啓動內核。
如果這是您經常要做的事情,那麼您將需要使用第二臺計算機或虛擬機,因此您不必繼續重新啓動正在編程的計算機。
您必須使用kprobes或systemtap覆蓋內核函數。沒有必要重新編譯。
你可以在Linux Kernel中做類似的事情。 這不是一個簡單的操作,但你應該做的是下一個:
有許多隱藏的陷阱和潛在的崩潰,雖然。 但是總體來說,這種方法的工作原理。
LD_PRELOAD伎倆將工作僅適用於動態鏈接的庫你說的e代碼很可能是靜態鏈接的。或者如果你幸運的話,可以坐在可載入模塊中。在這種情況下,您可以更換模塊.. –
@EugeneSh .:如果用戶可以輕鬆更換內核函數,您不會看到嚴重的安全問題嗎? – Olaf
除惡意軟件:你爲什麼要這麼做? – Olaf