我在尝试让这个汇编代码工作时遇到了麻烦:
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编写的。
答案 0 :(得分:4)
你的答案有多少问题,首先是系统调用号码。您将值4
放在rax中,但对于x86_64 linux,sys_write的值为1
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
为{{1} },buf
是rdx
。您调用的问题是您将rsi作为文字值count
,这使得linux转到地址1
以查找显然无效的内容。
请考虑此示例,以便有效地打印数字' 1'然后是换行符
0x1
如果您要进行投票,请解释您认为答案错误的方法,只需按下投票按钮并不能帮助任何人