我在x86程序集中编写一个函数,该函数应该可以从c代码调用,我想知道在返回给调用者之前我必须还原哪些寄存器.
目前我只是恢复esp和ebp,而返回值是eax.
有没有其他的注册我应该关心,或者我可以离开我喜欢的人吗?
目前我只是恢复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 举报,一经查实,本站将立刻删除。