2015-07-14 4 views
1

Я отлаживаю двоичную программу x8632bit. И когда я пытаюсь выполнить приведенные ниже инструкции, я просто не могу найти обновление памяти в памяти, соответствующее 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?

Я проясняю? Может ли кто-нибудь мне помочь?

+0

Он должен содержать это значение. Вы уверены, что 'eax' равен нулю? Когда-нибудь во время отладки я останавливаю одну инструкцию раньше или позже, вы уверены, что выполнили 'movl'? –

+0

@ knm241, спасибо. Я дважды проверил отладку. Я уверен, что 'eax' равен нулю, и он выполнил инструкции. – computereasy

+1

Разберите инструкцию в gdb и проверьте адрес. – Jester

ответ

3

Предполагаемый номер buf, который вы видите, относится к другому символу с тем же именем, или gdb каким-то образом выбирает неправильный адрес. Разберите инструкцию в gdb и проверьте фактический адрес.

Вы также можете попробовать info variables ^buf$

 Смежные вопросы

  • Нет связанных вопросов^_^