assembly x86程序集中的falling in segmentation故障

zbq4xfa0  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(93)

我试图用printf打印逗号后的每个字符,但它给了我分割错误

global main

extern printf

section .data
        num db "%d",0
        array db 2,4,3
        arrlen equ $ - array

section .text
main:
        mov ecx, 0

mainloop:
        cmp ecx, arrlen
        je exit

        movzx ebx, byte [array + ecx]
        push ebx
        push num
        call printf

        add esp, 8

        inc ecx
        jmp mainloop

exit:
        mov eax, 1
        xor ebx, ebx
        int 0x80

字符串
我甚至尝试使用chatGPT xd

k7fdbhmy

k7fdbhmy1#

ECX不是一个保留调用的寄存器。printf可能会修改它,使基于ECX的循环运行太长时间,从而寻址数组之外的内存。
尝试使用EBX,它是一个保留调用的寄存器:

main:
        xor   ebx, ebx
        jmp   beginloop
mainloop:
        movzx eax, byte [array + ebx]
        push  eax
        push  num
        call  printf
        add   esp, 8
        inc   ebx
beginloop:
        cmp   ebx, arrlen
        jb    mainloop
exit:
        mov   eax, 1
        xor   ebx, ebx
        int   0x80

字符串

相关问题