【问题标题】:IDA Pro - rewriting HIBYTE, LOBYTE and __OFSUB__ macros to C++IDA Pro - 将 HIBYTE、LOBYTE 和 __OFSUB__ 宏重写为 C++
【发布时间】:2020-12-12 09:56:10
【问题描述】:

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

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

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

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

我试着把它改写成这样的

LOBYTE(v8); v8 = v8 & 3;

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

你有什么想法吗?

【问题讨论】:

    标签: c++ macros reverse-engineering ida


    【解决方案1】:

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

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

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

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

    unsigned short both = MAKEWORD(lo,hi);
    

    【讨论】:

    • 注意:HIBYTE 表示那个意思,但它已经改变(与 IDA 7.0 defs.h 和 minwindef.h 相反)表示 最高字节 i>,例如,__int64 中的 BYTE7。不知道这是什么时候发生的,但在 7.1 和 7.5 之间。不酷的IDA。在 C++ 转换之后,它现在看起来像这样:*(reinterpret_cast<uint8*>(&x)+(sizeof x/sizeof(uint8) - 1))
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 2016-10-26
      • 2019-07-17
      • 2012-09-28
      相关资源
      最近更新 更多