0

我创建了一个检查部分二进制代码完整性的函数。

该功能是通过 llvm 通行证添加的。

它需要开始结束地址加上一个校验值

校验值是二进制代码的计算结果。

遗憾的是,IR 通道位于 llvm 的中间部分,这部分适用于 IR 而不是二进制文件。

您还不知道二进制代码以及地址如何。

现在,我用我的通行证创建了我能做的一切,我使用pyelftool进入二进制文件并像疯子一样修改十六进制值;-)

我的第一个问题是:可以提前知道这个地址。

我看到了 blockaddress,但我需要更灵活的东西(指令地址)。

我的第二个问题是:有人对修改检查值有更好的想法。我的解决方案不是很优雅,而且我依赖于平台-.-

我希望我是可以理解的。

谢谢,

4

1 回答 1

0

你的问题不清楚。听起来您正在尝试在 LLVM IR 级别和二进制机器代码级别之间进行一些奇怪的混合,这没有多大意义。

LLVM IR 是一种相当抽象的、与目标无关的语言,用作编译器的中间表示。从 LLVM IR 到最终从它发出的指令的地址没有链接。blockaddress用于基本块的地址,但它具有 LLVMi8*类型,而不是某些特定于机器的地址。

于 2013-11-28T22:40:03.313 回答