我在裝配一個小程序時遇到了一點麻煩。它應該只打印堆棧中的所有內容,然後退出。據我所知,程序啓動後,堆棧上有很多東西。它確實打印了很多東西,但是隨後出現了分段錯誤。裝配,彈出堆棧到極限
下面是代碼:
SECTION .data
SECTION .bss
SECTION .text
global _start
_start:
mov eax,4
mov ebx,1
pop ecx
mov edx,4
int 80h
cmp esp,ebp
je out
jmp _start
out:
mov eax,1
mov ebx,0
int 80h
正如你可以看到條件退出循環是ESP == EBP這在我的理解應該是這樣的,當堆棧爲空。不幸的是,當用gdp檢查程序時,看起來ebp的值爲0.不是ebp應該指向堆棧底部,即具有最高地址嗎?
我真的很感激任何提示。
設置:Linux操作系統,32位,NASM
問候
堆棧指針是當你的程序被稱爲系統建立,但你需要設置'ebp'你需要的方式。不能保證在開始時等於堆棧指針,或者相對於堆棧指針有一些特定的值。有關參考資料,請參閱:http://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames – lurker