能力值:
( LV9,RANK:170 )
2 楼
Specifies packing alignment for structure, union, and class members.
#pragma pack( [ show ] | [ push | pop ] [, identifier ] , n )
能力值:
( LV11,RANK:190 )
3 楼
unsigned默认类型是int型,默认32位
能力值:
( LV2,RANK:10 )
4 楼
能举个例子么。
能力值:
( LV2,RANK:10 )
5 楼
64位的是神马。? 3Q
能力值:
( LV2,RANK:10 )
6 楼
[QUOTE=EvilKnight;1071627]Specifies packing alignment for structure, union, and class members.
#pragma pack( [ show ] | [ push | pop ] [, identifier ] , n )[/QUOTE] 能举个例子么。3Q
能力值:
( LV2,RANK:10 )
7 楼
不是 long 就是 long long w我猜的
能力值:
( LV11,RANK:190 )
8 楼
64位下int也是32位,48位用ULONGLONG64
能力值:
( LV2,RANK:10 )
9 楼
如果我把 PageFrameNumber 类型改成 ULONG64 之类的64位类型。 编译是通过了。但是并不符合要求。
看最后一张图。
能力值:
( LV11,RANK:190 )
10 楼
#pragma pack(push,1)
....
....
#pragma pack(pop)
能力值:
( LV2,RANK:10 )
11 楼
#pragma pack(push,1)
typedef struct _NEWMMPTE_HARDWARE {
unsigned Valid : 1;
unsigned Dirty1 : 1;
unsigned Owner : 1;
unsigned WriteThrough : 1;
unsigned CacheDisable : 1;
unsigned Accessed : 1;
unsigned Dirty : 1;
unsigned LargePage : 1;
unsigned Global : 1;
unsigned CopyOnWrite : 1;
unsigned Unused : 1;
unsigned Write : 1;
ULONG_PTR PageFrameNumber : 36;
unsigned reserved1 : 4;
unsigned SoftwareWsIndex : 11;
unsigned NoExecute : 1;
} NEWMMPTE_HARDWARE, *NEWPMMPTE_HARDWARE;
#pragma pack(pop)
这样编译后。 0: kd> dt Anti!_NEWMMPTE_HARDWARE
+0x000 Valid : Pos 0, 1 Bit
+0x000 Dirty1 : Pos 1, 1 Bit
+0x000 Owner : Pos 2, 1 Bit
+0x000 WriteThrough : Pos 3, 1 Bit
+0x000 CacheDisable : Pos 4, 1 Bit
+0x000 Accessed : Pos 5, 1 Bit
+0x000 Dirty : Pos 6, 1 Bit
+0x000 LargePage : Pos 7, 1 Bit
+0x000 Global : Pos 8, 1 Bit
+0x000 CopyOnWrite : Pos 9, 1 Bit
+0x000 Unused : Pos 10, 1 Bit
+0x000 Write : Pos 11, 1 Bit
+0x004 PageFrameNumber : Pos 0, 36 Bits
+0x00c reserved1 : Pos 0, 4 Bits
+0x00c SoftwareWsIndex : Pos 4, 11 Bits
+0x00c NoExecute : Pos 15, 1 Bit 还是有问题。
能力值:
( LV11,RANK:190 )
12 楼
因为你没定义类型
默认int是32位,4字节对齐的,都必须用ULONG64
能力值:
( LV2,RANK:10 )
13 楼
3Q .解决了。