From ce51256c91e566d339c6a670af11bab519f98349 Mon Sep 17 00:00:00 2001 From: ladevieq Date: Thu, 9 Jul 2026 21:49:15 +0200 Subject: Get rid of windows.h --- include/disasm.h | 5 +++ include/module.h | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- include/pdb.h | 2 +- include/utils.h | 2 + 4 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 include/disasm.h (limited to 'include') diff --git a/include/disasm.h b/include/disasm.h new file mode 100644 index 0000000..7926f0c --- /dev/null +++ b/include/disasm.h @@ -0,0 +1,5 @@ +#pragma once + +#include "types.h" + +extern void unassemble(u8* start, u64 size); diff --git a/include/module.h b/include/module.h index e94e156..89a2d8c 100644 --- a/include/module.h +++ b/include/module.h @@ -1,10 +1,121 @@ #pragma once -#include - #include "types.h" #include "hashmap.h" +// ======================= +// ====== windows.h ====== +// ======================= +typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header + u16 e_magic; // Magic number + u16 e_cblp; // Bytes on last page of file + u16 e_cp; // Pages in file + u16 e_crlc; // Relocations + u16 e_cparhdr; // Size of header in paragraphs + u16 e_minalloc; // Minimum extra paragraphs needed + u16 e_maxalloc; // Maximum extra paragraphs needed + u16 e_ss; // Initial (relative) SS value + u16 e_sp; // Initial SP value + u16 e_csum; // Checksum + u16 e_ip; // Initial IP value + u16 e_cs; // Initial (relative) CS value + u16 e_lfarlc; // File address of relocation table + u16 e_ovno; // Overlay number + u16 e_res[4]; // Reserved words + u16 e_oemid; // OEM identifier (for e_oeminfo) + u16 e_oeminfo; // OEM information; e_oemid specific + u16 e_res2[10]; // Reserved words + i32 e_lfanew; // File address of new exe header + } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; + +// +// File header format. +// + +typedef struct _IMAGE_FILE_HEADER { + u16 Machine; + u16 NumberOfSections; + u32 TimeDateStamp; + u32 PointerToSymbolTable; + u32 NumberOfSymbols; + u16 SizeOfOptionalHeader; + u16 Characteristics; +} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; + +#define IMAGE_SIZEOF_FILE_HEADER 20 + +// Directory Entries + +#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 // Export Directory +#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // Import Directory +#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 // Resource Directory +#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 // Exception Directory +#define IMAGE_DIRECTORY_ENTRY_SECURITY 4 // Security Directory +#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 // Base Relocation Table +#define IMAGE_DIRECTORY_ENTRY_DEBUG 6 // Debug Directory +// IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7 // (X86 usage) +#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7 // Architecture Specific Data +#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 // RVA of GP +#define IMAGE_DIRECTORY_ENTRY_TLS 9 // TLS Directory +#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 // Load Configuration Directory +#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 // Bound Import Directory in headers +#define IMAGE_DIRECTORY_ENTRY_IAT 12 // Import Address Table +#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 // Delay Load Import Descriptors +#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 // COM Runtime descriptor + +// +// Directory format. +// + +typedef struct _IMAGE_DATA_DIRECTORY { + u32 VirtualAddress; + u32 Size; +} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; + +#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 + +typedef struct _IMAGE_OPTIONAL_HEADER64 { + u16 Magic; + u8 MajorLinkerVersion; + u8 MinorLinkerVersion; + u32 SizeOfCode; + u32 SizeOfInitializedData; + u32 SizeOfUninitializedData; + u32 AddressOfEntryPoint; + u32 BaseOfCode; + u64 ImageBase; + u32 SectionAlignment; + u32 FileAlignment; + u16 MajorOperatingSystemVersion; + u16 MinorOperatingSystemVersion; + u16 MajorImageVersion; + u16 MinorImageVersion; + u16 MajorSubsystemVersion; + u16 MinorSubsystemVersion; + u32 Win32VersionValue; + u32 SizeOfImage; + u32 SizeOfHeaders; + u32 CheckSum; + u16 Subsystem; + u16 DllCharacteristics; + u64 SizeOfStackReserve; + u64 SizeOfStackCommit; + u64 SizeOfHeapReserve; + u64 SizeOfHeapCommit; + u32 LoaderFlags; + u32 NumberOfRvaAndSizes; + IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; +} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64; + +typedef struct _IMAGE_NT_HEADERS64 { + u32 Signature; + IMAGE_FILE_HEADER FileHeader; + IMAGE_OPTIONAL_HEADER64 OptionalHeader; +} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64; +// ======================== +// ====== !windows.h ====== +// ======================== + struct module { void* base_addr; u8** functions_name; @@ -23,7 +134,7 @@ struct module { #ifdef HASHMAP struct hashmap symbols; #endif - u8 name[256U]; + i8 name[256U]; }; diff --git a/include/pdb.h b/include/pdb.h index 965ccc3..85a05e2 100644 --- a/include/pdb.h +++ b/include/pdb.h @@ -2,4 +2,4 @@ #include "module.h" -extern void open_pdb(const char* pdb_path, struct module* module); +extern void open_pdb(const i8* pdb_path, struct module* module); diff --git a/include/utils.h b/include/utils.h index 9f04262..d93d2bb 100644 --- a/include/utils.h +++ b/include/utils.h @@ -11,6 +11,8 @@ #define TRUE 1 #define FALSE 0 +#define INFINITE 0xFFFFFFFF // Infinite timeout + extern void print(const char* format, ...); extern u8 is_alpha(char c); -- cgit v1.3