我最近一直在 linux 上玩 x86 64 位汇编,在编译了一个看似简单的程序后,我只能摸不着头脑:P
虽然我编译和链接它不会抛出任何错误并产生一个 linux ELF 当我尝试运行它时,我得到:
.:[ h4unt3r@sp3ctr4l-h0st asm ]:.
#(0)> ./hello
bash: ./hello: No such file or directory
我假设它产生了一个无效的 ELF 文件,这就是为什么它报告 hello 不存在,即使它是。不知道为什么-我可能会继续玩它,只是好奇这是否可以用简单的方法解决^_^
这是我的编译/链接命令行:
nasm -f elf64 hello.s -g
ld -o hello hello.o -lc
这是代码:
section .data
msg: db "Hello, world!",0xa,0
section .text
extern printf
global main
main:
push rbp
mov rbp, rsp
mov rdi, msg
xor rax, rax
call printf
xor rax, rax
pop rbp
ret
编辑——我不想使用 gcc :)