我创建了一个检查二进制代码部分完整性的函数。
该函数添加了llvm传递。
需要开始和结束地址以及检查值。
检查值是对二进制代码进行计算的结果。
可悲的是,IR传递是在llvm的中间部分,这部分适用于IR而不是二进制文件。
您还不知道二进制代码以及地址如何。
现在,我通过传递创建了所有可能的东西,并使用pyelftool进入二进制文件并像疯子一样修改hexa值; - )
我的第一个问题是:可以事先知道这个地址。
我看到blockaddress但我需要更灵活的东西(指令地址)。
我的第二个问题是:有人更好地修改了检查值。我的解决方案不是很优雅,而且我是平板型的依赖 - .-
我希望我能理解。
谢谢,
答案 0 :(得分:0)
你的问题不明确。听起来你在LLVM IR级别和二进制机器代码级别之间尝试了一些奇怪的混淆,这没有多大意义。
LLVM IR是一种相当抽象的,与目标无关的语言,用作编译器的中间表示。 LLVM IR与最终从其发出的指令地址之间没有联系。 blockaddress
用于基本块的地址,但它具有LLVM i8*
类型,而不是某些特定于机器的地址。