使用ncc分析代码
1 ncc是一个编译器, 用于输出程序的一些调用信息等, 可以查看函数调用关系, 支持函数指针, 查看数据结构和代码. 可以用来分析和理解代码.
“" ... with ncc, in less than 40 minutes I was able to comprehend the console i/o subsystem of the linux kernel and within an hour I had already submitted a patch to the l-k mailing list. I'm waiting for linus to apply..." an ncc user who wishes to remain anonymous
”
2 安装ncc, pacman, yum或者 apt-get等, 或者http://students.ceid.upatras.gr/~sxanth/ncc/
3 更改makefile
gcc改成 ncc -ncgcc -ncld -ncfabs -ncspp -nccpp=编译器
ar 改成nccar ld 改成nccld
man ncc 可以看帮助, ncc源码包里面的README有详细帮助.
生成程序的目录, 可以看到 xxx.nccout, 注意不包括动态链接库中的文件, 查看动态链接库,可以在编译动态链接库的地方使用ncc 等替换默认的gcc等, 有些程序编译的时候会清理临时文件, 所以动态链接库的 xxx.nccout文件会被清理掉, 解决办法是, 查看编译的详细输出信息, 复制下来, 更改gcc等, 然后手动执行, 可以生成xxx.nccout
4 使用nccnavi 查看生成的nccout文件, man nccnavi有帮助
G全局变量和函数等
E最上层函数
q退出或上一层
O 文件中所有的函数
回车, 进入mode2和返回
Mode2 中
< > 历史记录
空格, 查看代码
C 执行shell命令
上下左右可以移动, 首字母可以快速定位.
具体的说明请查看帮助文档, 摸索一段时间自然清楚, 可以配合gdb和nccnavi来分析程序流程和代码等.
5如果不同文件中有同名函数, 可能会报错, 这个时候不适合把多个文件的 xxx.nccout文件组合到一起
6 c99等新标准的代码可能会报错, 可能需要改动一下.
7 如果不能查看代码, 可以使用clang编译器代替gcc编译器, 貌似是和高版本gcc的格式兼容性不好的问题, 无法识别.c文件(clang不会安装可以百度)
使用ncc分析代码的更多相关文章
- 分析代码的利器 - ctags
比方我们在分析代码的时候,须要看某一个方法或类的定义,我们须要临时跳转过去看一下,然后还能非常方便的回来.这时候ctags就派上用场了. 比方你有一个src目录,先用ctags对其生成索引: ctag ...
- Javascript 缓冲运动——逐行分析代码,让你轻松了解缓冲运动的原理
看过上一篇关于Javascript 匀速运动文章的朋友相信对于运动已经有了初步的了解 接下来 讲一下关于缓冲运动的原理 ,我会逐行分析代码,代码简单易懂,能马上理解其中的原理,适用于初学者. #div ...
- 基于byte[]的HTTP协议头分析代码
smark 专注于高并发网络和大型网站架规划设计,提供.NET平台下高吞吐的网络通讯应用技术咨询和支持 基于byte[]的HTTP协议头分析代码 最近需要为组件实现一个HTTP的扩展包,所以简单地实现 ...
- 测试框架:使用SONAR分析代码质量
介绍 Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd.checkstyl ...
- Fortify SCA 分析代码漏洞全解
上次介绍了用FindBugs辅助分析代码漏洞.这次换了一个工具:Fortify SCA Demo 4.0.0.Fortify是一个在安全方面挺出名的公司,这里就不多说了.先介绍一下主角:Fortify ...
- CVE-2019-11477:Linux 内核中TCP协议栈整数溢出漏洞详细分析 代码卫士 今天
CVE-2019-11477:Linux 内核中TCP协议栈整数溢出漏洞详细分析 代码卫士 今天
- 10分钟进阶SpringBoot - 05. 数据访问之JDBC(附加源码分析+代码下载)
10分钟进阶SpringBoot - 05. 数据访问之JDBC 代码下载:https://github.com/Jackson0714/study-spring-boot.git 一.JDBC是什么 ...
- C# - 习题03_分析代码写出结果A.X、B.Y
时间:2017-08-23 整理:byzqy 题目:分析代码,写出程序的输出结果: 文件:Program.cs 1 using System; 2 3 namespace Interview2 4 { ...
- Xcode静态检查分析代码
Clang静态分析和Instruments来剖析代码有一些不同,Clang更致力于在编译的过程中通过自身的一套判断机制来找出代码中潜在的隐患. 在XCode 3.2之后的版本里,Clang已经被集 ...
随机推荐
- Hadoop HDFS文件常用操作及注意事项
Hadoop HDFS文件常用操作及注意事项 1.Copy a file from the local file system to HDFS The srcFile variable needs t ...
- Docker基础技术:Linux Namespace(上)
时下最热的技术莫过于Docker了,很多人都觉得Docker是个新技术,其实不然,Docker除了其编程语言用go比较新外,其实它还真不是个新东西,也就是个新瓶装旧酒的东西,所谓的The New “O ...
- [转]c/c++输入函数
最全输入函数 c/c++ 一: c=getchar(); 功能:读入一个字符 说明:调用此函数时要求在程序的第一行有预编译命令:#include<stdio>,不过在做c++时 有#inc ...
- Solr相关概念详解:SolrRequestHandler
转自:http://www.cnblogs.com/chenying99/archive/2012/07/24/2607339.html 1. standard (StandardRequestHan ...
- windows服务异常值framework版本
sc query WCService | find /i "state"if %errorlevel% == 0 ( net start "WCService" ...
- python 统计文本文件的行数
num_lines = sum(1 for line in open(input_file_name))
- POJ 2236 (简单并查集) Wireless Network
题意: 有n个电脑坏掉了,分别给出他们的坐标 有两种操作,可以O x表示修好第x台电脑,可以 S x y表示x y是否连通 两台电脑的距离不超过d便可连通,两台电脑是连通的可以直接连通也可以间接通过第 ...
- web项目路径问题
路径 相对路径 URL中第一个字符不为“/” request.getRequestDispatcher("b"); 相对于该代码所在 ...
- android layoutparams应用指南(转)
LayoutParams相当于一个Layout的信息包,它封装了Layout的位置.高.宽等信息.假设在屏幕上一块区域是由一个Layout占领的,如果将一个View添加到一个Layout中,最好告诉L ...
- 浅析Android中的消息机制(转)
在分析Android消息机制之前,我们先来看一段代码: public class MainActivity extends Activity implements View.OnClickListen ...