Я хочу напечатать значения, хранящиеся в стеке, используя переменную iIndex, которая означает количество элементов, хранящихся в стеке. Все значения, хранящиеся в стеке, являются целыми числами, а iIndex имеет значения -4, -8, -12 ... в зависимости от количества элементов. Тем не менее, я получаю segfault в pushl iIndex (% ebp) в первом цикле, и я понятия не имею, почему это происходит. (iIndex хранится в разделе bss как 4 байта)
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
Буду благодарен за любую помощь!