DWORD64如果设置为 -1,则给出 32 个 1,即 0xfffffffffffffffffffffffffffff

DWORD64 if set to -1 gives 32 1s i.e. 0xffffffffffffffffffffffffffffffff

本文关键字:0xfffffffffffffffffffffffffffff 设置 如果 DWORD64      更新时间:2023-10-16

>C++代码(Visual studio以devenv/useenv (x64)开头,isWOW64是假的)

DWORD64 check;
check = -1;
printf("value %u", check);

它打印的值4294967295即 0x(32)f,如果我在 x32 环境中使用简单的 DWORD 进行操作,则

相同

是的,我知道DWORD64是无符号的__int64,但它不应该是 0x(64)f 吗?

汇编程序在那里做了什么? 反汇编代码对我没有多大帮助。

您的问题在于printf格式字符串。使用%u告诉printf打印 32 位值。因此,它仅使用DWORD64的前 32 位。要打印已推送到堆栈上的所有 64 位,请使用 %llu (表示unsigned long long )。

另请注意,DWORD64不能unsigned long。在所有 Windows 版本上,即使在 Windows 64 位上,long 位也是 32 位。

参见 LLP64 模型。

如果您查看手册页,%u格式规范的类型为 int 。这意味着printf读取的值为 int ,即使在 64 位平台上仍然是 32 位。

添加 llI64 的大小规范,因此格式将%I64u

应该-1LL,因为-1存储为 32 位 int

相关文章:
  • 没有找到相关文章