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

Borland资源编译器编译RC文件版本信息字段溢出问题咨询

问题根因与解决方案

你遇到的版本字段溢出乱码是Borland Resource Compiler 5.40的已知缺陷,和字符串填充长度没有直接关系:
该版本编译器处理VERSIONINFO块的字符串值时,会随机漏写宽字符串末尾的双字节NULL终止符,导致系统读取版本信息时无法识别字符串结尾,会连续读取后续内存数据直到碰到随机的双字节0,因此出现当前字段值后携带下一个字段标识、乱码的问题。你尝试的30字符填充方案无法覆盖所有对齐场景,因此会出现部分场景正常、部分溢出的情况。

微软VERSIONINFO二进制格式核心规则(公开标准)

  1. 整个VERSIONINFO块按4字节边界对齐,所有子块(StringFileInfo、Translation块等)也需要遵循4字节对齐要求,不足的位置用0字节填充
  2. 所有字符串键、字符串值均采用UTF-16LE(小端宽字符)编码,必须以双字节0x0000作为终止符
  3. 每个字符串项的结构顺序为:2字节值长度、2字节键长度、可变长度的键(含终止符)、对齐填充、可变长度的值(含终止符)

修复方案

  • 给所有VALUE定义的字符串末尾显式添加\0终止符,示例如下:
VALUE "CompanyName",        "VAR_COMPANYNAME\0"
VALUE "FileDescription",    "VAR_FILEDESCRIPTION\0"
// 其余VALUE项均按此规则修改

显式声明的终止符会强制brcc32写入双字节0,不会触发漏写bug,无需额外填充空格。

  • 如果修改后仍偶发问题,可以将替换后的字符串总ASCII长度调整为奇数,加\0后总宽字符字节数刚好为偶数,符合宽字符对齐要求。
  • 也可替换为微软资源编译器rc.exe编译rc文件,不存在该类兼容性缺陷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:45:03