首页
社区
课程
招聘
[原创]angr/pyvex模块学习
发表于: 2020-3-31 22:45 8736

[原创]angr/pyvex模块学习

2020-3-31 22:45
8736

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表达式作为内容。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 5
支持
分享
最新回复 (2)
雪    币: 0
活跃值: (638)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享,希望还有后续的分享
2020-4-29 11:16
0
雪    币: 7
活跃值: (530)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
请教一下大佬,请问什么叫做从内存空间地址16开始储存呀:AMD64的rax从该内存空间的地址16开始存储
2022-6-18 04:13
0
游客
登录 | 注册 方可回帖
返回
//