5

我尝试为一些 c 项目构建探查器。我希望 gcc 在编译时在所有函数入口和函数出口点中植入一些汇编指令。我尝试在网上搜索一些指南,但没有成功。我在哪里可以学习如何做到这一点?

预先感谢。

4

2 回答 2

6

显然您可以使用该-finstrument-functions标志来获取 gcc 以生成检测调用

void __cyg_profile_func_enter(void *func, void *callsite); 
void __cyg_profile_func_exit(void *func, void *callsite); 

在函数入口和出口处。我从未使用过它,但快速搜索会在此处此处此处此处找到信息和示例。

于 2013-02-13T11:05:05.040 回答
2

除非您想修改gcc(这很重要!),否则我认为有两种相当明显的方法。

  1. 预处理 C 代码本身 - 这并不容易,但也不是非常难。找到函数的开头和结尾,然后将代码添加到其中,然后让编译器适当地完成编写代码的工作......市场上有很多工具以一种或另一种方式做到这一点,例如多种用途[代码流分析、分析等]。
  2. 获取 gcc 的汇编器输出并对其进行处理以将代码添加到那里的函数中。这在某些方面更容易,在某些方面更难。识别函数可能不再困难,但“不破坏”汇编代码可能更难,除非您插入的汇编代码完全“安全”。

显然,修改的选项gcc也是一种可能,但编译器代码相当复杂,除非你基本上把所有现有的钩子都用于gprof,否则我不认为这是一个学校项目——除非你正在攻读博士学位或一些这样的。

于 2013-02-13T11:03:55.690 回答