LD_PRELOAD
技巧可以帮助在运行时动态链接二进制文件,但对于静态链接的二进制文件,它将失败。
我想重写一些c++启动函数(比如更改__libc_start_main
、__libc_csu_init
和其他几个函数的代码)。我正在考虑直接从glibc
更改代码,但我想确保没有其他方法可以解决问题。
除了从glibc
中更改代码并重新构建之外,还有其他方法可以覆盖c++启动函数吗?
发布于 2018-06-10 08:27:31
根据您要排除的内容,您将需要-nostartfiles
、-nodefaultlibs
或-nostdlib
。然后,您将添加您自己的替代品。如果您的替换是不完整的(很可能),您应该在您自己的库之后添加原始库,比如glibc
。链接器按列出的顺序使用它们,因此您的重写现在获得优先级。
隐式链接库的行为就像它们首先出现一样,这就是为什么您需要明确排除它们,然后再重新添加它们的原因。另请参阅g++, static initialization and -nostdlib
https://stackoverflow.com/questions/50779516
复制相似问题