我在尝试使用此汇编代码时遇到了问题:
section .text
global _start
_start:
loop:
mov rax, 4
mov rdi, 1
add rsi, 1
mov rdx, 1
syscall
cmp rsi,11
jne loop
exit:
mov rax,60
xor rdi,rdi
syscall
此代码的目的是递增 rsi 寄存器中的值,并将其打印输出10次。它是在Linux x86_64机器上用NASM编写的。
1条答案
按热度按时间ee7vknir1#
您的答案有很多地方不对,首先是系统调用编号。
http://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/
第二,您的参数有问题,对sys_write的调用如下所示,
sys_write(unsigned int fd, const char *buf, size_t count)
,其中rdi
是fd
,rsi
是buf
,且rdx
是count
。调用的问题在于,您将rsi作为文字值1
,这会使linux转到地址0x1
以查找要打印的内容这显然是无效的。考虑这个例子,它是打印数字'1'然后换行的有效方法