cheat-engine/dbvm/common/common.h
2019-07-16 10:23:39 +02:00

321 lines
10 KiB
C
Executable File

#ifndef COMMON_H_
#define COMMON_H_
#ifndef SERIALPORT
#define SERIALPORT 0
#endif
#define BYTE unsigned char
#define WORD unsigned short int
#define ULONG unsigned int
#define DWORD unsigned int
#define UINT64 unsigned long long
#define QWORD unsigned long long
#define NULL 0
typedef struct _criticalSection
{
int locked;
int apicid;
int lockcount;
} criticalSection, *PcriticalSection;
extern int debugzeromem;
extern char inportb(short int port) __attribute__((stdcall));
extern void outportb(short int port, char value) __attribute__((stdcall));
extern void _cpuid(ULONG *eax, ULONG *ebx, ULONG *ecx, ULONG *edx) __attribute__((stdcall));
extern ULONG getESP(void) __attribute__((stdcall));
int itoa(unsigned int value,int base, char *output,int maxsize);
unsigned int atoi(char* input, int base, int *err);
void zeromemory(void *address, unsigned int size);
void printchar(char c, int x, int y, char foreground, char background);
void printstring(char *s, int x, int y, char foreground, char background);
void sendchar(char c);
void sendstring(char *s);
char getchar(void);
char waitforchar(void);
int readstring(char *s, int minlength, int maxlength);
unsigned int strlen(char *string);
char* strcat(char *dest, char *src);
char* strcpy(char *dest, char *src);
void copymem(void *dest, void *src,int size);
int getAPICID(void);
int generateCRC(unsigned char *ptr, int size);
void appendzero(char *string, int wantedsize,int maxstringsize);
int vbuildstring(char *str, int size, char *string, __builtin_va_list arglist);
void displayline(char *s, ...);
void sendstringf(char *string, ...);
void showstate(void);
void csEnter(PcriticalSection CS);
void csLeave(PcriticalSection CS);
void spinlock(int *CS);
void waitforkeypress(void);
typedef struct textvideo {
char character;
char foregroundcolor : 4;
char backgroundcolor : 4;
} TEXTVIDEO, *PTEXTVIDEO;
unsigned char nosendchar[256];
int currentdisplayline;
int currentdisplayrow;
typedef struct _ARD {
//Address Range Descriptor Structure
unsigned int BaseAddrLow;
unsigned int BaseAddrHigh;
unsigned int LengthLow;
unsigned int LengthHigh;
unsigned int Type;
} *PARD;
typedef struct _PTE
{
unsigned P : 1; // present (1 = present)
unsigned RW : 1; // read/write
unsigned US : 1; // user/supervisor
unsigned PWT : 1; // page-level write-through
unsigned PCD : 1; // page-level cache disabled
unsigned A : 1; // accessed
unsigned D : 1; // dirty
unsigned PAT : 1; // PAT
unsigned G : 1; // global page
unsigned A1 : 1; // available 1 aka copy-on-write
unsigned A2 : 1; // available 2/ is 1 when paged to disk
unsigned A3 : 1; // available 3
unsigned PFN : 20; // page-frame number
} __attribute__((__packed__)) *PPTE;
typedef struct _PDE
{
unsigned P : 1; // present (1 = present)
unsigned RW : 1; // read/write
unsigned US : 1; // user/supervisor
unsigned PWT : 1; // page-level write-through
unsigned PCD : 1; // page-level cache disabled
unsigned A : 1; // accessed
unsigned D : 1; // dirty
unsigned PS : 1; // reserved (0)
unsigned G : 1; // reserved (0)
unsigned A1 : 1; // available 1 aka copy-on-write
unsigned A2 : 1; // available 2/ is 1 when paged to disk
unsigned A3 : 1; // available 3
unsigned PFN : 20; // page-frame number
} __attribute__((__packed__)) *PPDE;
typedef struct _PDE2MB
{
unsigned P : 1; // present (1 = present)
unsigned RW : 1; // read/write
unsigned US : 1; // user/supervisor
unsigned PWT : 1; // page-level write-through
unsigned PCD : 1; // page-level cache disabled
unsigned A : 1; // accessed
unsigned reserved1 : 1; // reserved (0)
unsigned PS : 1; // reserved (0)
unsigned reserved3 : 1; // reserved (0)
unsigned A1 : 1; // available 1 aka copy-on-write
unsigned A2 : 1; // available 2/ is 1 when paged to disk
unsigned A3 : 1; // available 3
unsigned PFN : 20; // page-frame number (>> 13 instead of >>12);
} __attribute__((__packed__)) *PPDE2MB;
typedef struct _PTE_PAE
{
unsigned P : 1; // present (1 = present)
unsigned RW : 1; // read/write
unsigned US : 1; // user/supervisor
unsigned PWT : 1; // page-level write-through
unsigned PCD : 1; // page-level cache disabled
unsigned A : 1; // accessed
unsigned D : 1; // dirty
unsigned PAT : 1; //
unsigned G : 1; // global page
unsigned A1 : 1; // available 1 aka copy-on-write
unsigned A2 : 1; // available 2/ is 1 when paged to disk
unsigned A3 : 1; // available 3
unsigned PFN : 24; // page-frame number
unsigned reserved : 28;
} __attribute__((__packed__)) *PPTE_PAE;
typedef struct _PDE_PAE
{
unsigned P : 1; // present (1 = present)
unsigned RW : 1; // read/write
unsigned US : 1; // user/supervisor
unsigned PWT : 1; // page-level write-through
unsigned PCD : 1; // page-level cache disabled
unsigned A : 1; // accessed
unsigned D : 1; // dirty
unsigned PS : 1; // pagesize
unsigned G : 1; // reserved (0)
unsigned A1 : 1; // available 1 aka copy-on-write
unsigned A2 : 1; // available 2/ is 1 when paged to disk
unsigned A3 : 1; // available 3
unsigned PFN : 24; // page-frame number
unsigned reserved4 : 28;
} __attribute__((__packed__)) *PPDE_PAE;
typedef struct _PDE2MB_PAE
{
unsigned P : 1; // present (1 = present)
unsigned RW : 1; // read/write
unsigned US : 1; // user/supervisor
unsigned PWT : 1; // page-level write-through
unsigned PCD : 1; // page-level cache disabled
unsigned A : 1; // accessed
unsigned reserved1 : 1; // reserved (0)
unsigned PS : 1; // reserved (0)
unsigned reserved3 : 1; // reserved (0)
unsigned A1 : 1; // available 1 aka copy-on-write
unsigned A2 : 1; // available 2/ is 1 when paged to disk
unsigned A3 : 1; // available 3
unsigned PAT : 1; //
unsigned PFN : 23; // page-frame number (>> 13 instead of >>12);
unsigned reserved4 : 28;
} __attribute__((__packed__)) *PPDE2MB_PAE;
typedef struct _PDPTE_PAE
{
unsigned P : 1; // present (1 = present)
unsigned RW : 1; // Read Write
unsigned US : 1; // User supervisor
unsigned PWT : 1; // page-level write-through
unsigned PCD : 1; // page-level cache disabled
unsigned reserved2 : 4; // reserved
unsigned A1 : 1; // available 1 aka copy-on-write
unsigned A2 : 1; // available 2/ is 1 when paged to disk
unsigned A3 : 1; // available 3
unsigned PFN : 24; // page-frame number
unsigned reserved3 : 28;
} __attribute__((__packed__)) *PPDPTE_PAE;
typedef struct _TSS
{
ULONG Previous_Task_Link : 16;
ULONG Reserved1 : 16;
ULONG ESP0;
ULONG SS0 : 16;
ULONG Reserved2 : 16;
ULONG ESP1;
ULONG SS1 : 16;
ULONG Reserved3 : 16;
ULONG ESP2;
ULONG SS2 : 16;
ULONG Reserved4 : 16;
ULONG CR3;
ULONG EIP;
ULONG EFLAGS;
ULONG EAX;
ULONG ECX;
ULONG EDX;
ULONG EBX;
ULONG ESP;
ULONG EBP;
ULONG ESI;
ULONG EDI;
ULONG ES : 16;
ULONG Reserved5 : 16;
ULONG CS : 16;
ULONG Reserved6 : 16;
ULONG SS : 16;
ULONG Reserved7 : 16;
ULONG DS : 16;
ULONG Reserved8 : 16;
ULONG FS : 16;
ULONG Reserved9 : 16;
ULONG GS : 16;
ULONG Reserved10 : 16;
ULONG LDTss : 16;
ULONG Reserved11 : 16;
ULONG Trap : 1;
ULONG Reserved12 : 15;
ULONG IOBASE : 16;
} __attribute__((__packed__)) TSS ,*PTSS;
typedef struct
{
unsigned Limit0_15 : 16;
unsigned Base0_23 : 24;
unsigned Type : 4;
unsigned System : 1;
unsigned DPL : 2;
unsigned P : 1;
unsigned Limit16_19 : 4;
unsigned AVL : 1;
unsigned Reserved : 1;
unsigned B_D : 1;
unsigned G : 1;
unsigned Base24_31 : 8;
} __attribute__((__packed__)) GDT_ENTRY, *PGDT_ENTRY;
typedef struct tagINT_VECTOR
{
WORD wLowOffset;
WORD wSelector;
BYTE bUnused;
BYTE bAccess;
WORD wHighOffset;
} INT_VECTOR, *PINT_VECTOR;
#pragma pack(2) //allignment of 2 bytes
typedef struct tagIDT
{
WORD wLimit;
PINT_VECTOR vector;
} IDT, *PIDT;
#pragma pack()
typedef struct tagEFLAGS
{
unsigned CF :1; // 0
unsigned reserved1 :1; // 1
unsigned PF :1; // 2
unsigned reserved2 :1; // 3
unsigned AF :1; // 4
unsigned reserved3 :1; // 5
unsigned ZF :1; // 6
unsigned SF :1; // 7
unsigned TF :1; // 8
unsigned IF :1; // 9
unsigned DF :1; // 10
unsigned OF :1; // 11
unsigned IOPL :2; // 12+13
unsigned NT :1; // 14
unsigned reserved4 :1; // 15
unsigned RF :1; // 16
unsigned VM :1; // 17
unsigned AC :1; // 18
unsigned VIF :1; // 19
unsigned VIP :1; // 20
unsigned ID :1; // 21
unsigned reserved5 :10; // 22-31
} __attribute__((__packed__)) EFLAGS,*PEFLAGS;
#endif