LLVM使用IR Pass后处理二进制文件

时间:2013-11-28 16:33:16

标签: llvm binaryfiles llvm-ir post-processing

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

该函数添加了llvm传递。

需要开始结束地址以及检查值

检查值是对二进制代码进行计算的结果。

可悲的是,IR传递是在llvm的中间部分,这部分适用于IR而不是二进制文件。

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

现在,我通过传递创建了所有可能的东西,并使用pyelftool进入二进制文件并像疯子一样修改hexa值; - )

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

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

我的第二个问题是:有人更好地修改了检查值。我的解决方案不是很优雅,而且我是平板型的依赖 - .-

我希望我能理解。

谢谢,

1 个答案:

答案 0 :(得分:0)

你的问题不明确。听起来你在LLVM IR级别和二进制机器代码级别之间尝试了一些奇怪的混淆,这没有多大意义。

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