使用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

安装ncc,  pacman, yum或者 apt-get或者http://students.ceid.upatras.gr/~sxanth/ncc/

更改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

使用nccnavi 查看生成的nccout文件, man nccnavi有帮助

  G全局变量和函数等

 E最上层函数 

q退出或上一层

文件中所有的函数

回车进入mode2和返回

Mode2 

< > 历史记录

空格查看代码

执行shell命令

上下左右可以移动首字母可以快速定位.

具体的说明请查看帮助文档, 摸索一段时间自然清楚, 可以配合gdbnccnavi来分析程序流程和代码等.

5如果不同文件中有同名函数可能会报错这个时候不适合把多个文件的 xxx.nccout文件组合到一起

6 c99等新标准的代码可能会报错, 可能需要改动一下.

7 如果不能查看代码, 可以使用clang编译器代替gcc编译器, 貌似是和高版本gcc的格式兼容性不好的问题, 无法识别.c文件(clang不会安装可以百度)

原文地址:https://www.cnblogs.com/yiifburj/p/4613009.html