我想玩一点汇编。为了开始,我创建了一个小的asm脚本并尝试编译它
nasm -felf64 hello.asm
但当我尝试使用时
ld -o hello.o hello
从MinGW发生错误:
hello.o: file not recognized: File format not recognized
我能做些什么来解决这个问题?我也在gcc中尝试过,但随后出现了相同的错误和另一个错误。
MinGW创建针对Windows的二进制文件。Windows不支持ELF二进制文件(或者它支持用于Linux的Windows子系统?(。不管怎样,MinGW中的ld
会期望您提供win64
格式的二进制文件,而不是elf64
格式。
nasm -fwin64 hello.asm
很可能会起作用。
不,它不起作用,因为我刚刚看到您的代码,并且您正在Windows下使用Linux系统调用。
写入,
mov rcx, 69
call ExitProcess
而不是
mov rax, SYS_EXIT
mov rdi, 69
syscall
如果不起作用,请留下评论。