调试时在 GDB 中修改 char*

Modify char* in GDB while debugging

当我使用 GDB 进行调试时,我可以打印字符串:

x/s $r0

输出为

IDog123456

我想更改值,所以当我打印 x/s $r0 我会看到

ICat45555

我已经尝试过:

set $r0+1 ={int} 0x43617434 #Cat4
set $r0+5 ={int} 0x35353535 #5555

但这行不通,没有 malloc 怎么办?请只使用十六进制字符串?

通常,gdb 表达式解析器的操作类似于当前语言,因此,在上面,当您编写:

set $r0+1 ={int} 0x43617434 #Cat4

左边是整型常量,不可赋值。

相反,您应该像在 C:

中那样编写它
set *($r0+1) = (int) 0x43617434

哪个应该完成这项工作。

有时,您可能最终也需要对 LHS 的指针进行大小写处理,如下所示:

set *((int *) ($r0+1)) = (int) 0x43617434

但我怀疑你的情况不会有问题。