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