使用LLVM的可执行文件的动态符号解析

Rou*_*per 12 c++ llvm llvm-c++-api

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

有没有办法确定哪个呼叫目的地地址映射到哪个动态符号ObjectFile?我宁愿不手动计算所有的跳跃PLT,GOT如果我可以避免这样做.

小智 1

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

您也许能够使用 LLVM 的链接时优化模块而不是 ObjectFile 来获取所需的数据,因为如果我没记错的话,它会在加载模块时执行地址链接。

祝你好运!