LD_PRELOAD
技巧可以帮助在运行时动态链接二进制文件,但对于静态链接的二进制文件它将失败。
我想覆盖一些c ++启动函数(比如更改__libc_start_main
,__libc_csu_init
和其他一些代码)。我正在考虑直接从glibc
更改代码,但我想确保没有其他方法可以解决问题。
有没有其他方法来覆盖c ++启动函数,而不是从glibc
更改代码并再次构建它?
答案 0 :(得分:4)
根据您要排除的内容,您需要-nostartfiles
,-nodefaultlibs
或-nostdlib
。然后,您将添加自己的替代品。如果您的替换不完整(可能),您可以在之后添加原始库,例如glibc
。链接器以列出的顺序使用它们,因此您的覆盖现在获得首选项。
隐含链接的库就像它们首先出现一样,这就是为什么你需要专门排除它们然后再添加它们。另请参阅g++, static initialization and -nostdlib