首页 > 解决方案 > IDA Pro - 将 HIBYTE、LOBYTE 和 __OFSUB__ 宏重写为 C++

问题描述

我能够挂钩一个函数,现在我正在尝试重写它的代码,但是我在翻译由 IDA Pro 的伪代码生成的一些宏时遇到了问题

 LOBYTE(v8) = v8 & 3;  
 LOBYTE(v12) = 0;
 HIBYTE(v12) = *result;
 v21 = __OFSUB__(v24 + 1, 30); 

LOBYTE 和 HIBYTE 被 Visual Studio 检测到,但是当我复制粘贴它们时出现此错误

错误(活动)E0137 表达式必须是可修改的左值

我试图将其重写为这样的东西

乐天(v8);v8 = v8 & 3;

然后错误消失了,但它似乎不能正常工作。至于offsub,它根本没有被检测为有效的宏。

你有什么想法我该怎么做吗?

标签: c++macrosreverse-engineeringida

解决方案


LOBYTE并且HIBYTE是执行一些位移逻辑的宏,因此您可以从unsigned short. 因此,例如,如果您有一个unsigned shortwith value 0xAB93,则可以这样获取特定字节:

unsigned char lo = LOBYTE(0xAB93);
unsigned char hi = HIBYTE(0xAB93);

lo将持有价值0x93并将hi持有价值0xAB

您想使用单独的宏来组合这些值。例如:

unsigned short both = MAKEWORD(lo,hi);

推荐阅读