我目前正在使用LLVM's
ObjectFile
(记录为here)来表示可执行文件。我已成功读取ObjectFile
的可执行文件,并想确定我的可执行文件中的哪个调用目标地址对应于symbol_iterator
函数调用获得的begin_dynamic_symbols()
中包含的符号名称。迭代symbol_iterator
中的每个符号给出了每个符号及其地址的名称,但由于这些符号是动态的,因此每个符号的地址为-1;这表示ObjectFile
不会将符号名称直接与其对应的呼叫目标地址相关联。
有没有办法确定哪个呼叫目的地地址映射到ObjectFile
中的哪些动态符号?如果我可以避免这样做,我宁愿不手动计算PLT
和GOT
的所有跳转。
答案 0 :(得分:1)
动态符号的地址仅在目标文件加载到内存并链接到程序的符号表时计算。通常,在链接之前无法确定其最终地址。
您可以使用LLVM的Link-Time Optimization模块而不是ObjectFile来获取所需的数据,因为如果我没记错的话,它会在加载模块时执行地址链接。
祝你好运!