我使用gdb在Linux上探索一个核心文件,在检查内存地址时发现了奇怪的行为:
(gdb) x/f 0xbd091a10
0xbd091a10: 0
(gdb) x/g 0xbd091a10
0xbd091a10: 65574
(gdb) x/f 0xbd091a10
0xbd091a10: 65574
这些语句是直接背对背运行的,我不明白为什么检查as 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
。