LODWORD 和 HIDWORD 的作用是什么?

逆向工程 艾达 拆卸 反编译 C
2021-06-22 09:01:06

我试图弄清楚这段代码到底是做什么的:

  LODWORD(fMax) = *(_DWORD *)v12;
  HIDWORD(fMax) = v13;

我正在阅读IDA\Plugins\defs.h定义,但我不明白在 Java 上重做同样的事情到底是做什么的。

如果你们中有人能帮助我,我会真的很高兴。

1个回答

这种模式通常用于在 32 位系统上将 64 位值分配给变量 - 您分别计算每个 32 位值,然后将它们推入 64 位值的高 32 位和低 32 位。

在 Java 中,你的第一个任务是

fMax=(fMax & 0xFFFFFFFF00000000) | (v12 & 0x00000000FFFFFFFF)

第二个是

fMax=(fMax & 0x00000000FFFFFFFF) | (((long)v13<<32) & 0xFFFFFFFF00000000)

当然fMax这里是64位长的。

您可以省略& 0xFFFFFFFF00000000第二个表达式中的 ,因为您知道这些位在左移后将为零。并且您可以省略& 0x00000000FFFFFFFF第一个表达式中的 if v12is an int,因为在 32 位整数中,高位无论如何都将为零。但Java编译器可能会优化这些远离反正,和我想写的声明的方式,使得其位取自清晰fMax,并且从v12v13