zoukankan      html  css  js  c++  java
  • C代码分析器(一个 公开赛冠军)

    最近心血来潮,我希望能写一个通用的代码分析工具(其实这个词有点太。事实上为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为起点进行遍历就可以。



       如今我仅仅是到了上面的几个方面。接下来肯定实现所遇到这么多问题。我相信,办法总比困难多。加油。

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    java基础面试题-1
    深入探讨 Java 类加载器
    毕向东—Java基础知识总结(超级经典)
    nyoj-161-取石子 (四)
    nyist-751-破坏城市
    nyist-144-小珂的苦恼
    zoj-1047-I Think I Need a Houseboat
    zoj-1045-HangOver
    zoj-1037-Gridland
    hdoj-2268-How To Use The Car
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4662565.html
Copyright © 2011-2022 走看看