GCC(我使用的是GCC-4.8.5)具有prelogue和epilogue的概念,用于在每个函数的开头和结尾生成代码。我想知道如何将自己的代码插入prelogue和epilogue。我试图搜索" prologue / epilogue"在gcc源代码中,但仍然没有任何想法(我是编译新手)。任何人都可以告诉我如何详细实现这一点(例如,我要寻找gcc中的哪些功能,等等。)
顺便说一下,有人问了类似的问题here,但那里的答案没有帮助。答案 0 :(得分:0)
这取决于你究竟想做什么。您可以在函数调用之前或在函数中插入asm代码来操作编译器实现的调用机制,而不是更改编译器这是一项复杂的工作。或者您可以使用asm代码来调用您的函数,而不是使用标准语法。我记得我在某处读过这个。我认为这是osdev.org的一篇文章。
答案 1 :(得分:0)
定义一个新的ret函数并使用return ret();在函数中调用它。在这个新的ret函数中转储堆栈。