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

汇编:一个简单的例子,将x86代码转换为x64

虽然我正在学习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 ++使用裸函数

我如何调用一个函数,它需要几个int整数?

PEB地址(0x07FFDA00)是来自加载进程的基地址的RVA吗?

如何find一个C程序的“退出

为什么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] 举报,一经查实,本站将立刻删除。

相关推荐