一、 简介

gdb中用x命令来显示特定格式的内存单元数据。

二、说明

x [地址]
x /[格式] [地址]
x /[长度][格式] [地址]
x

三、实例

/* file : test.c */
/* gcc -o test test.c -g */
/* gdb ./test */
int main(int argc, char *argv[]) {
    char arr[] = "123456789ABCDEF";
    return 0;
}
$ gdb test
(gdb) break main
(gdb) run
Breakpoint 1, main (argc=1, argv=0x7fffffffe4f8) at test.c:2
2           char arr[] = "123456789ABCDEF";
(gdb) next
3           return 0;
(gdb) x arr
0x7fffffffe400: 0x34333231
(gdb) x /c arr
0x7fffffffe400: 49 '1'
(gdb) x /5c arr
0x7fffffffe400: 49 '1'  50 '2'  51 '3'  52 '4'  53 '5'
(gdb) x /5xb arr
0x7fffffffe400: 0x31    0x32    0x33    0x34    0x35
(gdb) x /gx arr
0x7fffffffe400: 0x3837363534333231
(gdb) x /5i $pc
=> 0x4004c9 <main+39>:  mov    $0x0,%eax
   0x4004ce <main+44>:  pop    %rbp
   0x4004cf <main+45>:  retq   
   0x4004d0 <__libc_csu_init>:  push   %r15
   0x4004d2 <__libc_csu_init+2>:        mov    %edi,%r15d

四、参数

4.1 地址

地址可为表达式/直接地址,其结果为内存地址。例如可用寄存器($eip)或伪寄存器($pc)。若x指令后没有地址表达式,则显示结果为上一次地址。

4.2 格式

  • o - octal 八进制
  • x - hexadecimal 十六进制
  • d - decimal 十进制
  • u - unsigned decimal 无符号十进制
  • t - binary 二进制
  • f - floating point 浮点数
  • a - address 地址
  • c - char 字符
  • s - string 字符串
  • i - instruction 指令

4.3 长度

  • b - byte 字节
  • h - halfword 半字(16位)
  • w - word 字(32位)
  • g - giant word 双字(64位)
Last modification:April 4th, 2020 at 11:49 pm