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:包含了一些方法让系统能够访问二进制代码以供解析。也包含了一写有帮助的方法,如返回结构异常处理过程的地址以及函数符号地址。


你可能感兴趣的:(Dyninst 解析parseAPI)