如何解释 IDA Pro 生成的这些代码?



您好,感谢您花时间阅读我的问题。我一直在使用 IDA Pro 来反编译一小段代码,该代码相当古老,是在 MFC (2003-2004( 中开发的。

我无法理解我一遍又一遍看到的以下说明:

_WORD *Some_Word;
_WORD *Some_Array; 
 Some_Word = Pointer_To_A_WORD + 0x4B6E;
 Some_Array = Pointer_To_Char_Array + 18;
 Some_Condition = *Some_Word & 0xFF03;
  1. 3号线和4号线的"+ 0x4B6E"和"+ 18">有什么意义?它们出现在我反编译的 c 代码中。
  2. 在第 5 行,Some_Condition检查什么?

非常感谢您的时间,

Pointer_To_A_WORD是指向对象实例的指针,0x4B6E是结构中某个字段的静态偏移量。 最有可能的是,它0x96DC在ASM代码中,IDA将其转换为0x4B6E。

您没有告诉 IDA ASM 代码引用带有 Pointer_To_A_WORD 的结构,因此它将其解释为 unit16 和位于索引 0x4B6E 处的元素数组。

所以它本质上是一些带有屏蔽非固定位的状态字段

some_status = arr[0x4B6E] &  (SOME_MASK_1 | SOME_MASK_FIELD)

最有可能的是,您的代码检查是否设置了某些状态位

if(Some_Condition){
//then
}

如果您告诉 IDA 0x96DC偏移到结构中的字段,并且Pointer_To_A_WORD是指向结构的指针,那么它会将您的代码反编译为

DWORD required_bits = obj->some_status_field & 0xFF03;

同样的逻辑也适用于Some_Array 是的

uint8_t *some_field = &obj2->some_field;

最新更新