【发布时间】:2024-04-19 14:15:02
【问题描述】:
我正在用 x86 程序集编写一个可以从 c 代码调用的函数,我想知道在返回调用者之前必须恢复哪些寄存器。
目前我只恢复esp和ebp,而返回值在eax中。
还有其他我应该关注的寄存器吗,或者我可以在其中留下任何我喜欢的东西吗?
【问题讨论】:
-
没有一般规则——您必须查阅 C 编译器的文档以了解它的预期。
-
我很确定 Jerry 是对的,这取决于调用约定;如果没记错的话,Windows、Posix 等有不同的“标准”约定。您使用的是哪个编译器?
-
海合会。我发现这个搜索en.wikibooks.org/wiki/X86_Disassembly/Calling_Conventions(见退出序列),但它没有说明寄存器,只是它们应该恢复到调用者期望的状态。
标签: assembly x86 calling-convention