DWORD64如果设置为 -1,则给出 32 个 1,即 0xfffffffffffffffffffffffffffff
DWORD64 if set to -1 gives 32 1s i.e. 0xffffffffffffffffffffffffffffffff
>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 位。
添加 ll
或 I64
的大小规范,因此格式将%I64u
。
它
应该-1LL
,因为-1
存储为 32 位 int
相关文章:
- 没有找到相关文章