【发布时间】:2013-10-02 18:01:30
【问题描述】:
我在使用一个小汇编程序时遇到了一点麻烦。它应该只打印堆栈上的所有内容,然后退出。据我所知,程序启动后堆栈上有很多东西。它确实打印了很多东西,但随后退出并出现分段错误。
代码如下:
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。它不保证等于开始时的堆栈指针,或者相对于堆栈指针的某个特定值。参考见:en.wikibooks.org/wiki/X86_Disassembly/…
标签: linux assembly x86 nasm 32-bit