我试图弄清楚这段代码到底是做什么的:
LODWORD(fMax) = *(_DWORD *)v12;
HIDWORD(fMax) = v13;
我正在阅读IDA\Plugins\defs.h
定义,但我不明白在 Java 上重做同样的事情到底是做什么的。
如果你们中有人能帮助我,我会真的很高兴。
我试图弄清楚这段代码到底是做什么的:
LODWORD(fMax) = *(_DWORD *)v12;
HIDWORD(fMax) = v13;
我正在阅读IDA\Plugins\defs.h
定义,但我不明白在 Java 上重做同样的事情到底是做什么的。
如果你们中有人能帮助我,我会真的很高兴。
这种模式通常用于在 32 位系统上将 64 位值分配给变量 - 您分别计算每个 32 位值,然后将它们推入 64 位值的高 32 位和低 32 位。
在 Java 中,你的第一个任务是
fMax=(fMax & 0xFFFFFFFF00000000) | (v12 & 0x00000000FFFFFFFF)
第二个是
fMax=(fMax & 0x00000000FFFFFFFF) | (((long)v13<<32) & 0xFFFFFFFF00000000)
当然fMax
这里是64位长的。
您可以省略& 0xFFFFFFFF00000000
第二个表达式中的 ,因为您知道这些位在左移后将为零。并且您可以省略& 0x00000000FFFFFFFF
第一个表达式中的 if v12
is an int
,因为在 32 位整数中,高位无论如何都将为零。但Java编译器可能会优化这些远离反正,和我想写的声明的方式,使得其位取自清晰fMax
,并且从v12
和v13
。