虽然我正在学习x64程序集,我试图使添加方法来添加两个整数,并使用程序集返回整数。 我有x86的工作代码,我试图转换为x64
只是我把寄存器的名字改为x64,并且生成的对象文件没有错误,但是当我在C函数中使用它时,我总是得到sum = 0。
我认为参数的位置有问题,我没有find这样的问题的好文件。
section .text global addi addi: push rbp mov rbp,rsp mov rax,[rbp+12] mov rdx,[rbp+8] add rax,rdx pop rbp ret
在Windows 64位上实现具有自定义堆栈的沙箱
从组件中读取文件
了解Windows中的AppDomain
c ++使用裸函数
PEB地址(0x07FFDA00)是来自加载进程的基地址的RVA吗?
为什么PE需要Original First Thunk(OFT)?
assembly部门和浮点
linux程序集反转一个string
x86-64有一个由amd定义的调用转换,这个平台的所有工具链应该遵循这个:
第一个参数 – > rdi
第二 – > rsi
3rd – > rdx
4th – > rcx
第五 – > rax
所以它应该看起来像:
section .text global addi addi: mov rax,rsi add rax,rdi ret
x64 ABI要求前几个参数在寄存器中传递,而不是在堆栈中传递。
请参阅x86-64上的堆栈帧布局,以获得很好的解释。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。