我正在逆向 Delphi 程序,并且有一部分内容是这样说的:
Result = *(Self - 44);
但我希望它说:
Result = *(Self - offsetof(VMT_ClassDefinition, vmtClassName));
作为 VMT_ClassDefinition 以下结构:
struct VMT_ClassDefinition {
Cardinal vmtSelfPtr;
Cardinal vmtIntfTable;
Cardinal vmtAutoTable;
Cardinal vmtInitTable;
Cardinal vmtTypeInfo;
Cardinal vmtFieldTable;
Cardinal vmtMethodTable;
Cardinal vmtDynamicTable;
Cardinal vmtClassName;
Cardinal vmtInstanceSize;
Cardinal vmtParent;
Cardinal vmtSafeCallException;
Cardinal vmtAfterConstruction;
Cardinal vmtBeforeDestruction;
Cardinal vmtDispatch;
Cardinal vmtDefaultHandler;
Cardinal vmtNewInstance;
Cardinal vmtFreeInstance;
Cardinal vmtDestroy;
};
其中 cardinal 是 unsigned int。问题是在数字 44 上使用“右键单击 > 结构偏移”后,它会生成以下结果:
Result = *(Self - offsetof(VMT_ClassDefinition, vmtSafeCallException));
我正在做Hex-Rays Decompiler 1.6 新特性第 3 节中所说的,但是正如你所看到的,预期的结果和我得到的完全不同。
我的猜测是它忘记了“-”符号,只是从 +44 开始前进。有没有办法扭转这种行为?我知道它可以在 ASM 视图中通过用“_”反转然后像在Negated structure offsets 中那样按“T”来完成,但这不适用于伪代码视图。