pushl в стек относительно% ebp приводит к segfault - PullRequest
0 голосов
/ 22 мая 2019

Я хочу напечатать значения, хранящиеся в стеке, используя переменную 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

Буду благодарен за любую помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...