码迷,mamicode.com
首页 > 其他好文 > 详细

C代码分析器(一 开个题)

时间:2014-06-24 20:07:07      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:c   python   遍历      链表   

最近突发奇想,希望能写一个通用的代码分析工具(有点言过其实了,其实是针对C代码的)。这几天看代码看的我头晕眼花,虽然有Source Insight的帮助,仍然觉得很多地方不够智能。现在主要遇到的问题有以下几个:

1,很多函数被定义为宏,然后被调用。这个就需要自己搜索到相应的定义,然后再去寻找调用处。

2,程序的结构中很多用到有限状态机,函数会被放到数组中。会遇到和上面同样的问题。

3,现有的工具无法展示所有函数的调用和被调用关系,让看代码总是盲人摸象,难免会出现疏漏。

所以希望能自己写一个代码分析的工具,可以帮助更快,更清晰的分析代码。现在初步计划使用Python开发,毕竟第三方库多些,开发比较方便。本帖作为项目开始的处女帖,也相当于给自己的项目开个头。现在有了一些基本想法,罗列如下:

需要实现的功能:

1,分析各个C文件中的函数(需要一定的文本分析算法来判断来定位和区分函数定义和函数调用)并存储起来。

2,利用有向图的方式来存储函数见的关系(调用和被调用),通过邻接链表的结构来存储。

3,如果某个函数没有被调用,判断其是否被替换(定义为宏或成为数组元素),并进行相应处理。

分析代码第一步:建立函数调用关系链表。

伪代码:

while(不是最后一个文件中的最后一个函数)

{

current_function=通过文本分析得到的函数名称

为current_function填加子节点(分析current_function中调用的函数)

if(current_function在图中已有存储)

刚才建立的链表放入到图中current_function所在的位置。

else

current_function作为顶级节点放入到图中

}

     清理顶级节点(解决上面提出的第三个问题。)


  分析代码第二步:显示current_function的调用关系。

          函数调用关系图建立完成后,如果要显示current_function的调用关系,只需对图以current_function为起点进行遍历即可。



   现在我只是到了上面的几个方面,接下来的实现肯定还要遇到很多问题。我相信办法总比困难多,加油吧。

C代码分析器(一 开个题),布布扣,bubuko.com

C代码分析器(一 开个题)

标签:c   python   遍历      链表   

原文地址:http://blog.csdn.net/hibianfeng/article/details/33411141

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!