python构造结构无效的DWORDLONG值

问题描述

我正在尝试使用构造库解析 python 中的 c 结构 这是我的结构:

typedef struct _MACHINEID {
    UINT32        ui32Hash;
    DWORD        dwLength;
    DWORD        dwMemoryLoad;
    DWORDLONG    ullTotalPhys;
    DWORDLONG    ullAvailPhys;
    DWORDLONG    ullTotalPageFile;
    DWORDLONG    ullAvailPageFile;
    DWORDLONG    ullTotalVirtual;
    DWORDLONG    ullAvailVirtual;
    DWORDLONG    ullAvailExtendedVirtual;
} MACHINEID,* PMACHINEID;
from construct import Int32un,Int8sn,Int16un,Int64un,Int
from construct import Array,Struct
MACHINE_ID = Struct(
    'ui32Hash' / Int32un,'dwLength' / Int32un,'dwMemoryLoad' / Int32un,'ullTotalPhys' / Int64un,'ullAvailPhys' / Int64un,'ullTotalPageFile' / Int64un,'ullAvailPageFile' / Int64un,'ullTotalVirtual' / Int64un,'ullAvailVirtual' / Int64un,'ullAvailExtendedVirtual' / Int64un
)

但是当我在 python 中接收结构体作为字节对象时,所有 DWORDLONG 成员的值都不正确。有谁知道这是什么原因造成的?

解决方法

正如“一些程序员老兄”所暗示的那样,它与填充有关。将 __pragma(pack(push,1))__pragma(pack(pop)) 放在我的结构周围以禁用填充可以解决问题。