我想使用变量iIndex打印存储在堆栈中的值,这意味着存储在堆栈中的元素数。堆栈中存储的所有值都是整数,而iIndex的值是-4,-8,-12 ...依元素数而定。但是,我在第一个循环的pushl iIndex(%ebp)遇到段错误,我不知道为什么会发生这种情况。 (iIndex以4个字节存储在bss部分中)
if_f:
cmpl $0, iIndex
je error1
movl iIndex, %ecx
f_loop:
pushl iIndex(%ebp)
pushl $resultFormat
call printf
addl $8, %esp
addl $4, iIndex
cmpl $0, iIndex
je f_loopend
jmp f_loop
f_loopend: #need to restore iIndex
movl %ecx, iIndex
jmp input
例如,我将值1和2连续存储在堆栈中,并使用GDB显示iIndex为-8。
f_loop () at sand.s:201
201 pushl iIndex(%ebp)
(gdb) x/d &iIndex
0x5655701d: -8
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
f_loop () at sand.s:201
eax 0x0 0
ecx 0xfffffff8 -8
edx 0x66 102
ebx 0x0 0
esp 0xffffd1c0 0xffffd1c0
ebp 0xffffd1c8 0xffffd1c8
esi 0xf7fb5000 -134524928
edi 0x0 0
eip 0x56555858 0x56555858 <f_loop>
eflags 0x10282 [ SF IF RF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x0 0
gs 0x63 99
感谢您的帮助!