如何解释 IDA Pro 生成的这些代码?
How do I interpret these codes generated by 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;
- 3号线和4号线的"+ 0x4B6E"和"+ 18">有什么意义?它们出现在我反编译的 c 代码中。
- 在第 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;
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 如何解释 IDA Pro 生成的这些代码?
- 在Macbook Pro上实现clang -fno-stack-protector编译代码时出现问题
- Pro*C代码处理以解决ORA-01405:提取的列值为NULL
- C++ Qt框架:qmake退出错误代码2,找不到 project.pro 文件,但它就在那里
- IDA PRO将C++代码转换为C代码__OFSUB__宏