llvm - 将 LLVM IR 分析与最终地址相关联
问题描述
我正在尝试设计一个 LLVM IR 通道,它从 LLVM IR 中获取一些信息(特别是:IR 调用指令中使用的类型),并以某种方式将此 IR 级分析与二进制级地址相关联。例如,我想知道一条call
指令(位于最终二进制文件中的某个地址)正在调用具有某种类型签名的函数。
一些观察:
- 显而易见的问题是,当 IR 通行证运行时,最终地址尚不可用。
- 虽然 IR 指令不会 1:1 映射到机器指令,但假设
call
IR 中的 a 将映射到call
机器代码中的 a 应该是相对安全的。 - 可以直接反汇编二进制文件,查看被调用的函数,然后获取它的类型。但是,这不适用于间接调用指令(这就是我尝试在 IR 中执行此操作的原因)。
在此评论中,针对类似问题的建议方法是“注入 [] 一些您稍后可以在可执行文件中发现的元数据”。但是,我找不到有关如何使元数据在二进制文件中存在的任何信息。
解决方案
您可以使用调试位置(这是一种元数据)将 IR 调用与最终调用联系起来。如果您确保 IR 中的每个调用都有一个文件名、行和列,那么这个 hack 应该是可能的。我敢肯定,存在更清洁的解决方案。
推荐阅读
- java - 等待按钮被按下 JAVA GUI
- regex - Perl将字符剪切为循环正则表达式,打印到行尾
- r - R:从父/子关系创建聚合结构
- spring - 由于“找不到有效的 Docker 环境”,测试容器测试用例失败
- apache-spark - Apache Spark 不断从单个 url 下载数据
- json - 如何使用 pandas 正确读取 json 文件
- sql - '将参数值从 String 转换为 Int32 失败/
- android - 显示小吃店时Android向上移动按钮
- ggplot2 - 如何绘制具有大量聚类的混合模型的拟合线?
- python - 使用 tkinter 创建两列输入字段