我正在使用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)
答案 0 :(得分:3)
这没有不一致之处。 'f'和'g'是不同类别的说明符,'f'表示格式,'g'表示单位大小。使用时,每个说明符都成为其自己的类别的默认值,该类别适用于'x'的所有后续使用。因此,您的最后两个命令都等同于x/fg 0xbd091a10
。