admin管理员组文章数量:1632336
在windows中使用nasm与在Linux中有所不同,主要在于函数的调用方式,nasm在linux中使用系统调用或C库函数时,参数使用寄存器的顺序是rdi,rsi,rdx,rcx,r8,r9,而在windows下,函数参数保存到rcx,rdx,r8,r9。
windows和Linux的系统调用有很多不同,windows的系统调用可以理解为Windows提供给程序员的API,也可以称为系统调用。
在nasm官方网站nasm_Win64下载nasmWin64版本。安装过程软件将安装目录添加到系统环境变量,不需要再次设置。
需要注意的是,如果在nasm汇编中使用了C库函数,这时候就需要使用gcc进行链接。
看下面的例子:
; hello.asm
; nasm -f win64 -o hello.obj hello.asm
; gcc hello.obj -o hello.exe
global main
extern puts
section .text
main:
sub rsp, 20h
mov rcx, message
call puts
add rsp, 20h
ret
message:
db "Hello",0
上面的代码中,使用extern puts声明了该程序需要使用外来的函数puts,在main函数中,将rsp减去20h,是为了开辟栈空间,最后要收回,把字符串的地址加载到寄存器rcx,上面说过,windows 64位调用函数时,参数保存在rcx,rdx,r8,r9。然后使用call指令调用函数puts,最后收回栈空间,然后返回。
编译和链接后,会生成hello.exe程序,在命令行下运行该程序,会打印字符串。
版权声明:本文标题:windows 64使用nasm 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1729118635a1187391.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论