我試圖學習程序集並發現當試圖從堆棧推送/彈出數據時,我總是收到段錯誤。我已經閱讀了一些指南,並知道堆棧如何工作以及如何使用堆棧;但不知道爲什麼我不斷收到錯誤。當使用堆棧時,程序集不斷收到seg錯誤
有人可以幫忙嗎?
segment .data
myvar: db "hello world", 0xA0, 0
myvarL: equ $-myvar
segment .text
global _start
_start:
push ebp
mov ebp, esp
push myvarL
push myvar
call _hworld
mov eax, 1
mov ebx, 0
int 0x80
_hworld:
mov eax, 4
mov ebx, 1
mov ecx, [ebp+4]
mov edx, [ebp+8]
pop ebp
int 0x80
ret
我假設+4是32位,那麼+8是64位。我不清楚爲什麼在我讀過的一些指南中這樣做。我會假設myvar
是13個字節?
這是錯誤:
$ ./pushpop
Segmentation fault
你真的確認你第一次調用_hworld,然後再次運行呢?即程序的exit()在哪裏? –
4/8的事情可能是由於棧對齊。我認爲我說的一般而言,堆棧指針保持與機器字長對齊。所以只能移動32或64位塊。 – lynks