调试时在 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
但我怀疑你的情况不会有问题。
当我使用 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
但我怀疑你的情况不会有问题。