我有一个带有随机值的int64变量。我想将其低32位修改为0xf0ffffff

变量是rdx寄存器,但我想编辑edx值

ContextRecord->Rdx = 0xf0ffffff; // Not correct

最佳答案



我认为这意味着您希望保持most significant 32位不变,并且仅更改最低有效的32位。

假设数据成员ContextRecord->Rdx包含原始值,并且您想将编辑后的值写回到该数据成员,则可以使用以下代码:

auto temp = ContextRecord->Rdx;
temp &= 0xffffffff00000000; //set least significant 32-bits to 00000000
temp |= 0x00000000f0ffffff; //set least significant 32-bits to f0ffffff
ContextRecord->Rdx = temp;

当然,这些行可以合并为一行,如下所示:
ContextRecord->Rdx = ContextRecord->Rdx & 0xffffffff00000000 | 0x00000000f0ffffff;
请注意,此行仅适用,因为&operator precedence|更高,否则将需要附加括号。

10-08 09:25