如何通过gcc在功能的序言和结语中设置汇编指令

时间:2013-02-13 09:45:51

标签: c gcc embedded

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

提前谢谢。

2 个答案:

答案 0 :(得分:5)

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

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

在功能进入和退出时。我从未使用过此功能,但快速搜索会显示信息和示例herehereherehere

答案 1 :(得分:2)

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

  1. 预处理C代码本身 - 这并不容易,但也不是非常难。查找函数的开头和结尾,并将代码添加到函数中,然后让编译器正确地完成编写代码的工作......市场上有很多工具以这种或那种方式执行此操作,各种用途[代码流分析,分析等]。
  2. 获取gcc的汇编输出并处理它以向那里的函数添加代码。这在某些方面更容易,并且在某些方面更难。识别函数可能并不困难,但除非插入的汇编代码完全“安全”,否则“不破坏”汇编代码可能会更难。
  3. 显然,修改gcc的选项也是可能的,但编译器代码相当复杂,除非你基本上把gprof的所有现有挂钩都拿走了,我认为它不是学校项目 - 除非你正在去博士学位或其他方面。