| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> Getting Control Flow Graph from ANSI C code -> 正文阅读 |
|
[C++知识库]Getting Control Flow Graph from ANSI C code |
源:https://stackoverflow.com/questions/16393985/getting-control-flow-graph-from-ansi-c-code/17844310 For the control flow graph of a C Program you could look at existing Python parsers for C: albertz PyCParser Call graphs are a closely related construct to control flow graphs. There are several approaches available to create call graphs (function dependencies) for C code. This might prove of help for progressing with control flow graph generation. Ways to create dependency graphs in C: CodeViz (GPL v2) (weak point: needs compilable source, because it uses gcc to dump cdepn files) Also, file dependency graphs for C/C++ can be created with crowfood. =============================================================== Dynamic analysis methods In this answer I describe a few dynamic analysis methods. Dynamic methods actually run the program to determine the call graph. The opposite of dynamic methods are static methods, which try to determine it from the source alone without running the program. Advantages of dynamic methods: catches function pointers and virtual C++ calls. These are present in large numbers in any non-trivial software. Disadvantages of dynamic methods: KcacheGrind https://kcachegrind.github.io/html/Home.html Test program:
Usage:
You are now left inside an awesome GUI program that contains a lot of interesting performance data. On the bottom right, select the “Call graph” tab. This shows an interactive call graph that correlates to performance metrics in other windows as you click the functions. To export the graph, right click it and select “Export Graph”. The exported PNG looks like this: From that we can see that: the root node is _start, which is the actual ELF entry point, and contains glibc initialization boilerplate The cool thing about valgrind is that it does not require any special compilation options. Therefore, you could use it even if you don’t have the source code, only the executable. valgrind manages to do that by running your code through a lightweight “virtual machine”. Tested on Ubuntu 18.04.
https://github.com/elcritch/etrace -finstrument-functions adds callbacks, etrace parses the ELF file and implements all callbacks. I couldn’t get it working however unfortunately: Why doesn’t Claimed output is of format:
Likely the most efficient method besides specific hardware tracing support, but has the downside that you have to recompile the code. |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 4:19:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |