1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| https: 你可以使用指令 x来检查内存,并以各种格式打印出来,独立于你的程序数据类型; 语法: x/nfu addr x addr x来检查内存,并以各种格式打印出来,独立于你的程序数据类型; n f和u是所有的可选参数,用来具体化多少内存展示出来,和什么格式。 addr是一个表达式,给定起始内存地址。如果你是用默认的nfu, 你不需要打'/'.有几个命令为addr设置了方便的缺省值。 n, the repeat count是一个十进制整数;默认值是1。它指定显示多少内存(以单位u计数)。如果指定了一个负数,则从addr开始向后检查内存。 f, the display format 是是print (' x ', ' d ', ' u ', ' o ', ' t ', ' a ', ' c ', ' f ', ' s '), ' i '(用于机器指令)和' m '(用于显示内存标签)使用的格式之一。初始值是' x '(十六进制)。每次使用x或print时,默认值都会改变。
u,the unit size 即单位内存大小: b Bytes.
h Halfwords (two bytes).
w Words (four bytes). This is the initial default.
g Giant words (eight bytes).
每次你用x指定一个单位大小,下一次你使用x时,这个大小就会成为默认的单位。对于' i '格式,单位大小会被忽略,通常不会被写入。对于' s '格式,除非明确给出,否则单位大小默认为' b '。使用x /hs显示16位字符串, 使用x /ws显示32位字符串。下一次使用x /s将再次显示8位字符串。注意,结果取决于当前编译单元的编程语言。如果语言是C, ' s '修饰符将使用UTF-16编码,而' w '将使用UTF-32
addr:starting display address addr是你想要GDB开始显示内存的地址。表达式不需要有指针值(尽管可以);它总是被解释为内存的一个字节的整数地址。 例如,' x/3uh 0x54320 '是一个显示内存的三个半字(h)的请求,格式化为无符号十进制整数(' u '),从地址0x54320开始。' x/4xw $sp '打印堆栈指针上方的内存的四个单词(' w ') 您还可以指定一个负重复计数来从给定地址反向检查内存。例如,' x/-3uh 0x54320 '打印三个半字(h)在0x54314、0x54328和0x5431c。
当检查机器指令时,当前程序计数器上的指令用=>标记显示。例如: (gdb) x/5i $pc-6 0x804837f <main+11>: mov %esp,%ebp 0x8048381 <main+13>: push %ecx 0x8048382 <main+14>: sub $0x4,%esp => 0x8048385 <main+17>: movl $0x8048460,(%esp) 0x804838c <main+24>: call 0x80482d4 <puts@plt>
|