在调试过程中,有时需要查看内存的值和内存中的值,本文将介绍如何使用GDB的命令来实现相关操作。
1 查看内存
可以使用 examine 命令(简写是 x)来查看内存地址中的值。x 命令的语法如下所示:
x/<n/f/u> <addr>
n、f、u 是可选的参数。n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。f 表示显示的格式。如果地址所指的是字符串,那么格式可以是s,如果是指令地址,那么格式可以是 i。u 表示从当前地址往后请求的字节数,如果不指定的话,GDB 默认是 4 个bytes。u 参数可以用下面的字符来代替,b 表示单字节,h 表示双字节,w 表示四字节,g 表示八字节。当我们指定了字节长度后,GDB 会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。<addr>表示一个内存地址。n/f/u 三个参数可以一起使用。例如:命令:x/3uh 0x54320 表示,从内存地址 0x54320 读取内容,h 表示以双字节为一个单位,3 表示三个单位,u 表示按十六进制显示。
一些其它的例子:
(gdb) x/d 0x12345678 // 以十进制格式显示 0x12345678 内存地址中的数据
(gdb) x/x 0x12345678 // 以十六进制格式显示 0x12345678 内存地址中的数据
(gdb) x/f 0x12345678 // 以浮点数格式显示 0x12345678 内存地址中的数据
(gdb) x/s