是否可以使用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