是否有编译器功能来注入自定义函数入口和退出代码?

7 c

目前使用VS2005在Windows上编码(但不介意知道是否有其他编译器和平台的选项.我最感兴趣的是OSX作为替代平台.)我有一个C(没有C++)程序,我想要做以下......

给定一个功能,比如......

int MyFunction(int myparam)
{
   // Entry point.
   ...
   // Exit point.
   return 1;
}
Run Code Online (Sandbox Code Playgroud)

我想在入口点和出口点放一段代码.但是,我宁愿不必修改已经存在的100个函数.有没有办法定义编译器将为我的所有函数注入的函数入口和退出代码,而无需全部修改它们?

我发现或尝试过的大多数解决方案都需要我编辑每一个功能,这是很多工作.我认为其他人必须已经打过这样的东西并解决了它.在我怀疑的这个要求中,我不能独一无二.

Mar*_*off 8

它是特定于Microsoft的,但您可以在进入和退出函数时挂钩_penter并_pexit执行某些操作 - 您必须使用一些特殊标志来编译项目.

这里有一些教程,您可以在Google上找到更多关于如何使用它们的结果.此外,这篇博文还详细介绍了您需要做的程序集,以避免在进入和退出时弄乱堆栈.


小智 6

GCC具有-finstrument-functions标志,允许您定义将在每个函数调用的开头和结尾调用的两个函数:

void __cyg_profile_func_enter(void *this_fn, void *call_site);
void __cyg_profile_func_exit(void *this_fn, void *call_site);
Run Code Online (Sandbox Code Playgroud)