centerplain的个人博客分享 http://blog.sciencenet.cn/u/centerplain

博文

基于剖析的数据类型重构思想总结

已有 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"的一个很好的例子
收藏 IP: 221.15.202.*| 热度|

0

发表评论 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-3 21:05

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部