增量循环在NASM中

时间:2018-05-08 17:13:14

标签: linux assembly nasm x86-64

我在尝试让这个汇编代码工作时遇到了麻烦:

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 个答案:

答案 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),其中rdifdrsi为{{1} },bufrdx。您调用的问题是您将rsi作为文字值count,这使得linux转到地址1以查找显然无效的内容。

请考虑此示例,以便有效地打印数字' 1'然后是换行符

0x1

如果您要进行投票,请解释您认为答案错误的方法,只需按下投票按钮并不能帮助任何人