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

浏览 108关注 0回答 2得票数 0
原文

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

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

原文
用户62695767aa718提问于2018-05-10 02:04

2 个回答

高票数最新
用户62695767c28db
回答于2018-05-10 10:17已采纳
得票数 0

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

(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
用户62695767c28ea
回答于2018-05-10 11:36已采纳
得票数 0

正如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

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

页面原文内容由用户62695767aa718、用户62695767c28db、用户62695767c28ea提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:https://stackoverflow.com/questions/-100004060复制

扫码关注腾讯云开发者

领取腾讯云代金券