12

我目前正在使用LLVM's ObjectFile在此处记录)来表示可执行文件。我已成功读入可执行文件,ObjectFile并想确定可执行文件中的哪些调用目标地址对应于symbol_iterator通过调用begin_dynamic_symbols()函数获得的符号名称。遍历 中的每个符号symbol_iterator会得到每个符号的名称及其地址,但由于符号是动态的,因此每个符号的地址都是 -1;这表明ObjectFile不直接将符号名称与其对应的呼叫目标地址相关联。

有什么方法可以确定哪些呼叫目标地址映射到 中的哪些动态符号ObjectFile?我宁愿不手动计算所有的跳跃PLTGOT如果我可以避免这样做的话。

4

1 回答 1

1

只有当目标文件被加载到内存并链接到程序的符号表中时,才会计算动态符号的地址。一般来说,在链接之前不可能确定它们的最终地址。

如果我没记错的话,您可以使用 LLVM 的链接时间优化模块而不是 ObjectFile 来获取您想要的数据,因为它在加载模块时会执行地址链接。

祝你好运!

于 2013-05-27T10:55:08.603 回答