Я отлаживаю двоичную программу x86
32bit
. И когда я пытаюсь выполнить приведенные ниже инструкции, я просто не могу найти обновление памяти в памяти, соответствующее buf
, когда вы используете gdb
для отладки. (buf
выделено в разделе .bss
).Не удалось найти измененное содержимое памяти в gdb
...
movl $0x4E713,buf(,%eax,0x4)
add $0x1,%eax
...
Когда я выполняю приведенный выше код в gdb
, я сделал это:
x/10x &buf
И к моему удивлению, даже после выполнения кода выше, содержание buf
еще что-то вроде этого (предположим, что значение eax
является нулевой):
0xf7fb6ef0 <buf>: 0x00000000 0x00000000 0x00000000 0x00000000
0xf7fb6f00 <buffer>: 0x00000000 0x00000000 0x00000000 0x00000000
0xf7fb6f10 <buffer>: 0x00000000 0x00000000
ли не в обратить внима ss 0xf7fb6ef0
содержит значение 0x4e713
?
Я проясняю? Может ли кто-нибудь мне помочь?
Он должен содержать это значение. Вы уверены, что 'eax' равен нулю? Когда-нибудь во время отладки я останавливаю одну инструкцию раньше или позже, вы уверены, что выполнили 'movl'? –
@ knm241, спасибо. Я дважды проверил отладку. Я уверен, что 'eax' равен нулю, и он выполнил инструкции. – computereasy
Разберите инструкцию в gdb и проверьте адрес. – Jester