切换 C++ 函数的调用堆栈

2024-04-19

这是我的上一个问题 https://stackoverflow.com/questions/1371547/explanation-of-asm-code关于切换 C 调用堆栈。但是,C++ 使用不同的调用约定 (thiscall),并且可能需要一些不同的 asm 代码。有人可以解释这些差异并指出或提供一些切换 C++ 调用堆栈的代码片段(最好是在 GCC 内联汇编中)吗?

谢谢, 詹姆士


上一个问题中给出的代码应该可以正常工作。

The thiscall 调用约定 http://msdn.microsoft.com/en-us/library/ek8tkfbw(VS.71).aspx唯一的区别在于谁负责将参数从堆栈中弹出。在 thiscall 调用约定下,被调用者弹出参数(此外,this指针被传入ecx);根据 C 调用约定,调用者弹出参数。这不会影响上下文切换。

但是,如果您要自己进行上下文切换,请注意,除了切换堆栈之外,您还需要保存和恢复寄存器(可能在堆栈上)。

请注意,顺便说一句,C++ 并不总是使用 thiscall —— 它仅用于具有固定数量参数的方法(除此之外,它是 Microsoftism...g++ 不使用它)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

切换 C++ 函数的调用堆栈 的相关文章

随机推荐