尝试打印整数时"Segmentation fault"



我一直在尝试编写一个打印数字的汇编过程。我编写了打印单个字符的程序printc

printc: push    ebp
mov     ebp, esp
mov     eax, 4
mov     ebx, 1
add     [ebp + 8], byte '0' 
lea     ecx, [ebp + 8]
mov     edx, 1
int     0x80
mov     esp, ebp
pop     ebp
ret

然后我试着写printi,所以:

printi: push    ebp
mov     ebp, esp
mov     eax, [ebp + 8]
cmp     eax, 0
je      end
mov     ebx, 10
div     ebx
push    eax
call    printi
push    edx
call    printc
end:    mov     esp, ebp
pop     ebp
ret

最后,我调用了printi:

_start: push    32 
call    printi

得到Segmentation fault (core dumped)。知道为什么吗?

正如Peter Cordes正确地说的,如果程序没有因为printi中的无限递归而提前崩溃,那么它将脱离_start并返回到未定义的代码。

存在无限递归的原因:您可能认为div ebxEAX除以10。它没有:它将EDX:EAX64位值除以EBX,并且您不控制EDX

DIV之前将EDX清零可以让程序打印一些东西(但不是所需的输出(,然后当它从printi掉下来时崩溃。

相关内容

  • 没有找到相关文章

最新更新