我目前正在使用 LLVM's
ObjectFile
(记录为 here)来表示可执行文件。我已成功读取 ObjectFile
的可执行文件,并想确定我的可执行文件中的哪些调用目标地址对应于通过调用begin_dynamic_symbols()
函数。遍历 symbol_iterator
中的每个符号会得到每个符号的名称及其地址,但由于符号是动态的,因此每个符号的地址为 -1;这表明 ObjectFile
没有将符号名称直接与其对应的调用目标地址相关联。
有什么方法可以确定ObjectFile
中哪些调用目标地址映射到哪些动态符号?如果可以避免这样做,我宁愿不手动计算通过 PLT
和 GOT
的所有跳转。
最佳答案
动态符号的地址仅在目标文件加载到内存并链接到程序的符号表时计算。一般来说,在链接之前不可能确定它们的最终地址。
如果我没记错的话,你可以使用 LLVM 的链接时间优化模块而不是 ObjectFile 来获取你想要的数据,因为它在加载模块时会执行地址链接。
祝你好运!
关于c++ - 使用 LLVM 的可执行文件的动态符号解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16364855/