反编译
打开工具 > 选项 (Tools > Options)以配置反编译。在交互式比较设置时,请使用无缓存的快速反编译;否则在更改选项后重新处理文件。

显示调试命令 (Show debug commands)
对于经典 VB P-Code,包含编译器和调试器操作,这些操作否则不会包含在高级语言代码清单中。当检查底层指令序列而非仅重构的程序逻辑时启用它。
处理 If ... End If 区块 (Native Code) (Process If ... End If blocks (Native Code))
将识别的原生代码条件跳转重构为If...End If块。当需要检查原始分支模式或分析结构看似不正确的过程时禁用它。
处理 'Else' 块 (Process 'Else' blocks)
使用额外的启发式方法区分 Else 分支与嵌套条件和 GoTo 跳转。对于原生代码,这需要对 If 块进行处理。保持启用以进行正常阅读;当重构的分支不明确时,将其禁用进行比较。
分析原型 (Analyze prototypes)
对过程参数和返回值执行初步启发式分析。这对于快速反编译特别有用:标准模块中的私有函数和过程可能缺少显式的签名元数据。初步分析需要额外时间,但避免仅根据当前已知的堆栈内容处理调用。启发式签名仍然是一种推断,特别是当元数据、外部类型或代码不完整时。
添加地址 (Add Addresses)
在重构的语句旁边显示虚拟地址。保持启用以将代码与反汇编、文件字节和其他工具的发现相关联。它对于复制到反汇编器 (Copy to disassembler)合并高级语句与其低级对应项也是必需的。反汇编器始终独立于此设置显示地址。
理解原生代码重构
原生代码引擎识别支持的Select Case模式、多维数组访问、COM 调用和 VB 运行时操作。错误处理可以重构为On Error Resume Next、On Error GoTo和On Error GoTo 0。编译器优化和缺失的类型信息仍可能限制结果;当高级输出不完整时检查反汇编。
版本 26.2 扩展了 Variant 类型、多维 SafeArray 读写以及VarPtr数组元素重构。输出可能会将数组引用标识为SafeArray,反映分析引擎识别的运行时结构。分支状态隔离和临时变量分析也改善了复杂 If/Else 代码的重构。版本 26.5 进一步改进了 Select Case 和 VB5/VB6 运行时函数处理。
COM 和 ActiveX 类型信息
VB Decompiler 首先使用其内置的已知接口知识库。对于未知的外部 COM 对象,它可以通过系统注册表解析库、类和接口标识符,并解析相应的 DLL/OCX 类型库。这为早期绑定和支持的后期绑定调用提供方法和属性签名,包括返回的接口类型。
如果缺少所需的类型库或其注册无法解析,某些调用可能保持未识别,例如UnkVCall。因此,在比较不同分析机器的输出时,需要考虑缺失依赖项的影响。扩展的 IID 知识库包括 Office 自动化、ADO/DAO、XML 和 HTTP、脚本、Shell、消息传递和目录服务接口;它并不意味着可以解析每个可能的 COM 调用。
仅有限的 UDT 元数据保留在某些 VB 二进制文件中。反编译器可以恢复诸如结构大小和字符串字段计数等信息,但不一定能恢复完整的原始字段布局。不要将部分声明解释为完整的源代码级定义。
.NET 重构和优化
支持的 IL 被重构为类似 C# 的表达式和控制流。主窗口中的 程序分析器和优化器 (Procedure analyzer and optimizer) 控件可以简化支持的循环、条件、操作符和临时变量模式。在遇到不支持或混淆的片段时检查 IL 和元数据。此处理独立于AI 助手 (AI Helper)。
