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为起点进行遍历就可以。

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

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

时间: 2024-12-29 11:17:41

C代码分析器(一个 公开赛冠军)的相关文章

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

最近突发奇想,希望能写一个通用的代码分析工具(有点言过其实了,其实是针对C代码的).这几天看代码看的我头晕眼花,虽然有Source Insight的帮助,仍然觉得很多地方不够智能.现在主要遇到的问题有以下几个: 1,很多函数被定义为宏,然后被调用.这个就需要自己搜索到相应的定义,然后再去寻找调用处. 2,程序的结构中很多用到有限状态机,函数会被放到数组中.会遇到和上面同样的问题. 3,现有的工具无法展示所有函数的调用和被调用关系,让看代码总是盲人摸象,难免会出现疏漏. 所以希望能自己写一个代码分

建立标准编码规则-自定义C#代码分析器

1.下载Roslyn的Visual Studio分析器模板插件(VS2015 或VS2017) https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.NETCompilerPlatformSDK 我后来查询到官方说明vs2017已经内嵌了此功能 Want to start developing in C# and Visual Basic? Download Visual Studio 2017,

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

[摘要]虽然 Docker 和 Mesos 已成为不折不扣的 Buzzwords ,但是对于大部分人来说它们仍然是陌生的,下面我们就一起领略 Mesos .Docker 和 Go 配合带来的强大破坏力,如何通过 300 行代码打造一个比特币开采系统. 时下,对于大部分 IT 玩家来说, Docker 和 Mesos 都是熟悉和陌生的:熟悉在于这两个词无疑已成为大家讨论的焦点,而陌生在于这两个技术并未在生产环境得到广泛使用,因此很多人仍然不知道它们究竟有什么优势,或者能干什么.近日, John W

一行JS代码屏蔽一个网站的访问

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

代码添加一个按钮及监听方法

有时候无法从控件中拖拽一个按钮到storyboard,必须用编写代码方式添加按钮: 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 // Do any additional setup after loading the view, typically from a nib. 5 //计算出展示表情区域的宽和 展示区距顶部的高度+10个偏移量 6 //添加按钮 9 //创建button 10 addBtn = [[UIButton alloc

Unity3D除了在编辑器里,怎么用代码给一个Texture类型的变量赋值

resource.load上来一张贴图就行. ? 1 2 3 4 5 6 7 8 9 using UnityEngine; using System.Collections; public class example : MonoBehaviour {     void Start() {         GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);         go.renderer.material.mai

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

从自学前端到现在差不多一个月了,在此期间,一直有一种困惑,如何将自己电脑中编写的代码生成一个链接,以便可以发布呢?今天有幸被高人指点一二,现将其分享. 第一步,网上注册一个github账号 第二步,新建一个repository 注意:这里选择public,而不是private 点击create repository 第三步,选择一个主题,点击settings 第四步,添加自己的代码 建立一个新的文件,比如 保存 删掉index.md 第五步,复制链接 https://941117pml.gith

不到100行代码实现一个推荐系统

似乎咱的产品七,八年前就想做个推荐系统的,就是类似根据用户的喜好,自动的找到用户喜欢的电影或者节目,给用户做推荐.可是这么多年过去了,不知道是领导忘记了还是怎么了,连个影子还没见到. 而市场上各种产品的都有了推荐系统了.比如常见的各种购物网站京东,亚马逊,淘宝之类的商品推荐,视频网站优酷的的类似影片推荐,豆瓣音乐的音乐推荐...... 一个好的推荐系统推荐的精度必然很高,能够真的发现用户的潜在需求或喜好,提高购物网詀的销量,让视频网站发现用户喜欢的收费电影... 可是要实现一个高精度的推荐系统不

不到100行代码实现一个简单的推荐系统

似乎咱的产品七,八年前就想做个推荐系统的,就是类似根据用户的喜好,自动的找到用户喜欢的电影或者节目,给用户做推荐.可是这么多年过去了,不知道是领导忘记了还是怎么了,连个影子还没见到. 而市场上各种产品的都有了推荐系统了.比如常见的各种购物网站京东,亚马逊,淘宝之类的商品推荐,视频网站优酷的的类似影片推荐,豆瓣音乐的音乐推荐...... 一个好的推荐系统推荐的精度必然很高,能够真的发现用户的潜在需求或喜好,提高购物网詀的销量,让视频网站发现用户喜欢的收费电影... 可是要实现一个高精度的推荐系统不