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

新手上路,请多包涵

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

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

原文由 bits 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

最简单的方法是设置程序变量(参见 GDB: assignment ):

 (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 Fetissov 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

您还可以使用“set”命令更改内存位置。例如。扩展尼古拉的例子:

 (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

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

原文由 Andrew Edgecombe 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏