微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

程序集 – 在c中调用x86函数后,哪些寄存器被还原?

我在x86程序集中编写一个函数,该函数应该可以从c代码调用,我想知道在返回给调用者之前我必须还原哪些寄存器.
目前我只是恢复esp和ebp,而返回值是eax.
有没有其他的注册我应该关心,或者我可以离开我喜欢的人吗?

解决方法

使用 Microsoft’s 32 bit ABI,EAX,EDX和ECX都是临时寄存器,其他一切都必须保留.

对于x64在Windows下,Microsoft says只需要恢复RBX,RBP,RDI,RSI,R12,R13,R14和R15.

对于x64,在System V & AMD64 (see figure 3.4)之后,其RBP,RBX,RSP,R14和R15(它们看起来很奇怪,因为内核使用一组寄存器和用户代码使用另一个集合,这在ABI文档).

原文地址:https://www.jb51.cc/c/116290.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐