基于剖析的数据类型重构思想总结
已有 2441 次阅读
2011-3-21 10:20
|系统分类:科研笔记|
C语言, 同学, 实验室, 空间, 源代码
前几天实验室的同学给我一篇国外的论文,是关于静态和动态相结合来解决数据类型恢复问题的。看完之后对其思想总结一下。
他的主要思想就是首先利用静态的方法,如SSA、DU链、UD链等来将能恢复的基本数据类型进行恢复,并将虚拟内存划分为互不相交的等价基地址区域,如果区域的大小比C语言中最大的类型所需占用的空间还大,则表示该数据类型无法被静态的方法所恢复,否则,该区域则对应一个结构或者数组,然后根据该区域中的偏移offset集合来恢复结构数据类型的框架,或者根据偏移来恢复数组。当遇到静态方法无法判断的情况将启动动态过程。他利用Valgrind框架构造动态剖析器,对所有对内存的加载以及读取进行监视,并计算被剖析数值的PC值和UC值,如果PC=1则表明被分析对象是指针,如果UC=1则表明被分析对象是无符号数。这些由剖析器得到的信息被存放在剖析信息库当中,由这些信息指导进一步的静态分析算法。
这片论文的作者做的实验是在Linux下,源代码选用的是FreeBSD4.0,用gcc4.3.2编译器-o2优化选项进行编译的,作者将正确恢复出的、没有正确恢复出的指针和基本数据类型进行了统计,还对PC和CU值进行了统计,发现在识别指针方面,大部分都可以识别,只是少数的应该是数值的在分析时得到的PC=1,而无符号数的分析则不能令人满意。另外,动态的剖析过程要比不用剖析过程慢100倍,占用的空间也要大100到200倍。
https://blog.sciencenet.cn/blog-544280-424704.html
上一篇:
关于构建中间语言虚拟机的想法下一篇:
能说明"WYSINWYE"的一个很好的例子