#1228·retdec

[capstone2llvmir]: 缺少注册号的类型: 244

作者: dedz212创建于 2026年3月20日更新于 2026年9月18日

环境

  • retdec 版本: v5.0
  • 操作系统: Windows 11
  • 目标二进制文件: MSVC 6.0 / 32 位 PE (x86)

命令

retdec-decompiler YDKJ6.exe

输出

运行阶段: 解压 (0.08 秒)
没有找到与 'Microsoft Linker 6.0' 匹配的插件
没有找到与 'MSVC 6.0' 匹配的插件
没有找到与 'Microsoft' 匹配的插件
运行阶段: 初始化 (0.22 秒)
运行阶段: 提供程序初始化 (0.26 秒)
运行阶段: 将输入二进制文件解码为 LLVM IR (0.78 秒)
[capstone2llvmir]: 缺少对寄存器编号 244 的类型
### 分析
寄存器 244 对应于 `X86_REG_PF` (奇偶标志),定义在 `include/retdec/capstone2llvmir/x86/x86_defs.h` 中:
```cpp
enum x86_reg_rflags
{
    X86_REG_CF = X86_REG_ENDING + 1, // = 243
    // 保留 1
    X86_REG_PF,                       // = 244
    ...
};

错误源于 src/capstone2llvmir/capstone2llvmir_impl.cpp 中的 getRegisterType():

cpp
llvm::Type* getRegisterType(uint32_t r) const
{
    auto fIt = _reg2type.find(r);
    if (fIt == _reg2type.end())
    {
        throw GenericError(
                "Missing type for register number: " + std::to_string(r));
    }
    return fIt->second;
}

X86_REG_PF = 244 在我使用的版本中缺失了 _reg2type 映射表中。请注意:检查当前的 masterX86_REG_PF 似乎已经在 _reg2type 中存在 - 因此此错误可能在我使用的版本之后被修复了。上面的版本字段可帮助确定这是否是一个回退或已知的已修复问题。