DWORD64如果设置为-1则给出32 1s即0xffffffffffffffffffffffffffffffffffff

Bas*_*wer 3 c++ dword

C++代码(Visual Studio以devenv/useenv(x64)开头,isWOW64为false)

DWORD64 check;

check = -1;
printf("value %u", check);
Run Code Online (Sandbox Code Playgroud)

它打印值4294967295即0x(32)f如果我在x32环境中使用简单的DWORD执行它是相同的

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

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

Did*_*set 8

你的问题在于printf格式字符串.使用%utell printf打印32位值.因此,它只使用你的前32位DWORD64.要打印已压入堆栈的所有64位,请使用%llu(for unsigned long long).

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

请参阅LLP64型号.