-
-
[原创]angr/pyvex模块学习
-
发表于:
2020-3-31 22:45
8737
-
angr/pyvex模块学习
VEX IR
为了处理广泛多样的体系结构,对中间表示进行分析是很有用的。在处理不同的体系结构时,一个IR抽象出几个体系结构差异,允许在所有这些差异上运行一个分析:
Register name:不同的架构有不同的寄存器,堆栈结构,IR为不同平台上的寄存器提供了一致的抽象接口。具体来说,VEX将寄存器建模为具有整数偏移量的单独内存空间(即,AMD64的rax从该内存空间的地址16开始存储)。
memory access.不同的体系结构以不同的方式访问内存。例如,ARM可以在小端和大端模式下访问内存。IR必须消除这些差异。
memory segentation.一些体系结构(如x86)通过使用特殊的段寄存器来支持内存分段。IR理解这种内存访问机制。
instruction side-effects.大多数指令都有副作用。例如,ARM上Thumb模式的大多数操作都会更新条件标志,堆栈推送/弹出指令会更新堆栈指针。在分析中以特别的方式跟踪这些副作用是很疯狂的,因此IR使这些副作用变得明确。
对于IR有很多选择。我们使用VEX,因为二进制代码提升到VEX是非常受支持的。VEX是许多目标机器语言的体系结构不可知、无副作用的表示。它将机器代码抽象成一个表示形式,以使程序分析更容易。此表示有四类主要对象:
expressions:IR表达式表示计算值或常量。这包括内存加载、寄存器读取和算术运算结果。
operations:IR operations 描述了对IR表达式的修改。这包括整数运算、浮点运算、位运算等。应用于IR表达式的IR操作将生成IR表达式。
Temporary
variables:VEX使用临时变量作为内部寄存器:IR表达式在使用之间存储在临时变量中。可以使用IR表达式检索临时变量的内容。从0开始,这些临时工被编号。这些临时变量是强类型的(即“64位整数”或“32位浮点”)。
Statements.:IR Statements modes改变目标机器的状态,例如内存存储和寄存器写入的影响。IR语句使用IR表达式表示它们可能需要的值。例如,内存存储IR语句使用一个IR表达式作为写入的目标地址,使用另一个IR表达式作为内容。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!