You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调试C程序时,如何将指定内存地址的字符串存入GDB便利变量?

在GDB中将内存中的字符串存入便利变量

要把已知内存地址处的以\0结尾的字符串存入GDB便利变量(而非仅存储地址),可以借助C标准库函数复制字符串内容,具体方法如下:

方法一:使用strdup直接复制(推荐)

strdup函数会自动分配堆内存,并将目标地址的字符串完整复制到新内存中,返回新内存的指针。执行以下命令即可:

set $string_variable = strdup((char *)0xAAAAAAAA)

验证效果

  • 查看便利变量指向的字符串:print (char *) $string_variable,会输出"hello_world"
  • 用内存查看命令确认:x/s $string_variable,同样会显示完整字符串

这种方式下,$string_variable指向的是原字符串的副本,原内存地址的内容修改不会影响该便利变量的取值。

方法二:手动分配内存+复制(兼容性更强)

如果环境中无法直接使用strdup,可以拆分步骤,用malloc分配内存,再用strcpy复制内容:

# 1. 获取目标字符串的长度(含末尾\0)
set $str_len = strlen((char *)0xAAAAAAAA) + 1
# 2. 分配足够的内存
set $string_variable = malloc($str_len)
# 3. 复制字符串内容到新内存
call strcpy($string_variable, (char *)0xAAAAAAAA)

注意事项

  • 以上方法依赖C标准库,确保调试的程序已链接标准库(绝大多数C程序默认满足)
  • 若不再需要该便利变量,可调用free($string_variable)释放分配的堆内存,避免内存泄漏

内容的提问来源于stack exchange,提问作者cerveka2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:05:43