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

GDB查找内存中非完整子字符串失败的原因及解决方法

问题原因

GDB的find命令对双引号包裹的字符串搜索模式,默认会自动在你输入的字符串末尾追加一个\0字节,作为匹配内容的一部分。
你代码中定义的XXXVAL宏对应的字符串常量,在内存中的实际存储序列是:H e l l o ! \n \0,十六进制为0x48 0x65 0x6c 0x6c 0x6f 0x21 0x0a 0x00。

  • 当你执行find 0x564d89488000, 0x7ffdae11c000, "Hello!\n"时,GDB实际匹配的序列是Hello!\n\0,和内存中存储的完整字符串完全一致,因此可以成功找到。
  • 当你执行find 0x564d89488000, 0x7ffdae11c000, "Hello!"时,GDB实际匹配的序列是Hello!\0,但内存中!字符后面紧跟的是\n(0x0a)而不是\0,因此匹配失败,提示找不到。
解决方法

如果需要匹配不需要末尾\0的子字符串,可以用以下两种方案:

  • 方案1:使用字节序列搜索代替字符串搜索,直接传入子串每个字符对应的十六进制值,GDB不会自动追加额外字节。例如要搜索Hello!,可执行命令:
    find 0x564d89488000, 0x7ffdae11c000, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x21
    
  • 方案2:给find命令指定匹配长度参数,强制只匹配输入字符串的前N个字节,忽略自动追加的\0。例如要搜索长度为6的Hello!,可执行命令:
    find /s 6 0x564d89488000, 0x7ffdae11c000, "Hello!"
    
    其中/s指定搜索单位为字节,后面的数字6是你需要匹配的子串长度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:18:03