如何使用gdb修改内存内容?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (947)

我知道我们可以使用几个命令来访问和读取内存:例如,打印,p,x.

但是,如何在任何特定位置(在GDB中调试时)更改内存内容?

提问于
用户回答回答于

最简单的方法是设置程序变量:

(gdb) l
6       {
7           int i;
8           struct file *f, *ftmp;
9
(gdb) set variable i = 10
(gdb) p i
$1 = 10

或者您只需按地址更新任意(可写)位置:

(gdb) set {int}0x83040 = 4
用户回答回答于

正如Nikolai所说,可以使用gdb‘set’命令来更改变量的值。

还可以使用“set”命令更改内存位置。扩展Nikolai的例子:

(gdb) l
6       {
7           int i;
8           struct file *f, *ftmp;
9
(gdb) set variable i = 10
(gdb) p i
$1 = 10

(gdb) p &i
$2 = (int *) 0xbfbb0000
(gdb) set *((int *) 0xbfbb0000) = 20
(gdb) p i
$3 = 20

这应该适用于任何有效的指针,并且可以转换为任何适当的数据类型。

扫码关注云+社区

领取腾讯云代金券