【问题标题】:Modify char* in GDB while debugging调试时在 GDB 中修改 char*
【发布时间】:2023-02-26 04:37:28
【问题描述】:

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

x/s $r0

输出是

IDog123456

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

ICat45555

我试过:

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

但它不起作用,没有 malloc 我怎么能做到这一点?请仅使用十六进制字符串?

【问题讨论】:

    标签: debugging arm gdb remote-debugging cpu-registers


    【解决方案1】:

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

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

    左边是一个整数常量,不能赋值给它。

    相反,您应该像在 C 中那样编写:

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

    哪个应该完成这项工作。

    有时,您可能最终也需要转换 LHS 的指针,如下所示:

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

    但我怀疑在你的情况下你会没事的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-30
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 2016-10-18
      相关资源
      最近更新 更多