summaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
authorladevieq <ladevie.quentin@gmail.com>2026-07-12 00:47:54 +0200
committerladevieq <ladevie.quentin@gmail.com>2026-07-12 00:47:54 +0200
commit7b6964eb1bcf30a0ae7ed3391adce30565b262b4 (patch)
tree3bbf89d582a1466a2319ccaaf6d4cbb734bdd66b /src/main.c
parentce51256c91e566d339c6a670af11bab519f98349 (diff)
Load functions by hand
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c320
1 files changed, 162 insertions, 158 deletions
diff --git a/src/main.c b/src/main.c
index dd84cea..3ad1e9f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -4,6 +4,8 @@
#include "events.h"
#include "parser.h"
+#include "win_funcs.h"
+
// =======================
// ====== windows.h ======
// =======================
@@ -120,98 +122,98 @@ typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;
// Exception record definition.
//
-typedef struct _EXCEPTION_RECORD {
- u32 ExceptionCode;
- u32 ExceptionFlags;
- struct _EXCEPTION_RECORD *ExceptionRecord;
- void* ExceptionAddress;
- u32 NumberParameters;
- u64* ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
- } EXCEPTION_RECORD;
-
-typedef EXCEPTION_RECORD *PEXCEPTION_RECORD;
-
-typedef struct _EXCEPTION_DEBUG_INFO {
- EXCEPTION_RECORD ExceptionRecord;
- u32 dwFirstChance;
-} EXCEPTION_DEBUG_INFO, *LPEXCEPTION_DEBUG_INFO;
-
-typedef struct _CREATE_THREAD_DEBUG_INFO {
- void* hThread;
- void* lpThreadLocalBase;
- LPTHREAD_START_ROUTINE lpStartAddress;
-} CREATE_THREAD_DEBUG_INFO, *LPCREATE_THREAD_DEBUG_INFO;
-
-typedef struct _CREATE_PROCESS_DEBUG_INFO {
- void* hFile;
- void* hProcess;
- void* hThread;
- void* lpBaseOfImage;
- u32 dwDebugInfoFileOffset;
- u32 nDebugInfoSize;
- void* lpThreadLocalBase;
- LPTHREAD_START_ROUTINE lpStartAddress;
- void* lpImageName;
- u16 fUnicode;
-} CREATE_PROCESS_DEBUG_INFO, *LPCREATE_PROCESS_DEBUG_INFO;
-
-typedef struct _EXIT_THREAD_DEBUG_INFO {
- u32 dwExitCode;
-} EXIT_THREAD_DEBUG_INFO, *LPEXIT_THREAD_DEBUG_INFO;
-
-typedef struct _EXIT_PROCESS_DEBUG_INFO {
- u32 dwExitCode;
-} EXIT_PROCESS_DEBUG_INFO, *LPEXIT_PROCESS_DEBUG_INFO;
-
-typedef struct _LOAD_DLL_DEBUG_INFO {
- void* hFile;
- void* lpBaseOfDll;
- u32 dwDebugInfoFileOffset;
- u32 nDebugInfoSize;
- void* lpImageName;
- u16 fUnicode;
-} LOAD_DLL_DEBUG_INFO, *LPLOAD_DLL_DEBUG_INFO;
-
-typedef struct _UNLOAD_DLL_DEBUG_INFO {
- void* lpBaseOfDll;
-} UNLOAD_DLL_DEBUG_INFO, *LPUNLOAD_DLL_DEBUG_INFO;
+// typedef struct _EXCEPTION_RECORD {
+// u32 ExceptionCode;
+// u32 ExceptionFlags;
+// struct _EXCEPTION_RECORD *ExceptionRecord;
+// void* ExceptionAddress;
+// u32 NumberParameters;
+// u64* ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+// } EXCEPTION_RECORD;
+//
+// typedef EXCEPTION_RECORD *PEXCEPTION_RECORD;
+//
+// typedef struct _EXCEPTION_DEBUG_INFO {
+// EXCEPTION_RECORD ExceptionRecord;
+// u32 dwFirstChance;
+// } EXCEPTION_DEBUG_INFO, *LPEXCEPTION_DEBUG_INFO;
+//
+// typedef struct _CREATE_THREAD_DEBUG_INFO {
+// void* hThread;
+// void* lpThreadLocalBase;
+// LPTHREAD_START_ROUTINE lpStartAddress;
+// } CREATE_THREAD_DEBUG_INFO, *LPCREATE_THREAD_DEBUG_INFO;
+//
+// typedef struct _CREATE_PROCESS_DEBUG_INFO {
+// void* hFile;
+// void* hProcess;
+// void* hThread;
+// void* lpBaseOfImage;
+// u32 dwDebugInfoFileOffset;
+// u32 nDebugInfoSize;
+// void* lpThreadLocalBase;
+// LPTHREAD_START_ROUTINE lpStartAddress;
+// void* lpImageName;
+// u16 fUnicode;
+// } CREATE_PROCESS_DEBUG_INFO, *LPCREATE_PROCESS_DEBUG_INFO;
+//
+// typedef struct _EXIT_THREAD_DEBUG_INFO {
+// u32 dwExitCode;
+// } EXIT_THREAD_DEBUG_INFO, *LPEXIT_THREAD_DEBUG_INFO;
+//
+// typedef struct _EXIT_PROCESS_DEBUG_INFO {
+// u32 dwExitCode;
+// } EXIT_PROCESS_DEBUG_INFO, *LPEXIT_PROCESS_DEBUG_INFO;
+//
+// typedef struct _LOAD_DLL_DEBUG_INFO {
+// void* hFile;
+// void* lpBaseOfDll;
+// u32 dwDebugInfoFileOffset;
+// u32 nDebugInfoSize;
+// void* lpImageName;
+// u16 fUnicode;
+// } LOAD_DLL_DEBUG_INFO, *LPLOAD_DLL_DEBUG_INFO;
+//
+// typedef struct _UNLOAD_DLL_DEBUG_INFO {
+// void* lpBaseOfDll;
+// } UNLOAD_DLL_DEBUG_INFO, *LPUNLOAD_DLL_DEBUG_INFO;
+//
+// typedef struct _OUTPUT_DEBUG_STRING_INFO {
+// char* lpDebugStringData;
+// u16 fUnicode;
+// u16 nDebugStringLength;
+// } OUTPUT_DEBUG_STRING_INFO, *LPOUTPUT_DEBUG_STRING_INFO;
+//
+// typedef struct _RIP_INFO {
+// u32 dwError;
+// u32 dwType;
+// } RIP_INFO, *LPRIP_INFO;
+//
+// typedef struct _DEBUG_EVENT {
+// u32 dwDebugEventCode;
+// u32 dwProcessId;
+// u32 dwThreadId;
+// union {
+// EXCEPTION_DEBUG_INFO Exception;
+// CREATE_THREAD_DEBUG_INFO CreateThread;
+// CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
+// EXIT_THREAD_DEBUG_INFO ExitThread;
+// EXIT_PROCESS_DEBUG_INFO ExitProcess;
+// LOAD_DLL_DEBUG_INFO LoadDll;
+// UNLOAD_DLL_DEBUG_INFO UnloadDll;
+// OUTPUT_DEBUG_STRING_INFO DebugString;
+// RIP_INFO RipInfo;
+// } u;
+// } DEBUG_EVENT, *LPDEBUG_EVENT;
-typedef struct _OUTPUT_DEBUG_STRING_INFO {
- char* lpDebugStringData;
- u16 fUnicode;
- u16 nDebugStringLength;
-} OUTPUT_DEBUG_STRING_INFO, *LPOUTPUT_DEBUG_STRING_INFO;
+// extern i32 WaitForDebugEventEx(LPDEBUG_EVENT lpDebugEvent, u32 dwMilliseconds);
-typedef struct _RIP_INFO {
- u32 dwError;
- u32 dwType;
-} RIP_INFO, *LPRIP_INFO;
-
-typedef struct _DEBUG_EVENT {
- u32 dwDebugEventCode;
- u32 dwProcessId;
- u32 dwThreadId;
- union {
- EXCEPTION_DEBUG_INFO Exception;
- CREATE_THREAD_DEBUG_INFO CreateThread;
- CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
- EXIT_THREAD_DEBUG_INFO ExitThread;
- EXIT_PROCESS_DEBUG_INFO ExitProcess;
- LOAD_DLL_DEBUG_INFO LoadDll;
- UNLOAD_DLL_DEBUG_INFO UnloadDll;
- OUTPUT_DEBUG_STRING_INFO DebugString;
- RIP_INFO RipInfo;
- } u;
-} DEBUG_EVENT, *LPDEBUG_EVENT;
-
-extern i32 WaitForDebugEventEx(LPDEBUG_EVENT lpDebugEvent, u32 dwMilliseconds);
-
-typedef struct _PROCESS_INFORMATION {
- void* hProcess;
- void* hThread;
- u32 dwProcessId;
- u32 dwThreadId;
-} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
+// typedef struct _PROCESS_INFORMATION {
+// void* hProcess;
+// void* hThread;
+// u32 dwProcessId;
+// u32 dwThreadId;
+// } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
#define PAGE_NOACCESS 0x01
#define PAGE_READONLY 0x02
@@ -270,41 +272,41 @@ typedef struct _PROCESS_INFORMATION {
#define MEM_EXTENDED_PARAMETER_EC_CODE 0x00000040
#define MEM_EXTENDED_PARAMETER_NUMA_NODE_MANDATORY MINLONG64
-extern void* VirtualAlloc(void* lpAddress, size_t dwSize, u32 flAllocationType, u32 flProtect);
-extern i32 VirtualFree(void* lpAddress, size_t dwSize, u32 dwFreeType);
+// extern void* VirtualAlloc(void* lpAddress, u64 dwSize, u32 flAllocationType, u32 flProtect);
+// extern i32 VirtualFree(void* lpAddress, size_t dwSize, u32 dwFreeType);
#define STD_INPUT_HANDLE ((u32)-10)
#define STD_OUTPUT_HANDLE ((u32)-11)
#define STD_ERROR_HANDLE ((u32)-12)
-extern void* GetStdHandle(u32 nStdHandle);
-
-typedef struct _STARTUPINFOA {
- u32 cb;
- i8* lpReserved;
- i8* lpDesktop;
- i8* lpTitle;
- u32 dwX;
- u32 dwY;
- u32 dwXSize;
- u32 dwYSize;
- u32 dwXCountChars;
- u32 dwYCountChars;
- u32 dwFillAttribute;
- u32 dwFlags;
- u16 wShowWindow;
- u16 cbReserved2;
- u8* lpReserved2;
- void* hStdInput;
- void* hStdOutput;
- void* hStdError;
-} STARTUPINFOA, *LPSTARTUPINFOA;
+// extern void* GetStdHandle(u32 nStdHandle);
-typedef struct _SECURITY_ATTRIBUTES {
- u32 nLength;
- void* lpSecurityDescriptor;
- i32 bInheritHandle;
-} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
+// typedef struct _STARTUPINFOA {
+// u32 cb;
+// i8* lpReserved;
+// i8* lpDesktop;
+// i8* lpTitle;
+// u32 dwX;
+// u32 dwY;
+// u32 dwXSize;
+// u32 dwYSize;
+// u32 dwXCountChars;
+// u32 dwYCountChars;
+// u32 dwFillAttribute;
+// u32 dwFlags;
+// u16 wShowWindow;
+// u16 cbReserved2;
+// u8* lpReserved2;
+// void* hStdInput;
+// void* hStdOutput;
+// void* hStdError;
+// } STARTUPINFOA, *LPSTARTUPINFOA;
+//
+// typedef struct _SECURITY_ATTRIBUTES {
+// u32 nLength;
+// void* lpSecurityDescriptor;
+// i32 bInheritHandle;
+// } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
//
// Process dwCreationFlag values
@@ -355,20 +357,20 @@ typedef struct _SECURITY_ATTRIBUTES {
//#define CREATE_SUSPENDED 0x00000004
-extern i32 CreateProcessA(
- const i8* lpApplicationName,
- i8* lpCommandLine,
- LPSECURITY_ATTRIBUTES lpProcessAttributes,
- LPSECURITY_ATTRIBUTES lpThreadAttributes,
- i32 bInheritHandles,
- u32 dwCreationFlags,
- void* lpEnvironment,
- const i8* lpCurrentDirectory,
- LPSTARTUPINFOA lpStartupInfo,
- LPPROCESS_INFORMATION lpProcessInformation
-);
-
-extern i32 TerminateProcess(void* hProcess, u32 uExitCode);
+// extern i32 CreateProcessA(
+// const i8* lpApplicationName,
+// i8* lpCommandLine,
+// LPSECURITY_ATTRIBUTES lpProcessAttributes,
+// LPSECURITY_ATTRIBUTES lpThreadAttributes,
+// i32 bInheritHandles,
+// u32 dwCreationFlags,
+// void* lpEnvironment,
+// const i8* lpCurrentDirectory,
+// LPSTARTUPINFOA lpStartupInfo,
+// LPPROCESS_INFORMATION lpProcessInformation
+// );
+//
+// extern i32 TerminateProcess(void* hProcess, u32 uExitCode);
//
// Input Mode flags:
@@ -395,36 +397,36 @@ extern i32 TerminateProcess(void* hProcess, u32 uExitCode);
#define DISABLE_NEWLINE_AUTO_RETURN 0x0008
#define ENABLE_LVB_GRID_WORLDWIDE 0x0010
-extern i32 SetConsoleMode(void* hConsoleHandle, u32 dwMode);
-
-typedef struct _CONSOLE_READCONSOLE_CONTROL {
- u32 nLength;
- u32 nInitialChars;
- u32 dwCtrlWakeupMask;
- u32 dwControlKeyState;
-} CONSOLE_READCONSOLE_CONTROL, *PCONSOLE_READCONSOLE_CONTROL;
+// extern i32 SetConsoleMode(void* hConsoleHandle, u32 dwMode);
-extern i32 ReadConsoleA(
- void* hConsoleInput,
- void* lpBuffer,
- u32 nNumberOfCharsToRead,
- u32* lpNumberOfCharsRead,
- PCONSOLE_READCONSOLE_CONTROL pInputControl
- );
+// typedef struct _CONSOLE_READCONSOLE_CONTROL {
+// u32 nLength;
+// u32 nInitialChars;
+// u32 dwCtrlWakeupMask;
+// u32 dwControlKeyState;
+// } CONSOLE_READCONSOLE_CONTROL, *PCONSOLE_READCONSOLE_CONTROL;
-extern i32 WriteConsoleA(
- void* hConsoleOutput,
- const void* lpBuffer,
- u32 nNumberOfCharsToWrite,
- u32* lpNumberOfCharsWritten,
- void* lpReserved
- );
+// extern i32 ReadConsoleA(
+// void* hConsoleInput,
+// void* lpBuffer,
+// u32 nNumberOfCharsToRead,
+// u32* lpNumberOfCharsRead,
+// PCONSOLE_READCONSOLE_CONTROL pInputControl
+// );
+//
+// extern i32 WriteConsoleA(
+// void* hConsoleOutput,
+// const void* lpBuffer,
+// u32 nNumberOfCharsToWrite,
+// u32* lpNumberOfCharsWritten,
+// void* lpReserved
+// );
// ========================
// ====== !windows.h ======
// ========================
-extern u32 _fltused = TRUE;
+u32 _fltused = TRUE;
u8 is_open = TRUE;
u8 process_commands = TRUE;
@@ -438,7 +440,7 @@ u32 continue_status = DBG_EXCEPTION_NOT_HANDLED;
u8* string_stack_base = NULL;
u8* string_stack_current = NULL;
-void dbg_loop() {
+void dbg_loop(void) {
while(is_open) {
WaitForDebugEventEx(&dbg_event, INFINITE);
@@ -488,7 +490,9 @@ void dbg_loop() {
}
}
-int mainCRTStartup() {
+extern void load_funcs(void);
+int mainCRTStartup(void) {
+ load_funcs();
string_stack_current = string_stack_base = VirtualAlloc(NULL, 4096U * 64U, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);