最近心血来潮,我希望能写一个通用的代码分析工具(其实这个词有点太。事实上为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代码分析器(一个 公开赛冠军)的更多相关文章

  1. 建立标准编码规则(一)-自定义C#代码分析器

    1.下载Roslyn的Visual Studio分析器模板插件(VS2015 或VS2017) https://marketplace.visualstudio.com/items?itemName= ...

  2. 通过 Mesos、Docker 和 Go,使用 300 行代码创建一个分布式系统

    [摘要]虽然 Docker 和 Mesos 已成为不折不扣的 Buzzwords ,但是对于大部分人来说它们仍然是陌生的,下面我们就一起领略 Mesos .Docker 和 Go 配合带来的强大破坏力 ...

  3. 40多行python代码开发一个区块链。

    40多行python代码开发一个区块链?可信吗?我们将通过Python 2动手开发实现一个迷你区块链来帮你真正理解区块链技术的核心原理.python开发区块链的源代码保存在Github. 尽管有人认为 ...

  4. python 控制语句基础---->代码块:以为冒号作为开始,用缩进来划分作用域,代表一个整体,是一个代码块,一个文件(模块)也称为一个代码块 | 作用域:作用的范围

    # ### 代码块:以为冒号作为开始,用缩进来划分作用域,代表一个整体,是一个代码块,一个文件(模块)也称为一个代码块 # ### 作用域:作用的范围 print(11) print(12) prin ...

  5. 建立标准编码规则(三)-CodeFixProvider 给代码分析器增加修复建议

    给代码分析器增加修复建议 既然代码分析器,向代码编写者提出了错误或警告,那么有没有可能向代码编写者提交有效的改进建议? 相对于 DiagnosticAnalyzer,代码修复继承与 CodeFixPr ...

  6. 只用120行Java代码写一个自己的区块链-3挖矿算法

    在本系列前两篇文章中,我们向大家展示了如何通过精炼的Java代码实现一个简单的区块链.包括生成块,验证块数据,广播通信等等,这一篇让我们聚焦在如何实现 PoW算法. 大家都无不惊呼比特币.以太坊及其他 ...

  7. 通过Mesos、Docker和Go,使用300行代码创建一个分布式系统

    [摘要]虽然 Docker 和 Mesos 已成为不折不扣的 Buzzwords ,但是对于大部分人来说它们仍然是陌生的,下面我们就一起领略 Mesos .Docker 和 Go 配合带来的强大破坏力 ...

  8. 30行JavaScript代码实现一个比特币量化策略

    精简极致的均线策略 30行打造一个正向收益系统 原帖地址:https://www.fmz.com/bbs-topic-new/262 没错!你听的没错是30行代码!仅仅30行小编我习惯先通篇来看看 代 ...

  9. 分享如何在github上为代码创建一个链接

    从自学前端到现在差不多一个月了,在此期间,一直有一种困惑,如何将自己电脑中编写的代码生成一个链接,以便可以发布呢?今天有幸被高人指点一二,现将其分享. 第一步,网上注册一个github账号 第二步,新 ...

随机推荐

  1. Linux内核的同步机制---自旋锁

    自旋锁的思考:http://bbs.chinaunix.net/thread-2333160-1-1.html 近期在看宋宝华的<设备驱动开发具体解释>第二版.看到自旋锁的部分,有些疑惑. ...

  2. el表达式 分页提交 中文乱码

    el表达式 分页提交 中文乱码 网上找了很多资料,没能解决我的问题.并不是说网上的那些资料不好.而是不适用于我的问题吧. 看看的的问题: 原始页面 单击下一页 , 乱码. 引起的原因则是因为自己的js ...

  3. 【ECSHOP插件】商品颜色尺寸仿淘宝选择功能免费发布

    先放效果图,如此实用的功能是不是迫不及待的要添加到自己的网店中了呢   牵涉到的修改文件(default模板为例) /themes/default/style.css /themes/default/ ...

  4. C陷阱与缺陷之语法陷阱

    2.1理解函数声明 不论什么C变量的声明都由两部分组成:类型以及一组类似表达式的声明符号.比如 float f; 这个声明的含义是:当对其求值时,表达式f和g的类型为浮点数类.由于声 明符与表达式的相 ...

  5. C# 视频教程

    http://www.cnblogs.com/kellen/tag/Silverlight/ http://www.lanmaodream.com/archives/244.html

  6. CSS预处理器——Sass、LESS和Stylus实践

    CSS(Cascading Style Sheet)被译为级联样式表,做为一名前端从业人员来说,这个专业名词并不陌生,在行业中通常称之为“风格样式表(Style Sheet)”,它主要是用来进行网页风 ...

  7. 调用API 清屏

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. 从最大似然到EM算法浅解

    从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之中的一个:EM算法.能评得上十大之中的一个,让人听起来认为挺NB的. ...

  9. Sliverlight实例之 使用 ControlTemplate 自定义按钮的外观

    按钮,最终效果,如下图: 见Project21_ButtonSkin 1, 创建Sliverlight项目 说明: generic.xaml:样式和模板就被定义在这个文件里 MyButton.cs:控 ...

  10. ImportError with IronPython in C#

    I was using IronPython to execute python code inside my C# implementation lately, and I encountered ...