是否有可能在发生时捕获未解析的符号引用,以便调用函数以尝试根据需要解析符号?或者是否可以在运行时向动态符号表添加新符号,而无需创建库文件并对其进行操作?我在GNU / Linux上使用GCC. (对其他Unix的可移植性会很好,但不是关键问题.)
提前致谢!
编辑:我应该提供更多关于我想要做的事情的细节.我想为编程语言编写一个解释器,期望它支持编译(dlopen’ed)和解释模块.我希望从编译模块到其他地方定义的函数的调用由链接器解析,以避免在每次调用时查找函数,但是对解释代码的调用将无法解析.我想捕获这些调用,以便我可以在需要时调用适当的解释函数(如果函数不存在则发出错误信号).
解决方法:
如果您知道缺少哪些符号,则可以只使用它们编写库,并在应用程序执行之前使用LD_PRELOAD.
如果你没有缺少的符号列表,你可以通过在二进制文件上使用’nm’或’objdump’来发现它们,并在此基础上编写一个脚本来构建库.在应用程序执行之前丢失符号,然后LD_PRELOAD也是如此.
此外,您可以使用gdb将新的“代码”注入应用程序,使功能指向您所需的功能.
最后,您还可以覆盖一些ld.so函数来检测缺失的符号,并对它们执行某些操作.
但无论如何,如果你能解释你想要完成什么,那么提供一个合适的解决方案会更容易.