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

标签 c++ llvm llvm-c++-api

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

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

最佳答案

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

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

祝你好运!

关于c++ - 使用 LLVM 的可执行文件的动态符号解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16364855/

相关文章:

ubuntu - 如何安装 clang 预构建的二进制文件 ubuntu 12.04

c++ - std::vector 线程对我来说是安全的吗?

c++ - 这种元组的递归引用安全吗?

c++ - 如何遍历 multimap 并打印按键分组的值?

llvm - 如果一个程序的 main 返回一个 i32,为什么是 $? (由调用它的 shell 测量)截断为 8 位?

llvm - 我需要自己计算填充来构造一个StructType吗?

c++ - 是否可以将 "sub"标签插入 LLVM 中的 BasicBlock?

带有数组参数的 LLVM IR 函数

c++ - 如何在派生类中可移植地初始化继承的模板化 POD 结构?