1029 lines
49 KiB
C++
1029 lines
49 KiB
C++
#pragma once
|
|
#include "head.h"
|
|
enum params_type {
|
|
PARAMS_INT,
|
|
PARAMS_CHAR,
|
|
PARAMS_WCHAR,
|
|
PARAMS_UINT,
|
|
};
|
|
|
|
// ApiSetschema v1 structs
|
|
// ---------------------------------------------------------------------------------------------
|
|
|
|
// Windows 6.x redirection descriptor, describes forward and backward
|
|
// redirections.
|
|
typedef struct _REDIRECTION {
|
|
DWORD OffsetRedirection1;
|
|
USHORT RedirectionLength1;
|
|
USHORT _padding1;
|
|
DWORD OffsetRedirection2;
|
|
USHORT RedirectionLength2;
|
|
USHORT _padding2;
|
|
} REDIRECTION, *PREDIRECTION;
|
|
|
|
// Windows 6.x library director structure, describes redirections.
|
|
typedef struct _DLLREDIRECTOR {
|
|
DWORD NumberOfRedirections; // Number of REDIRECTION structs.
|
|
REDIRECTION Redirection[1]; // array of REDIRECTION structures
|
|
} DLLREDIRECTOR, *PDLLREDIRECTOR;
|
|
|
|
// Windows 6.x library descriptor structure. These are located as a contiguously
|
|
// allocated array from the start of the first structure.
|
|
typedef struct _DLLHOSTDESCRIPTOR {
|
|
DWORD OffsetDllString;
|
|
DWORD StringLength;
|
|
DWORD OffsetDllRedirector; // offset to DLLREDIRECTOR
|
|
} DLLHOSTDESCRIPTOR, *PDLLHOSTDESCRIPTOR;
|
|
|
|
// Windows 6.x ApiSetSchema base structure.
|
|
typedef struct _APISETMAP {
|
|
DWORD Version; // dummy name (this field is never used)
|
|
DWORD NumberOfHosts; // number of DLLHOSTDESCRIPTOR structures following.
|
|
DLLHOSTDESCRIPTOR descriptors[1]; // array of DLLHOSTDESCRIPTOR structures.
|
|
} APISETMAP, *PAPISETMAP;
|
|
|
|
// ApiSetschema v2 structs for Windows 8.1.
|
|
// ---------------------------------------------------------------------------------------------
|
|
|
|
typedef struct _API_SET_VALUE_ENTRY_V2 {
|
|
ULONG Flags;
|
|
ULONG NameOffset;
|
|
ULONG NameLength;
|
|
ULONG ValueOffset;
|
|
ULONG ValueLength;
|
|
} API_SET_VALUE_ENTRY_V2, *PAPI_SET_VALUE_ENTRY_V2;
|
|
|
|
typedef struct _API_SET_VALUE_ARRAY_V2 {
|
|
ULONG Flags;
|
|
ULONG Count;
|
|
_API_SET_VALUE_ENTRY_V2 Array[ANYSIZE_ARRAY];
|
|
} API_SET_VALUE_ARRAY_V2, *PAPI_SET_VALUE_ARRAY_V2;
|
|
|
|
typedef struct _API_SET_NAMESPACE_ENTRY_V2 {
|
|
ULONG Flags;
|
|
ULONG NameOffset;
|
|
ULONG NameLength;
|
|
ULONG AliasOffset;
|
|
ULONG AliasLength;
|
|
ULONG DataOffset; // API_SET_VALUE_ARRAY
|
|
} API_SET_NAMESPACE_ENTRY_V2, *PAPI_SET_NAMESPACE_ENTRY_V2;
|
|
|
|
typedef struct _API_SET_NAMESPACE_ARRAY_V2 {
|
|
ULONG Version;
|
|
ULONG Size;
|
|
ULONG Flags;
|
|
ULONG Count;
|
|
_API_SET_NAMESPACE_ENTRY_V2 Array[ANYSIZE_ARRAY];
|
|
} API_SET_NAMESPACE_ARRAY_V2, *PAPI_SET_NAMESPACE_ARRAY_V2;
|
|
|
|
// ApiSetschema structs for Windows 10.
|
|
// ---------------------------------------------------------------------------------------------
|
|
|
|
typedef struct _API_SET_VALUE_ENTRY_10 {
|
|
ULONG Flags;
|
|
ULONG NameOffset;
|
|
ULONG NameLength;
|
|
ULONG ValueOffset;
|
|
ULONG ValueLength;
|
|
} API_SET_VALUE_ENTRY_10, *PAPI_SET_VALUE_ENTRY_10;
|
|
|
|
typedef struct _API_SET_VALUE_ARRAY_10 {
|
|
ULONG Flags;
|
|
ULONG NameOffset;
|
|
ULONG Unk;
|
|
ULONG NameLength;
|
|
ULONG DataOffset;
|
|
ULONG Count;
|
|
} API_SET_VALUE_ARRAY_10, *PAPI_SET_VALUE_ARRAY_10;
|
|
|
|
typedef struct _API_SET_NAMESPACE_ENTRY_10 {
|
|
uint32_t Flags;
|
|
uint32_t NameOffset;
|
|
uint32_t NameLength;
|
|
uint32_t HashedLength;
|
|
uint32_t ValueOffset;
|
|
uint32_t ValueCount;
|
|
} API_SET_NAMESPACE_ENTRY_10, *PAPI_SET_NAMESPACE_ENTRY_10;
|
|
|
|
typedef struct _API_SET_NAMESPACE_ARRAY_10 {
|
|
ULONG Version;
|
|
ULONG Size;
|
|
ULONG Flags;
|
|
ULONG Count;
|
|
ULONG Start;
|
|
ULONG End;
|
|
API_SET_NAMESPACE_ENTRY_10 Array[1];
|
|
} API_SET_NAMESPACE_ARRAY_10, *PAPI_SET_NAMESPACE_ARRAY_10;
|
|
|
|
typedef struct _UNICODE_STRING {
|
|
USHORT Length;
|
|
USHORT MaximumLength;
|
|
PWSTR Buffer;
|
|
} UNICODE_STRING;
|
|
typedef UNICODE_STRING* PUNICODE_STRING;
|
|
typedef const UNICODE_STRING* PCUNICODE_STRING;
|
|
typedef PVOID(NTAPI* RtlImageDirectoryEntryToDataFn)(PVOID, BOOLEAN, USHORT,
|
|
PULONG);
|
|
enum class Msr : unsigned int {
|
|
kIa32ApicBase = 0x01B,
|
|
|
|
kIa32FeatureControl = 0x03A,
|
|
|
|
kIa32SysenterCs = 0x174,
|
|
kIa32SysenterEsp = 0x175,
|
|
kIa32SysenterEip = 0x176,
|
|
|
|
kIa32Debugctl = 0x1D9,
|
|
|
|
kIa32MtrrCap = 0xFE,
|
|
kIa32MtrrDefType = 0x2FF,
|
|
kIa32MtrrPhysBaseN = 0x200,
|
|
kIa32MtrrPhysMaskN = 0x201,
|
|
kIa32MtrrFix64k00000 = 0x250,
|
|
kIa32MtrrFix16k80000 = 0x258,
|
|
kIa32MtrrFix16kA0000 = 0x259,
|
|
kIa32MtrrFix4kC0000 = 0x268,
|
|
kIa32MtrrFix4kC8000 = 0x269,
|
|
kIa32MtrrFix4kD0000 = 0x26A,
|
|
kIa32MtrrFix4kD8000 = 0x26B,
|
|
kIa32MtrrFix4kE0000 = 0x26C,
|
|
kIa32MtrrFix4kE8000 = 0x26D,
|
|
kIa32MtrrFix4kF0000 = 0x26E,
|
|
kIa32MtrrFix4kF8000 = 0x26F,
|
|
|
|
kIa32VmxBasic = 0x480,
|
|
kIa32VmxPinbasedCtls = 0x481,
|
|
kIa32VmxProcBasedCtls = 0x482,
|
|
kIa32VmxExitCtls = 0x483,
|
|
kIa32VmxEntryCtls = 0x484,
|
|
kIa32VmxMisc = 0x485,
|
|
kIa32VmxCr0Fixed0 = 0x486,
|
|
kIa32VmxCr0Fixed1 = 0x487,
|
|
kIa32VmxCr4Fixed0 = 0x488,
|
|
kIa32VmxCr4Fixed1 = 0x489,
|
|
kIa32VmxVmcsEnum = 0x48A,
|
|
kIa32VmxProcBasedCtls2 = 0x48B,
|
|
kIa32VmxEptVpidCap = 0x48C,
|
|
kIa32VmxTruePinbasedCtls = 0x48D,
|
|
kIa32VmxTrueProcBasedCtls = 0x48E,
|
|
kIa32VmxTrueExitCtls = 0x48F,
|
|
kIa32VmxTrueEntryCtls = 0x490,
|
|
kIa32VmxVmfunc = 0x491,
|
|
|
|
kIa32Efer = 0xC0000080,
|
|
kIa32Star = 0xC0000081,
|
|
kIa32Lstar = 0xC0000082,
|
|
|
|
kIa32Fmask = 0xC0000084,
|
|
|
|
kIa32FsBase = 0xC0000100,
|
|
kIa32GsBase = 0xC0000101,
|
|
kIa32KernelGsBase = 0xC0000102,
|
|
kIa32TscAux = 0xC0000103,
|
|
};
|
|
typedef struct _PEB_LDR_DATA {
|
|
BYTE Reserved1[8];
|
|
PVOID Reserved2[3];
|
|
LIST_ENTRY InMemoryOrderModuleList;
|
|
} PEB_LDR_DATA, *PPEB_LDR_DATA;
|
|
|
|
typedef struct _LDR_DATA_TABLE_ENTRY {
|
|
LIST_ENTRY InLoadOrderLinks;
|
|
LIST_ENTRY InMemoryOrderLinks;
|
|
LIST_ENTRY InInitializationOrderLinks;
|
|
PVOID DllBase;
|
|
PVOID EntryPoint;
|
|
ULONG SizeOfImages;
|
|
UNICODE_STRING FullDllName;
|
|
UNICODE_STRING BaseDllName;
|
|
ULONG Flags;
|
|
USHORT LoadCount;
|
|
USHORT TlsIndex;
|
|
union {
|
|
LIST_ENTRY HashLinks;
|
|
struct {
|
|
PVOID SectionPointer;
|
|
ULONG CheckSum;
|
|
};
|
|
};
|
|
union {
|
|
struct {
|
|
ULONG TimeDateStamp;
|
|
};
|
|
struct {
|
|
PVOID LoadedImports;
|
|
};
|
|
};
|
|
} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
|
|
typedef struct _RTL_USER_PROCESS_PARAMETERS {
|
|
BYTE Reserved1[16];
|
|
PVOID Reserved2[10];
|
|
UNICODE_STRING ImagePathName;
|
|
UNICODE_STRING CommandLine;
|
|
} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
|
|
|
|
typedef struct _BASE_RELOCATION_ENTRY {
|
|
WORD Offset : 12;
|
|
WORD Type : 4;
|
|
} BASE_RELOCATION_ENTRY;
|
|
typedef VOID(NTAPI* PPS_POST_PROCESS_INIT_ROUTINE)(VOID);
|
|
// 0x10 bytes (sizeof)
|
|
struct _STRING64 {
|
|
USHORT Length; // 0x0
|
|
USHORT MaximumLength; // 0x2
|
|
ULONGLONG Buffer; // 0x8
|
|
};
|
|
|
|
// 0x58 bytes (sizeof)
|
|
struct X64_PEB_LDR_DATA {
|
|
ULONG Length; // 0x0
|
|
UCHAR Initialized; // 0x4
|
|
VOID* SsHandle; // 0x8
|
|
struct _LIST_ENTRY InLoadOrderModuleList; // 0x10
|
|
struct _LIST_ENTRY InMemoryOrderModuleList; // 0x20
|
|
struct _LIST_ENTRY InInitializationOrderModuleList; // 0x30
|
|
VOID* EntryInProgress; // 0x40
|
|
UCHAR ShutdownInProgress; // 0x48
|
|
VOID* ShutdownThreadId; // 0x50
|
|
};
|
|
static_assert(sizeof(X64_PEB_LDR_DATA) == 0x58, "X64_PEB_LDR_DATA Size check");
|
|
|
|
typedef struct X64PEB {
|
|
UCHAR InheritedAddressSpace; // 0x0
|
|
UCHAR ReadImageFileExecOptions; // 0x1
|
|
UCHAR BeingDebugged; // 0x2
|
|
union {
|
|
UCHAR BitField; // 0x3
|
|
struct {
|
|
UCHAR ImageUsesLargePages : 1; // 0x3
|
|
UCHAR IsProtectedProcess : 1; // 0x3
|
|
UCHAR IsImageDynamicallyRelocated : 1; // 0x3
|
|
UCHAR SkipPatchingUser32Forwarders : 1; // 0x3
|
|
UCHAR IsPackagedProcess : 1; // 0x3
|
|
UCHAR IsAppContainer : 1; // 0x3
|
|
UCHAR IsProtectedProcessLight : 1; // 0x3
|
|
UCHAR IsLongPathAwareProcess : 1; // 0x3
|
|
};
|
|
};
|
|
UCHAR Padding0[4]; // 0x4
|
|
ULONGLONG Mutant; // 0x8
|
|
ULONGLONG ImageBaseAddress; // 0x10
|
|
ULONGLONG Ldr; // 0x18
|
|
ULONGLONG ProcessParameters; // 0x20
|
|
ULONGLONG SubSystemData; // 0x28
|
|
ULONGLONG ProcessHeap; // 0x30
|
|
ULONGLONG FastPebLock; // 0x38
|
|
ULONGLONG AtlThunkSListPtr; // 0x40
|
|
ULONGLONG IFEOKey; // 0x48
|
|
union {
|
|
ULONG CrossProcessFlags; // 0x50
|
|
struct {
|
|
ULONG ProcessInJob : 1; // 0x50
|
|
ULONG ProcessInitializing : 1; // 0x50
|
|
ULONG ProcessUsingVEH : 1; // 0x50
|
|
ULONG ProcessUsingVCH : 1; // 0x50
|
|
ULONG ProcessUsingFTH : 1; // 0x50
|
|
ULONG ProcessPreviouslyThrottled : 1; // 0x50
|
|
ULONG ProcessCurrentlyThrottled : 1; // 0x50
|
|
ULONG ProcessImagesHotPatched : 1; // 0x50
|
|
ULONG ReservedBits0 : 24; // 0x50
|
|
};
|
|
};
|
|
UCHAR Padding1[4]; // 0x54
|
|
union {
|
|
ULONGLONG KernelCallbackTable; // 0x58
|
|
ULONGLONG UserSharedInfoPtr; // 0x58
|
|
};
|
|
ULONG SystemReserved; // 0x60
|
|
ULONG AtlThunkSListPtr32; // 0x64
|
|
ULONGLONG ApiSetMap; // 0x68
|
|
ULONG TlsExpansionCounter; // 0x70
|
|
UCHAR Padding2[4]; // 0x74
|
|
ULONGLONG TlsBitmap; // 0x78
|
|
ULONG TlsBitmapBits[2]; // 0x80
|
|
ULONGLONG ReadOnlySharedMemoryBase; // 0x88
|
|
ULONGLONG SharedData; // 0x90
|
|
ULONGLONG ReadOnlyStaticServerData; // 0x98
|
|
ULONGLONG AnsiCodePageData; // 0xa0
|
|
ULONGLONG OemCodePageData; // 0xa8
|
|
ULONGLONG UnicodeCaseTableData; // 0xb0
|
|
ULONG NumberOfProcessors; // 0xb8
|
|
ULONG NtGlobalFlag; // 0xbc
|
|
union _LARGE_INTEGER CriticalSectionTimeout; // 0xc0
|
|
ULONGLONG HeapSegmentReserve; // 0xc8
|
|
ULONGLONG HeapSegmentCommit; // 0xd0
|
|
ULONGLONG HeapDeCommitTotalFreeThreshold; // 0xd8
|
|
ULONGLONG HeapDeCommitFreeBlockThreshold; // 0xe0
|
|
ULONG NumberOfHeaps; // 0xe8
|
|
ULONG MaximumNumberOfHeaps; // 0xec
|
|
ULONGLONG ProcessHeaps; // 0xf0
|
|
ULONGLONG GdiSharedHandleTable; // 0xf8
|
|
ULONGLONG ProcessStarterHelper; // 0x100
|
|
ULONG GdiDCAttributeList; // 0x108
|
|
UCHAR Padding3[4]; // 0x10c
|
|
ULONGLONG LoaderLock; // 0x110
|
|
ULONG OSMajorVersion; // 0x118
|
|
ULONG OSMinorVersion; // 0x11c
|
|
USHORT OSBuildNumber; // 0x120
|
|
USHORT OSCSDVersion; // 0x122
|
|
ULONG OSPlatformId; // 0x124
|
|
ULONG ImageSubsystem; // 0x128
|
|
ULONG ImageSubsystemMajorVersion; // 0x12c
|
|
ULONG ImageSubsystemMinorVersion; // 0x130
|
|
UCHAR Padding4[4]; // 0x134
|
|
ULONGLONG ActiveProcessAffinityMask; // 0x138
|
|
ULONG GdiHandleBuffer[60]; // 0x140
|
|
ULONGLONG PostProcessInitRoutine; // 0x230
|
|
ULONGLONG TlsExpansionBitmap; // 0x238
|
|
ULONG TlsExpansionBitmapBits[32]; // 0x240
|
|
ULONG SessionId; // 0x2c0
|
|
UCHAR Padding5[4]; // 0x2c4
|
|
union _ULARGE_INTEGER AppCompatFlags; // 0x2c8
|
|
union _ULARGE_INTEGER AppCompatFlagsUser; // 0x2d0
|
|
ULONGLONG pShimData; // 0x2d8
|
|
ULONGLONG AppCompatInfo; // 0x2e0
|
|
struct _STRING64 CSDVersion; // 0x2e8
|
|
ULONGLONG ActivationContextData; // 0x2f8
|
|
ULONGLONG ProcessAssemblyStorageMap; // 0x300
|
|
ULONGLONG SystemDefaultActivationContextData; // 0x308
|
|
ULONGLONG SystemAssemblyStorageMap; // 0x310
|
|
ULONGLONG MinimumStackCommit; // 0x318
|
|
ULONGLONG FlsCallback; // 0x320
|
|
struct LIST_ENTRY64 FlsListHead; // 0x328
|
|
ULONGLONG FlsBitmap; // 0x338
|
|
ULONG FlsBitmapBits[4]; // 0x340
|
|
ULONG FlsHighIndex; // 0x350
|
|
ULONGLONG WerRegistrationData; // 0x358
|
|
ULONGLONG WerShipAssertPtr; // 0x360
|
|
ULONGLONG pUnused; // 0x368
|
|
ULONGLONG pImageHeaderHash; // 0x370
|
|
union {
|
|
ULONG TracingFlags; // 0x378
|
|
struct {
|
|
ULONG HeapTracingEnabled : 1; // 0x378
|
|
ULONG CritSecTracingEnabled : 1; // 0x378
|
|
ULONG LibLoaderTracingEnabled : 1; // 0x378
|
|
ULONG SpareTracingBits : 29; // 0x378
|
|
};
|
|
};
|
|
UCHAR Padding6[4]; // 0x37c
|
|
ULONGLONG CsrServerReadOnlySharedMemoryBase; // 0x380
|
|
ULONGLONG TppWorkerpListLock; // 0x388
|
|
struct LIST_ENTRY64 TppWorkerpList; // 0x390
|
|
ULONGLONG WaitOnAddressHashTable[128]; // 0x3a0
|
|
ULONGLONG TelemetryCoverageHeader; // 0x7a0
|
|
ULONG CloudFileFlags; // 0x7a8
|
|
ULONG CloudFileDiagFlags; // 0x7ac
|
|
CHAR PlaceholderCompatibilityMode; // 0x7b0
|
|
CHAR PlaceholderCompatibilityModeReserved[7]; // 0x7b1
|
|
ULONGLONG LeapSecondData; // 0x7b8
|
|
union {
|
|
ULONG LeapSecondFlags; // 0x7c0
|
|
struct {
|
|
ULONG SixtySecondEnabled : 1; // 0x7c0
|
|
ULONG Reserved : 31; // 0x7c0
|
|
};
|
|
};
|
|
ULONG NtGlobalFlag2; // 0x7c4
|
|
};
|
|
static_assert(sizeof(X64PEB) == 0x7c8, "X64PEB Size check");
|
|
//0x8 bytes (sizeof)
|
|
struct _STRING32
|
|
{
|
|
USHORT Length; //0x0
|
|
USHORT MaximumLength; //0x2
|
|
ULONG Buffer; //0x4
|
|
};
|
|
//0x480 bytes (sizeof)
|
|
struct X32PEB
|
|
{
|
|
UCHAR InheritedAddressSpace; //0x0
|
|
UCHAR ReadImageFileExecOptions; //0x1
|
|
UCHAR BeingDebugged; //0x2
|
|
union
|
|
{
|
|
UCHAR BitField; //0x3
|
|
struct
|
|
{
|
|
UCHAR ImageUsesLargePages : 1; //0x3
|
|
UCHAR IsProtectedProcess : 1; //0x3
|
|
UCHAR IsImageDynamicallyRelocated : 1; //0x3
|
|
UCHAR SkipPatchingUser32Forwarders : 1; //0x3
|
|
UCHAR IsPackagedProcess : 1; //0x3
|
|
UCHAR IsAppContainer : 1; //0x3
|
|
UCHAR IsProtectedProcessLight : 1; //0x3
|
|
UCHAR IsLongPathAwareProcess : 1; //0x3
|
|
};
|
|
};
|
|
ULONG Mutant; //0x4
|
|
ULONG ImageBaseAddress; //0x8
|
|
ULONG Ldr; //0xc
|
|
ULONG ProcessParameters; //0x10
|
|
ULONG SubSystemData; //0x14
|
|
ULONG ProcessHeap; //0x18
|
|
ULONG FastPebLock; //0x1c
|
|
ULONG AtlThunkSListPtr; //0x20
|
|
ULONG IFEOKey; //0x24
|
|
union
|
|
{
|
|
ULONG CrossProcessFlags; //0x28
|
|
struct
|
|
{
|
|
ULONG ProcessInJob : 1; //0x28
|
|
ULONG ProcessInitializing : 1; //0x28
|
|
ULONG ProcessUsingVEH : 1; //0x28
|
|
ULONG ProcessUsingVCH : 1; //0x28
|
|
ULONG ProcessUsingFTH : 1; //0x28
|
|
ULONG ProcessPreviouslyThrottled : 1; //0x28
|
|
ULONG ProcessCurrentlyThrottled : 1; //0x28
|
|
ULONG ProcessImagesHotPatched : 1; //0x28
|
|
ULONG ReservedBits0 : 24; //0x28
|
|
};
|
|
};
|
|
union
|
|
{
|
|
ULONG KernelCallbackTable; //0x2c
|
|
ULONG UserSharedInfoPtr; //0x2c
|
|
};
|
|
ULONG SystemReserved; //0x30
|
|
ULONG AtlThunkSListPtr32; //0x34
|
|
ULONG ApiSetMap; //0x38
|
|
ULONG TlsExpansionCounter; //0x3c
|
|
ULONG TlsBitmap; //0x40
|
|
ULONG TlsBitmapBits[2]; //0x44
|
|
ULONG ReadOnlySharedMemoryBase; //0x4c
|
|
ULONG SharedData; //0x50
|
|
ULONG ReadOnlyStaticServerData; //0x54
|
|
ULONG AnsiCodePageData; //0x58
|
|
ULONG OemCodePageData; //0x5c
|
|
ULONG UnicodeCaseTableData; //0x60
|
|
ULONG NumberOfProcessors; //0x64
|
|
ULONG NtGlobalFlag; //0x68
|
|
union _LARGE_INTEGER CriticalSectionTimeout; //0x70
|
|
ULONG HeapSegmentReserve; //0x78
|
|
ULONG HeapSegmentCommit; //0x7c
|
|
ULONG HeapDeCommitTotalFreeThreshold; //0x80
|
|
ULONG HeapDeCommitFreeBlockThreshold; //0x84
|
|
ULONG NumberOfHeaps; //0x88
|
|
ULONG MaximumNumberOfHeaps; //0x8c
|
|
ULONG ProcessHeaps; //0x90
|
|
ULONG GdiSharedHandleTable; //0x94
|
|
ULONG ProcessStarterHelper; //0x98
|
|
ULONG GdiDCAttributeList; //0x9c
|
|
ULONG LoaderLock; //0xa0
|
|
ULONG OSMajorVersion; //0xa4
|
|
ULONG OSMinorVersion; //0xa8
|
|
USHORT OSBuildNumber; //0xac
|
|
USHORT OSCSDVersion; //0xae
|
|
ULONG OSPlatformId; //0xb0
|
|
ULONG ImageSubsystem; //0xb4
|
|
ULONG ImageSubsystemMajorVersion; //0xb8
|
|
ULONG ImageSubsystemMinorVersion; //0xbc
|
|
ULONG ActiveProcessAffinityMask; //0xc0
|
|
ULONG GdiHandleBuffer[34]; //0xc4
|
|
ULONG PostProcessInitRoutine; //0x14c
|
|
ULONG TlsExpansionBitmap; //0x150
|
|
ULONG TlsExpansionBitmapBits[32]; //0x154
|
|
ULONG SessionId; //0x1d4
|
|
union _ULARGE_INTEGER AppCompatFlags; //0x1d8
|
|
union _ULARGE_INTEGER AppCompatFlagsUser; //0x1e0
|
|
ULONG pShimData; //0x1e8
|
|
ULONG AppCompatInfo; //0x1ec
|
|
struct _STRING32 CSDVersion; //0x1f0
|
|
ULONG ActivationContextData; //0x1f8
|
|
ULONG ProcessAssemblyStorageMap; //0x1fc
|
|
ULONG SystemDefaultActivationContextData; //0x200
|
|
ULONG SystemAssemblyStorageMap; //0x204
|
|
ULONG MinimumStackCommit; //0x208
|
|
ULONG SparePointers[4]; //0x20c
|
|
ULONG SpareUlongs[5]; //0x21c
|
|
ULONG WerRegistrationData; //0x230
|
|
ULONG WerShipAssertPtr; //0x234
|
|
ULONG pUnused; //0x238
|
|
ULONG pImageHeaderHash; //0x23c
|
|
union
|
|
{
|
|
ULONG TracingFlags; //0x240
|
|
struct
|
|
{
|
|
ULONG HeapTracingEnabled : 1; //0x240
|
|
ULONG CritSecTracingEnabled : 1; //0x240
|
|
ULONG LibLoaderTracingEnabled : 1; //0x240
|
|
ULONG SpareTracingBits : 29; //0x240
|
|
};
|
|
};
|
|
ULONGLONG CsrServerReadOnlySharedMemoryBase; //0x248
|
|
ULONG TppWorkerpListLock; //0x250
|
|
struct LIST_ENTRY32 TppWorkerpList; //0x254
|
|
ULONG WaitOnAddressHashTable[128]; //0x25c
|
|
ULONG TelemetryCoverageHeader; //0x45c
|
|
ULONG CloudFileFlags; //0x460
|
|
ULONG CloudFileDiagFlags; //0x464
|
|
CHAR PlaceholderCompatibilityMode; //0x468
|
|
CHAR PlaceholderCompatibilityModeReserved[7]; //0x469
|
|
ULONG LeapSecondData; //0x470
|
|
union
|
|
{
|
|
ULONG LeapSecondFlags; //0x474
|
|
struct
|
|
{
|
|
ULONG SixtySecondEnabled : 1; //0x474
|
|
ULONG Reserved : 31; //0x474
|
|
};
|
|
};
|
|
ULONG NtGlobalFlag2; //0x478
|
|
};
|
|
static_assert(sizeof(X32PEB) == 0x480, "X64PEB Size check");
|
|
//0x4e0 bytes (sizeof)
|
|
struct _GDI_TEB_BATCH32
|
|
{
|
|
ULONG Offset : 31; //0x0
|
|
ULONG HasRenderingCommand : 1; //0x0
|
|
ULONG HDC; //0x4
|
|
ULONG Buffer[310]; //0x8
|
|
};
|
|
//0x18 bytes (sizeof)
|
|
struct _ACTIVATION_CONTEXT_STACK32
|
|
{
|
|
ULONG ActiveFrame; //0x0
|
|
struct LIST_ENTRY32 FrameListCache; //0x4
|
|
ULONG Flags; //0xc
|
|
ULONG NextCookieSequenceNumber; //0x10
|
|
ULONG StackId; //0x14
|
|
};
|
|
//0x8 bytes (sizeof)
|
|
struct _CLIENT_ID32
|
|
{
|
|
ULONG UniqueProcess; //0x0
|
|
ULONG UniqueThread; //0x4
|
|
};
|
|
//0x1000 bytes (sizeof)
|
|
struct X32TEB
|
|
{
|
|
struct _NT_TIB32 NtTib; //0x0
|
|
ULONG EnvironmentPointer; //0x1c
|
|
struct _CLIENT_ID32 ClientId; //0x20
|
|
ULONG ActiveRpcHandle; //0x28
|
|
ULONG ThreadLocalStoragePointer; //0x2c
|
|
ULONG ProcessEnvironmentBlock; //0x30
|
|
ULONG LastErrorValue; //0x34
|
|
ULONG CountOfOwnedCriticalSections; //0x38
|
|
ULONG CsrClientThread; //0x3c
|
|
ULONG Win32ThreadInfo; //0x40
|
|
ULONG User32Reserved[26]; //0x44
|
|
ULONG UserReserved[5]; //0xac
|
|
ULONG WOW32Reserved; //0xc0
|
|
ULONG CurrentLocale; //0xc4
|
|
ULONG FpSoftwareStatusRegister; //0xc8
|
|
ULONG ReservedForDebuggerInstrumentation[16]; //0xcc
|
|
ULONG SystemReserved1[26]; //0x10c
|
|
CHAR PlaceholderCompatibilityMode; //0x174
|
|
UCHAR PlaceholderHydrationAlwaysExplicit; //0x175
|
|
CHAR PlaceholderReserved[10]; //0x176
|
|
ULONG ProxiedProcessId; //0x180
|
|
struct _ACTIVATION_CONTEXT_STACK32 _ActivationStack; //0x184
|
|
UCHAR WorkingOnBehalfTicket[8]; //0x19c
|
|
LONG ExceptionCode; //0x1a4
|
|
ULONG ActivationContextStackPointer; //0x1a8
|
|
ULONG InstrumentationCallbackSp; //0x1ac
|
|
ULONG InstrumentationCallbackPreviousPc; //0x1b0
|
|
ULONG InstrumentationCallbackPreviousSp; //0x1b4
|
|
UCHAR InstrumentationCallbackDisabled; //0x1b8
|
|
UCHAR SpareBytes[23]; //0x1b9
|
|
ULONG TxFsContext; //0x1d0
|
|
struct _GDI_TEB_BATCH32 GdiTebBatch; //0x1d4
|
|
struct _CLIENT_ID32 RealClientId; //0x6b4
|
|
ULONG GdiCachedProcessHandle; //0x6bc
|
|
ULONG GdiClientPID; //0x6c0
|
|
ULONG GdiClientTID; //0x6c4
|
|
ULONG GdiThreadLocalInfo; //0x6c8
|
|
ULONG Win32ClientInfo[62]; //0x6cc
|
|
ULONG glDispatchTable[233]; //0x7c4
|
|
ULONG glReserved1[29]; //0xb68
|
|
ULONG glReserved2; //0xbdc
|
|
ULONG glSectionInfo; //0xbe0
|
|
ULONG glSection; //0xbe4
|
|
ULONG glTable; //0xbe8
|
|
ULONG glCurrentRC; //0xbec
|
|
ULONG glContext; //0xbf0
|
|
ULONG LastStatusValue; //0xbf4
|
|
struct _STRING32 StaticUnicodeString; //0xbf8
|
|
WCHAR StaticUnicodeBuffer[261]; //0xc00
|
|
ULONG DeallocationStack; //0xe0c
|
|
ULONG TlsSlots[64]; //0xe10
|
|
struct LIST_ENTRY32 TlsLinks; //0xf10
|
|
ULONG Vdm; //0xf18
|
|
ULONG ReservedForNtRpc; //0xf1c
|
|
ULONG DbgSsReserved[2]; //0xf20
|
|
ULONG HardErrorMode; //0xf28
|
|
ULONG Instrumentation[9]; //0xf2c
|
|
struct _GUID ActivityId; //0xf50
|
|
ULONG SubProcessTag; //0xf60
|
|
ULONG PerflibData; //0xf64
|
|
ULONG EtwTraceData; //0xf68
|
|
ULONG WinSockData; //0xf6c
|
|
ULONG GdiBatchCount; //0xf70
|
|
union
|
|
{
|
|
struct _PROCESSOR_NUMBER CurrentIdealProcessor; //0xf74
|
|
ULONG IdealProcessorValue; //0xf74
|
|
struct
|
|
{
|
|
UCHAR ReservedPad0; //0xf74
|
|
UCHAR ReservedPad1; //0xf75
|
|
UCHAR ReservedPad2; //0xf76
|
|
UCHAR IdealProcessor; //0xf77
|
|
};
|
|
};
|
|
ULONG GuaranteedStackBytes; //0xf78
|
|
ULONG ReservedForPerf; //0xf7c
|
|
ULONG ReservedForOle; //0xf80
|
|
ULONG WaitingOnLoaderLock; //0xf84
|
|
ULONG SavedPriorityState; //0xf88
|
|
ULONG ReservedForCodeCoverage; //0xf8c
|
|
ULONG ThreadPoolData; //0xf90
|
|
ULONG TlsExpansionSlots; //0xf94
|
|
ULONG MuiGeneration; //0xf98
|
|
ULONG IsImpersonating; //0xf9c
|
|
ULONG NlsCache; //0xfa0
|
|
ULONG pShimData; //0xfa4
|
|
ULONG HeapData; //0xfa8
|
|
ULONG CurrentTransactionHandle; //0xfac
|
|
ULONG ActiveFrame; //0xfb0
|
|
ULONG FlsData; //0xfb4
|
|
ULONG PreferredLanguages; //0xfb8
|
|
ULONG UserPrefLanguages; //0xfbc
|
|
ULONG MergedPrefLanguages; //0xfc0
|
|
ULONG MuiImpersonation; //0xfc4
|
|
union
|
|
{
|
|
volatile USHORT CrossTebFlags; //0xfc8
|
|
USHORT SpareCrossTebBits : 16; //0xfc8
|
|
};
|
|
union
|
|
{
|
|
USHORT SameTebFlags; //0xfca
|
|
struct
|
|
{
|
|
USHORT SafeThunkCall : 1; //0xfca
|
|
USHORT InDebugPrint : 1; //0xfca
|
|
USHORT HasFiberData : 1; //0xfca
|
|
USHORT SkipThreadAttach : 1; //0xfca
|
|
USHORT WerInShipAssertCode : 1; //0xfca
|
|
USHORT RanProcessInit : 1; //0xfca
|
|
USHORT ClonedThread : 1; //0xfca
|
|
USHORT SuppressDebugMsg : 1; //0xfca
|
|
USHORT DisableUserStackWalk : 1; //0xfca
|
|
USHORT RtlExceptionAttached : 1; //0xfca
|
|
USHORT InitialThread : 1; //0xfca
|
|
USHORT SessionAware : 1; //0xfca
|
|
USHORT LoadOwner : 1; //0xfca
|
|
USHORT LoaderWorker : 1; //0xfca
|
|
USHORT SkipLoaderInit : 1; //0xfca
|
|
USHORT SpareSameTebBits : 1; //0xfca
|
|
};
|
|
};
|
|
ULONG TxnScopeEnterCallback; //0xfcc
|
|
ULONG TxnScopeExitCallback; //0xfd0
|
|
ULONG TxnScopeContext; //0xfd4
|
|
ULONG LockCount; //0xfd8
|
|
LONG WowTebOffset; //0xfdc
|
|
ULONG ResourceRetValue; //0xfe0
|
|
ULONG ReservedForWdf; //0xfe4
|
|
ULONGLONG ReservedForCrt; //0xfe8
|
|
struct _GUID EffectiveContainerId; //0xff0
|
|
};
|
|
static_assert(sizeof(X32TEB) == 0x1000, "X32TEB Size check");
|
|
|
|
/*
|
|
x64的teb_64 32位的没做
|
|
*/
|
|
struct _ACTIVATION_CONTEXT_STACK {
|
|
struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME* ActiveFrame; // 0x0
|
|
struct _LIST_ENTRY FrameListCache; // 0x8
|
|
ULONG Flags; // 0x18
|
|
ULONG NextCookieSequenceNumber; // 0x1c
|
|
ULONG StackId; // 0x20
|
|
};
|
|
struct _GDI_TEB_BATCH {
|
|
ULONG Offset : 31; // 0x0
|
|
ULONG HasRenderingCommand : 1; // 0x0
|
|
ULONGLONG HDC; // 0x8
|
|
ULONG Buffer[310]; // 0x10
|
|
};
|
|
struct _CLIENT_ID {
|
|
DWORD64 UniqueProcess; // 0x0
|
|
DWORD64 UniqueThread; // 0x8
|
|
};
|
|
static_assert(sizeof(_CLIENT_ID) == 0x10, "_CLIENT_ID Size check");
|
|
|
|
static_assert(sizeof(_NT_TIB) == 0x38, "_NT_TIB Size check");
|
|
typedef struct X64TEB {
|
|
struct _NT_TIB64 NtTib; // 0x0
|
|
VOID* EnvironmentPointer; // 0x38
|
|
struct _CLIENT_ID ClientId; // 0x40
|
|
VOID* ActiveRpcHandle; // 0x50
|
|
VOID* ThreadLocalStoragePointer; // 0x58
|
|
struct X64PEB* ProcessEnvironmentBlock; // 0x60
|
|
ULONG LastErrorValue; // 0x68
|
|
ULONG CountOfOwnedCriticalSections; // 0x6c
|
|
VOID* CsrClientThread; // 0x70
|
|
VOID* Win32ThreadInfo; // 0x78
|
|
ULONG User32Reserved[26]; // 0x80
|
|
ULONG UserReserved[5]; // 0xe8
|
|
VOID* WOW32Reserved; // 0x100
|
|
ULONG CurrentLocale; // 0x108
|
|
ULONG FpSoftwareStatusRegister; // 0x10c
|
|
VOID* ReservedForDebuggerInstrumentation[16]; // 0x110
|
|
VOID* SystemReserved1[30]; // 0x190
|
|
CHAR PlaceholderCompatibilityMode; // 0x280
|
|
UCHAR PlaceholderHydrationAlwaysExplicit; // 0x281
|
|
CHAR PlaceholderReserved[10]; // 0x282
|
|
ULONG ProxiedProcessId; // 0x28c
|
|
struct _ACTIVATION_CONTEXT_STACK _ActivationStack; // 0x290
|
|
UCHAR WorkingOnBehalfTicket[8]; // 0x2b8
|
|
LONG ExceptionCode; // 0x2c0
|
|
UCHAR Padding0[4]; // 0x2c4
|
|
struct _ACTIVATION_CONTEXT_STACK* ActivationContextStackPointer; // 0x2c8
|
|
ULONGLONG InstrumentationCallbackSp; // 0x2d0
|
|
ULONGLONG InstrumentationCallbackPreviousPc; // 0x2d8
|
|
ULONGLONG InstrumentationCallbackPreviousSp; // 0x2e0
|
|
ULONG TxFsContext; // 0x2e8
|
|
UCHAR InstrumentationCallbackDisabled; // 0x2ec
|
|
UCHAR UnalignedLoadStoreExceptions; // 0x2ed
|
|
UCHAR Padding1[2]; // 0x2ee
|
|
struct _GDI_TEB_BATCH GdiTebBatch; // 0x2f0
|
|
struct _CLIENT_ID RealClientId; // 0x7d8
|
|
VOID* GdiCachedProcessHandle; // 0x7e8
|
|
ULONG GdiClientPID; // 0x7f0
|
|
ULONG GdiClientTID; // 0x7f4
|
|
VOID* GdiThreadLocalInfo; // 0x7f8
|
|
ULONGLONG Win32ClientInfo[62]; // 0x800
|
|
VOID* glDispatchTable[233]; // 0x9f0
|
|
ULONGLONG glReserved1[29]; // 0x1138
|
|
VOID* glReserved2; // 0x1220
|
|
VOID* glSectionInfo; // 0x1228
|
|
VOID* glSection; // 0x1230
|
|
VOID* glTable; // 0x1238
|
|
VOID* glCurrentRC; // 0x1240
|
|
VOID* glContext; // 0x1248
|
|
ULONG LastStatusValue; // 0x1250
|
|
UCHAR Padding2[4]; // 0x1254
|
|
struct _UNICODE_STRING StaticUnicodeString; // 0x1258
|
|
WCHAR StaticUnicodeBuffer[261]; // 0x1268
|
|
UCHAR Padding3[6]; // 0x1472
|
|
VOID* DeallocationStack; // 0x1478
|
|
VOID* TlsSlots[64]; // 0x1480
|
|
struct _LIST_ENTRY TlsLinks; // 0x1680
|
|
VOID* Vdm; // 0x1690
|
|
VOID* ReservedForNtRpc; // 0x1698
|
|
VOID* DbgSsReserved[2]; // 0x16a0
|
|
ULONG HardErrorMode; // 0x16b0
|
|
UCHAR Padding4[4]; // 0x16b4
|
|
VOID* Instrumentation[11]; // 0x16b8
|
|
struct _GUID ActivityId; // 0x1710
|
|
VOID* SubProcessTag; // 0x1720
|
|
VOID* PerflibData; // 0x1728
|
|
VOID* EtwTraceData; // 0x1730
|
|
VOID* WinSockData; // 0x1738
|
|
ULONG GdiBatchCount; // 0x1740
|
|
union {
|
|
struct _PROCESSOR_NUMBER CurrentIdealProcessor; // 0x1744
|
|
ULONG IdealProcessorValue; // 0x1744
|
|
struct {
|
|
UCHAR ReservedPad0; // 0x1744
|
|
UCHAR ReservedPad1; // 0x1745
|
|
UCHAR ReservedPad2; // 0x1746
|
|
UCHAR IdealProcessor; // 0x1747
|
|
};
|
|
};
|
|
ULONG GuaranteedStackBytes; // 0x1748
|
|
UCHAR Padding5[4]; // 0x174c
|
|
VOID* ReservedForPerf; // 0x1750
|
|
VOID* ReservedForOle; // 0x1758
|
|
ULONG WaitingOnLoaderLock; // 0x1760
|
|
UCHAR Padding6[4]; // 0x1764
|
|
VOID* SavedPriorityState; // 0x1768
|
|
ULONGLONG ReservedForCodeCoverage; // 0x1770
|
|
VOID* ThreadPoolData; // 0x1778
|
|
VOID** TlsExpansionSlots; // 0x1780
|
|
VOID* DeallocationBStore; // 0x1788
|
|
VOID* BStoreLimit; // 0x1790
|
|
ULONG MuiGeneration; // 0x1798
|
|
ULONG IsImpersonating; // 0x179c
|
|
VOID* NlsCache; // 0x17a0
|
|
VOID* pShimData; // 0x17a8
|
|
ULONG HeapData; // 0x17b0
|
|
UCHAR Padding7[4]; // 0x17b4
|
|
VOID* CurrentTransactionHandle; // 0x17b8
|
|
struct _TEB_ACTIVE_FRAME* ActiveFrame; // 0x17c0
|
|
VOID* FlsData; // 0x17c8
|
|
VOID* PreferredLanguages; // 0x17d0
|
|
VOID* UserPrefLanguages; // 0x17d8
|
|
VOID* MergedPrefLanguages; // 0x17e0
|
|
ULONG MuiImpersonation; // 0x17e8
|
|
union {
|
|
volatile USHORT CrossTebFlags; // 0x17ec
|
|
USHORT SpareCrossTebBits : 16; // 0x17ec
|
|
};
|
|
union {
|
|
USHORT SameTebFlags; // 0x17ee
|
|
struct {
|
|
USHORT SafeThunkCall : 1; // 0x17ee
|
|
USHORT InDebugPrint : 1; // 0x17ee
|
|
USHORT HasFiberData : 1; // 0x17ee
|
|
USHORT SkipThreadAttach : 1; // 0x17ee
|
|
USHORT WerInShipAssertCode : 1; // 0x17ee
|
|
USHORT RanProcessInit : 1; // 0x17ee
|
|
USHORT ClonedThread : 1; // 0x17ee
|
|
USHORT SuppressDebugMsg : 1; // 0x17ee
|
|
USHORT DisableUserStackWalk : 1; // 0x17ee
|
|
USHORT RtlExceptionAttached : 1; // 0x17ee
|
|
USHORT InitialThread : 1; // 0x17ee
|
|
USHORT SessionAware : 1; // 0x17ee
|
|
USHORT LoadOwner : 1; // 0x17ee
|
|
USHORT LoaderWorker : 1; // 0x17ee
|
|
USHORT SkipLoaderInit : 1; // 0x17ee
|
|
USHORT SpareSameTebBits : 1; // 0x17ee
|
|
};
|
|
};
|
|
VOID* TxnScopeEnterCallback; // 0x17f0
|
|
VOID* TxnScopeExitCallback; // 0x17f8
|
|
VOID* TxnScopeContext; // 0x1800
|
|
ULONG LockCount; // 0x1808
|
|
LONG WowTebOffset; // 0x180c
|
|
VOID* ResourceRetValue; // 0x1810
|
|
VOID* ReservedForWdf; // 0x1818
|
|
ULONGLONG ReservedForCrt; // 0x1820
|
|
struct _GUID EffectiveContainerId; // 0x1828
|
|
};
|
|
static_assert(sizeof(X64TEB) == 0x1838, "TEB Size check");
|
|
struct struct_gs_base {
|
|
char unk[0x30]; // 0x0
|
|
uint64_t teb; // 0x30
|
|
char unk2[0x28]; // 0x38
|
|
uint64_t peb; // 0x60
|
|
};
|
|
/// See: Segment Descriptor
|
|
union SegmentDescriptor {
|
|
ULONG64 all;
|
|
struct {
|
|
ULONG64 limit_low : 16;
|
|
ULONG64 base_low : 16;
|
|
ULONG64 base_mid : 8;
|
|
ULONG64 type : 4;
|
|
ULONG64 system : 1;
|
|
ULONG64 dpl : 2;
|
|
ULONG64 present : 1;
|
|
ULONG64 limit_high : 4;
|
|
ULONG64 avl : 1;
|
|
ULONG64 l : 1; //!< 64-bit code segment (IA-32e mode only)
|
|
ULONG64 db : 1;
|
|
ULONG64 gran : 1;
|
|
ULONG64 base_high : 8;
|
|
} fields;
|
|
};
|
|
/// @copydoc SegmentDescriptor
|
|
struct SegmentDesctiptorX64 {
|
|
SegmentDescriptor descriptor;
|
|
ULONG32 base_upper32;
|
|
ULONG32 reserved;
|
|
};
|
|
// 每个系统的KPCR结构都不一样,懒了
|
|
typedef struct _KPCR {
|
|
SegmentDesctiptorX64 gdt[8];
|
|
} KPCR;
|
|
|
|
#include <pshpack1.h>
|
|
struct Idtr {
|
|
unsigned short limit;
|
|
ULONG_PTR base;
|
|
};
|
|
|
|
struct Idtr32 {
|
|
unsigned short limit;
|
|
ULONG32 base;
|
|
};
|
|
static_assert(sizeof(Idtr32) == 6, "Size check");
|
|
using Gdtr = Idtr;
|
|
#if defined(_AMD64_)
|
|
static_assert(sizeof(Idtr) == 10, "Size check");
|
|
static_assert(sizeof(Gdtr) == 10, "Size check");
|
|
#else
|
|
static_assert(sizeof(Idtr) == 6, "Size check");
|
|
static_assert(sizeof(Gdtr) == 6, "Size check");
|
|
#endif
|
|
|
|
#include <pshpack1.h>
|
|
union SegmentSelector {
|
|
unsigned short all;
|
|
struct {
|
|
unsigned short rpl : 2; //!< Requested Privilege Level
|
|
unsigned short ti : 1; //!< Table Indicator
|
|
unsigned short index : 13;
|
|
} fields;
|
|
};
|
|
static_assert(sizeof(SegmentSelector) == 2, "Size check");
|
|
#include <poppack.h>
|
|
|
|
union FlagRegister {
|
|
ULONG_PTR all;
|
|
struct {
|
|
ULONG_PTR cf : 1; //!< [0] Carry flag
|
|
ULONG_PTR reserved1 : 1; //!< [1] Always 1
|
|
ULONG_PTR pf : 1; //!< [2] Parity flag
|
|
ULONG_PTR reserved2 : 1; //!< [3] Always 0
|
|
ULONG_PTR af : 1; //!< [4] Borrow flag
|
|
ULONG_PTR reserved3 : 1; //!< [5] Always 0
|
|
ULONG_PTR zf : 1; //!< [6] Zero flag
|
|
ULONG_PTR sf : 1; //!< [7] Sign flag
|
|
ULONG_PTR tf : 1; //!< [8] Trap flag
|
|
ULONG_PTR intf : 1; //!< [9] Interrupt flag
|
|
ULONG_PTR df : 1; //!< [10] Direction flag
|
|
ULONG_PTR of : 1; //!< [11] Overflow flag
|
|
ULONG_PTR iopl : 2; //!< [12:13] I/O privilege level
|
|
ULONG_PTR nt : 1; //!< [14] Nested task flag
|
|
ULONG_PTR reserved4 : 1; //!< [15] Always 0
|
|
ULONG_PTR rf : 1; //!< [16] Resume flag
|
|
ULONG_PTR vm : 1; //!< [17] Virtual 8086 mode
|
|
ULONG_PTR ac : 1; //!< [18] Alignment check
|
|
ULONG_PTR vif : 1; //!< [19] Virtual interrupt flag
|
|
ULONG_PTR vip : 1; //!< [20] Virtual interrupt pending
|
|
ULONG_PTR id : 1; //!< [21] Identification flag
|
|
ULONG_PTR reserved5 : 10; //!< [22:31] Always 0
|
|
} fields;
|
|
};
|
|
struct moudle_export {
|
|
char name[MAX_PATH];
|
|
uint64_t function_address;
|
|
void* function_callback;
|
|
};
|
|
struct moudle_import {
|
|
char name[MAX_PATH];
|
|
char dll_name[MAX_PATH];
|
|
uint64_t function_address;
|
|
void* function_callback;
|
|
bool is_delayed_import;
|
|
};
|
|
struct moudle_section {
|
|
char name[9];
|
|
ULONG base;
|
|
ULONG size;
|
|
ULONG protect_flag;
|
|
};
|
|
struct struct_handle_table {
|
|
uint64_t handle; // 值
|
|
uint64_t type; // 对象类型
|
|
uint64_t address; // 地址
|
|
uint64_t authorization; // 权限
|
|
uint64_t protect_flag; // 是否被保护
|
|
char name[MAX_PATH]; // 名称
|
|
};
|
|
struct struct_moudle {
|
|
char name[MAX_PATH];
|
|
uint64_t entry;
|
|
uint64_t base;
|
|
uint64_t size;
|
|
std::vector<std::shared_ptr<moudle_import>> import_function;
|
|
std::vector<std::shared_ptr<moudle_export>> export_function;
|
|
std::vector<std::shared_ptr<moudle_section>> sections;
|
|
};
|
|
struct struct_process {
|
|
char ImageFileName[MAX_PATH]; // 名字
|
|
struct_handle_table HandleTable; // 句柄表
|
|
uint64_t DebugPort; // 一直为0谢谢
|
|
uint64_t UniqueProcessId; // 进程id
|
|
uint64_t InheritedFromUniqueProcessId; // 父进程ID
|
|
X64PEB PebBaseAddress; // PEB 里面有ldr
|
|
uint64_t ExitStatus; // 终止状态
|
|
uint64_t AffinityMask; // 关联掩码
|
|
uint64_t BasePriority; // 优先级类
|
|
uint64_t VadRoot; // VAD
|
|
std::vector<struct_moudle> moudle_list; // 模块列表
|
|
};
|
|
|
|
typedef struct AllocBlock_s {
|
|
AllocBlock_s(ULONG64 b, ULONG s) : base(b), size(s) { free = false; }
|
|
ULONG64 base;
|
|
ULONG size;
|
|
bool free;
|
|
} AllocBlock_t;
|
|
|
|
struct struct_params {
|
|
int type; // 类型
|
|
char str[MAX_PATH]; // PARAMS_CHAR
|
|
wchar_t wstr[MAX_PATH]; // PARAMS_WCHAR
|
|
uint64_t uint; // PARAMS_UINT
|
|
int _int; // PARAMS_INT
|
|
};
|
|
struct struct_process_trace_log {
|
|
time_t time; // 时间
|
|
char function_name[MAX_PATH]; // 名字
|
|
char moudle_name[MAX_PATH]; // 模块名字
|
|
uint64_t function_address; // 地址
|
|
uint64_t call_address;
|
|
int params_num; // 参数数量
|
|
std::vector<uint64_t> save_regs; // 各个寄存器状态
|
|
std::vector<struct_params> save_params; // 各个参数值
|
|
};
|