Linux GDB "исследовать" поведение

0

Я использую gdb для изучения основного файла в Linux, и я заметил странное поведение при рассмотрении адресов памяти:

(gdb) x/f 0xbd091a10
0xbd091a10:     0
(gdb) x/g 0xbd091a10
0xbd091a10:     65574
(gdb) x/f 0xbd091a10
0xbd091a10:     65574

Эти операторы выполнялись прямо по спине, и я не понимаю, почему рассмотрение как float возвращает несогласованные результаты. Значение 65574 имеет смысл, так как оно соответствует идентификатору последнего загруженного элемента процессом.

Кто-нибудь знает причину этого?

Сведения о версии:

Linux mx534vm 2.6.18-308.el5 #1 SMP Fri Jan 27 17:17:51 EST 2012 x86_64 x86_64 x86_64 GNU/Linux

GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-32.el5)

  • 1
    В этом нет противоречий. «f» и «g» - это спецификаторы в разных категориях, «f» для формата и «g» для размера блока. Каждый спецификатор, когда он используется, становится значением по умолчанию для его собственной категории, которая сохраняется для всех последующих использований «x». Таким образом, ваша последняя команда эквивалентна x/fg 0xbd091a10 .
  • 0
    Вы можете ссылаться на соответствующий пост stackoverflow.com/a/22871099/2724703
Показать ещё 1 комментарий
Теги:
gdb

1 ответ

3
Лучший ответ

В этом нет противоречия. 'f' и 'g' являются спецификаторами в разных категориях, 'f' для формата и 'g' для размера элемента. Каждый спецификатор, когда используется, становится дефолтом по своей собственной категории, который выполняется для всех последующих использования "x". Таким образом, ваши две последние команды эквивалентны x/fg 0xbd091a10.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню