我有一个带有随机值的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比|
更高,否则将需要附加括号。