llvm - 将 LLVM IR 分析与最终地址关联起来

标签 llvm x86-64 llvm-ir llvm-c++-api

我正在尝试设计一个 LLVM IR channel ,它从 LLVM IR 获取一些信息(特别是:IR 调用指令中使用的类型),并以某种方式将此 IR 级分析与二进制级地址相关联。例如,我想知道 call 指令(位于最终二进制文件中的某个地址)正在调用具有特定类型签名的函数。

一些观察:

  1. 明显的问题是,当 IR 通行证运行时,最终地址尚不可用。
  2. 虽然 IR 指令不会 1:1 映射到机器指令,但假设 IR 中的调用将映射到机器代码中的调用应该是相对安全的.
  3. 人们可以反汇编二进制文件,查看正在调用的函数,并获取其类型。但是,这不适用于间接调用指令(这就是我尝试在 IR 中执行此操作的原因)。

this comment ,解决类似问题的建议方法是“注入(inject)[]一些稍后可以在可执行文件中发现的元数据”。但是,我找不到任何有关如何使元数据在二进制文件中保留的信息。

最佳答案

您可以使用调试位置(这是一种元数据)将 IR 调用与最终调用联系起来。如果您确保 IR 中的每个调用都有文件名、行和列,则此 hack 应该是可能的。我确信存在更清洁的解决方案。

关于llvm - 将 LLVM IR 分析与最终地址关联起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66659406/

相关文章:

python - Scipy - 稀疏库导入错误 : DLL load failed: %1 is not a valid Win32 application

c - x86_64 上的缓冲区溢出 - 回到 libc 攻击 (linux)

linux - 为什么我的汇编代码应该在 O(N*sqrt(N)) 时间内运行,但它却在线性时间内运行?

llvm - 从 Julia 脚本生成可运行的 LLVM IR?

llvm - 无法编译 Rust

java - 是否可以将 LLVM 字节码转换为 Java 字节码?

llvm - 如何使用 LLVM 生成调用图?

c++ - llvm JIT addGlobalMapping,不能添加类成员函数,这是一个模板函数

pointers - llvm中有符号执行工具吗?

c++ - LLVM IR 中 '&&' 的指令是什么?