如何通过gcc在功能的序言和尾声中植入装配指令
我尝试为某个c项目构建探查器。 我希望gcc在编译时在所有函数条目和函数出口点中植入一些汇编指令。 我试图在网上搜索一些指南,但没有成功。 我在哪里可以学会如何做到这一点如何通过gcc在功能的序言和尾声中植入装配指令,c,gcc,embedded,C,Gcc,Embedded,我尝试为某个c项目构建探查器。 我希望gcc在编译时在所有函数条目和函数出口点中植入一些汇编指令。 我试图在网上搜索一些指南,但没有成功。 我在哪里可以学会如何做到这一点 提前感谢。除非您想修改gcc(这是非常重要的!),否则我认为有两种相当明显的方法 对C代码本身进行预处理——这并不容易,但也不是很难。找到函数的开头和结尾,并将代码添加到其中,然后让编译器正确地完成生成代码的工作。。。市场上有相当多的工具以这样或那样的方式实现这一点,用于各种目的[代码流分析、评测等] 获取gcc的汇编程序输出
提前感谢。除非您想修改
gcc
(这是非常重要的!),否则我认为有两种相当明显的方法
显然,修改
gcc
的选项也是可能的,但是编译器代码相当复杂,除非您基本上使用gprof
的所有现有挂钩,我不认为这是一个学校项目,除非你正在攻读博士学位或类似的课程。显然,你可以使用-finstrument functions
标志让gcc生成插装调用
void __cyg_profile_func_enter(void *func, void *callsite);
void __cyg_profile_func_exit(void *func, void *callsite);
在函数入口和出口处。我从未使用过这个,但快速搜索会显示信息和示例。使用gperf如何?我想构建探查器-这是我的研究项目:)还要注意
no\u instrument\u函数
属性,可以在cyg_profile函数本身上使用,以防止无限递归。绝对-我强烈建议事先处理好在线文档和示例-正如我所说,从未亲自使用过,但它看起来确实像是一种可能有许多隐藏陷阱的东西!