IDA Pro - 将 HIBYTE、LOBYTE 和 __OFSUB__ 宏重写为 C++

IDA Pro - rewriting HIBYTE, LOBYTE and __OFSUB__ macros to C++

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

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

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

Error (active) E0137 expression must be a modifiable lvalue

我试着重写成这样

LOBYTE(v8); v8 = v8 & 3;

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

你知道我该怎么做吗?

LOBYTEHIBYTE 是执行一些位移逻辑的宏,因此您可以从 unsigned short 中提取特定值。因此,例如,如果您有一个值为 0xAB93unsigned short,您可以这样获取特定字节:

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

lo 将保存值 0x93hi 将保存值 0xAB

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

unsigned short both = MAKEWORD(lo,hi);

您可以在 IDA_INSTALL_PATH/plugins/defs.h 文件中找到此宏定义。
您可以找到有关 IDA 使用宏的所有信息。