HanHua Edit v2.0 提示信息编辑v2.0 (C)1993 龚成兵 编制 (C)2002 罗明安 修改
请看附件!下载请到15楼!!!
用法:
HH2 /S 待改文件 提示文件
从'待改文件'中提取长度>=n个的信息到'提示文件' /A 只提取英文
如: HH2 /S:3 edit.com edit.hh
HH2/S 待改文件 提示文件
从'待改文件'中提取长度==n个的信息到'提示文件' /A 只提取英文
如: HH2 /S=3 edit.com edit.hh
HH2/R 待改文件 提示文件
将修改好的'提示文件'替换到'待改文件'中
如: HH2 /R edit.com edit.hh
'提示文件'行格式:
行首为类型符(.=改串 ,=改值 其余=不改)
↓偏移地址 串长 提示信息串
↓ ↓ ↓ ↓
/000001A6 000B提示信息串
用于比较或加注释;不改动'待改文件'
.000001A6 000B提示信息串
只能改内信息;串长必须相等!
,000001A6 000400 1F FE 08
十六进制字节值只能手工输入:这可是真正程序员的活儿,别乱来!
最新附件请见http://www.cn-dos.net/forum/attachment.php?aid=271&checkid=bd5c5&download=1
[ Last edited by born2be on 2005-10-13 at 14:43 ]
请看附件!下载请到15楼!!!
用法:
HH2 /S 待改文件 提示文件
从'待改文件'中提取长度>=n个的信息到'提示文件' /A 只提取英文
如: HH2 /S:3 edit.com edit.hh
HH2/S 待改文件 提示文件
从'待改文件'中提取长度==n个的信息到'提示文件' /A 只提取英文
如: HH2 /S=3 edit.com edit.hh
HH2/R 待改文件 提示文件
将修改好的'提示文件'替换到'待改文件'中
如: HH2 /R edit.com edit.hh
'提示文件'行格式:
行首为类型符(.=改串 ,=改值 其余=不改)
↓偏移地址 串长 提示信息串
↓ ↓ ↓ ↓
/000001A6 000B提示信息串
用于比较或加注释;不改动'待改文件'
.000001A6 000B提示信息串
只能改内信息;串长必须相等!
,000001A6 000400 1F FE 08
十六进制字节值只能手工输入:这可是真正程序员的活儿,别乱来!
最新附件请见http://www.cn-dos.net/forum/attachment.php?aid=271&checkid=bd5c5&download=1
[ Last edited by born2be on 2005-10-13 at 14:43 ]
Gemini 解答
技术背景与工具解析:HH2 (原 Editer2) 汉化工具的演进
本帖讨论的核心工具 HH2 是对 1993 年龚成兵开发的 Editer2 的深度改进版。这类工具在 1990 年代至 2000 年代初的 DOS 环境下被称为“提示信息编辑器”或“静态汉化工具”,主要用于提取并修改可执行文件(.EXE/ .COM)或数据文件中的硬编码字符串。
1. 核心功能与工作机制
HH2 的基本工作原理是基于静态字符串扫描。
- 提取 (G/S 命令):程序扫描目标文件,识别符合特定条件的 ASCII 字符序列或汉字机内码序列。
- 中介文件 (.HH):提取出的信息保存在一个文本文件中,包含偏移地址(Offset)、原始串长度(Length)以及字符串内容。
- 回写 (P/R 命令):用户编辑完中介文件后,HH2 根据指定的偏移地址将新内容覆盖回原始文件。
2. 技术改进点解析
针对原版 Editer2 的局限性,作者
born2be(罗明安) 进行了以下关键技术修正:
- 十六进制值修改 (Hex Patching):原版仅支持字符串替换。HH2 引入了
,前缀,允许用户直接以十六进制形式(如00 1F FE 08)修改字节。这使得该工具具备了类似于DEBUG中E命令的功能,能够处理非字符数据的补丁。- 控制符冲突解决:字符串分界符由原来的特殊符号改为了 ASCII
0Ch(Form Feed)。在 DOS 环境下,某些扩展字符可能在特定的中文系统或编辑器(如 Edit.com)中产生显示歧义或排版错误,使用非常规控制符作为界定符是为了提高解析器的健壮性。- 汉字识别算法 (The /H Switch):
- /A 开关:过滤非 ASCII 字符,仅保留英文。
- /H 开关:基于双字节检测逻辑(GB2312 内码范围),专门提取汉字。
- 注意点:作者提到的“/A + /H < /S”现象,是因为英汉混合串可能因长度判定逻辑导致无法被单一模式捕获。
3. 历史语境下的技术限制与故障排除
在讨论中提到的几个典型技术问题反映了当年 DOS 环境的复杂性:
- 大文件回写失败 (Post #8):作者发现 Editer2 处理超过 1MB 的文件时可能失败,而 HH2 修复了此问题。这通常与 DOS 下文件指针(File Pointer)的处理有关。如果程序使用 16 位偏移量或未正确处理 32 位寻址(DOS 中断
INT 21h, AX=42xxh),则无法操作大文件。- 中文系统兼容性与死机 (Post #11):在运行 UCDOS、CCDOS 等中文系统后运行 HH2 导致死机。这通常源于:
- 内存冲突:TSR(内存驻留程序)与 HH2 争夺上位内存(UMB)或常规内存。
- 显示中断冲突:HH2 的彩色界面可能直接操作视频缓冲区(B800:0000),而中文系统的字模驱动(如
INT 10h的 Hook)可能在此发生截获冲突。- XP 环境下的显示问题:NT 内核的命令行(CMD)在运行 16 位程序时,会自动切换代码页至 437。这是导致中文帮助信息乱码的根本原因。
4. 安全性与工程规范建议
- 等长替换原则:汉化静态资源时,新串长度严禁超过原串长度。如果超出,会导致覆盖到后续的代码段或关键数据,从而导致程序崩溃。HH2 在后期版本中加入了“超长抛弃,不足补空格”的逻辑,这是一种工程上的保护措施。
- 环境依赖:此类工具不具备反汇编分析能力。如果文件被压缩(如 UPX, LZEXE)或加密,HH2 无法直接提取到有效字符串,必须先进行脱壳处理。
工具命令速查:
HH2 G <target> <info>:从目标提取字符串到信息文件。HH2 P <target> <info>:将编辑好的信息文件写回目标。;n或=n:设置搜索串的长度过滤条件。

