LD_PRELOAD
技巧有助于在运行时动态链接二进制文件,但对于静态链接的二进制文件将失败。
我想覆盖一些 C++ 启动函数(比如更改 __libc_start_main
、__libc_csu_init
和其他一些函数的代码)。我正在考虑直接从 glibc
更改代码,但我想确保没有其他方法可以解决问题。
除了从 glibc
更改代码并重新构建它之外,还有其他方法可以覆盖 C++ 启动函数吗?
最佳答案
根据您要排除的内容,您需要 -nostartfiles
、-nodefaultlibs
或 -nostdlib
。然后您将添加自己的替代品。如果您的替换不完整(可能),您将添加原始库,例如 glibc
在您自己的库之后。链接器按列出的顺序使用它们,因此您的覆盖现在获得优先权。
隐式链接的库就像它们首先出现一样,这就是为什么您需要专门排除它们然后再将它们添加回来。另见 g++, static initialization and -nostdlib
关于c++ - 如何覆盖静态二进制文件的 C++ 启动函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50779516/