|
1
1
一般来说,您不能提取 准确的 来自二进制的控制流图,因为 indirect jumps and calls 在那里。一个机器代码间接调用正在跳转到某个寄存器的内容中,您不能 可靠的 估计寄存器可以接受的所有值(这样做可以证明与 halting problem ).
不 ,和 这个问题相当于停止问题 ,所以永远不会有一个确定的方法来获得调用图(以完整和合理的方式)。 C++编译器会(通常)为虚函数调用生成间接跳跃(它们通过 vtable )可能在使用共享库时 How To Write Shared Libraries 更多信息请参阅纸张)。 调查一下 BINSEC 工具(由CEA、LIST和INRIA的同事开发),至少可以找到参考文献。 如果您真的想在C++源代码中找到大多数(但不是全部)动态内存分配,则可以使用静态源代码分析(如 Frama-C 或 Frama-Clang )和其他工具,但它们不是银弹。
记住,分配函数
也许你可以花几个月的时间来写你自己的
GCC plugin
找电话
还要记住,GCC能够进行与
具有
所以 你想要的是 不简单 即使是明显的“简单”C++代码 是 不可能的 在一般情况下)。 如果你想编写一个GCC插件,并有超过一年的时间花在这个问题上(或可能支付至少50万),请与我联系。另见 https://xkcd.com/1425/ (你的问题是 几乎不可能 一个)。
当然,顺便说一句,您真正关心的是
优化
代码(你真的想要
inlining
和
dead code elimination
,GCC在
|
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
MysteryMoose · GCC下故意忽略初始化器警告中的过量元素 1 年前 |
|
|
Ken P · 如何利用[*]printf格式类型规范警告? 1 年前 |
|
fghoussen · 在C结构体中,为什么打包、对齐似乎会进行填充? 1 年前 |
|
|
adversarr · 全局变量何时导出到可执行文件? 1 年前 |