您的位置:首页 > 其它

Dyninst 解析parseAPI

2015-12-25 00:00 162 查看
摘要: 本文将初步探索使用Dyninst分析程序,ParseAPI

Dyninst能够将进程、库和代码片段的机器代码解析。Dyninst的ParseAPI能够跨平台地把机器指令抽象成为汇编语言、块和函数等。Dyninst的设计很容易扩展到其它语言,比如memory dumps和其它的格式的二进制文件,仅仅需要实现几个小接口就可以加入到系统中。

这个API为用户提供了控制流角度的代码视角。每个code对象都代表了函数、基本块和边这些能够表示当前控制图(Control-flow graph)的高级抽象。API提供了一个能简单查找函数和基本块的接口。这些对象的获取能够帮助识别代码中的数据结构和软件结构。

在这个API中基本的代码表示是CFG(Control flow Graph)。在解析时,二进制代码对象被当做从图的开始到边缘的一段连续区域的字节。接下来的抽象构成了二进制代码在CFG角度的表示。

* BLOCK:CFG中的结点用Basic block表示,它是指令的线性序列:I(1),I(2),...,I(i),...,I(j)。重要的是,在一些指令集体系中,basic block能够覆盖同样的地址范围——变长指令集允许构成basic block的指令有多种不同的解释方式。

* ENDG: 在CFG中的连接结点的边表示了一条控制流,如条件或者无条件分支转移、陷入、call和return。CFG也能表示过程内和过程间的控制流,遍历结点和边能够得到更高级的抽象方式,如函数。

* FUNCTION: function 是在二进制文件中主要语义组合表示,能够类似地抽象成过程形的语言,如 C。函数是一系列的基本块的集合,它只能通过过程间的控制流获取入口点。

* CODE OBJECT:一组有区别的代码区域被抽象成一个单独的 code object,如可执行区域和库。code object可以被认为是一个单独的、区别其它区域的唯一空间。然而,parseAPI支持的code object可能拥有重叠的地址空间,如UNIX体系文件中包含的没有链接的代码。

* INSTRUCTION SOURCE:包含了一些方法让系统能够访问二进制代码以供解析。也包含了一写有帮助的方法,如返回结构异常处理过程的地址以及函数符号地址。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: