; NASM push 30 ; ‘0’
mov rax, 4 ; write mov rbx, 1 ; stdout mov rcx, rsp ; ptr to character on stack mov rdx, 1 ; length of string = 1 int 80h
上面的代码不会将任何内容输出到stdout。当我对中的字符进行ptr时,它会起作用section .data。我究竟做错了什么?
section .data
amd64使用系统调用比一个不同的方法int 0x80,但可能仍然与32位库工作装等。而对x86一个会做:
amd64
int 0x80
x86
mov eax, SYSCALL_NUMBER mov ebx, param1 mov ecx, param2 mov edx, param3 int 0x80
在amd64一个反而会做到这一点:
mov rax, SYSCALL_NUMBER_64 ; different from the x86 equivalent, usually mov rdi, param1 mov rsi, param2 mov rdx, param3 syscall
对于您想要做的事情,请考虑以下示例:
bits 64 global _start section .text _start: push 0x0a424242 mov rdx, 04h lea rsi, [rsp] call write call exit exit: mov rax, 60 ; exit() xor rdi, rdi ; errno syscall write: mov rax, 1 ; write() mov rdi, 1 ; stdout syscall ret