summaryrefslogtreecommitdiffstats
path: root/src/utils.c
diff options
context:
space:
mode:
authorladevieq <ladevie.quentin@gmail.com>2026-07-12 23:26:58 +0200
committerladevieq <ladevie.quentin@gmail.com>2026-07-12 23:26:58 +0200
commitcee4c6d1c8cbf898d6aa9ad555d8dfcece4c7d96 (patch)
treea5c9710ca65e4bc1183d365a013d4494882e0eb3 /src/utils.c
parent7b6964eb1bcf30a0ae7ed3391adce30565b262b4 (diff)
Fix runtime crashes due to loaded functions
Diffstat (limited to 'src/utils.c')
-rw-r--r--src/utils.c54
1 files changed, 14 insertions, 40 deletions
diff --git a/src/utils.c b/src/utils.c
index 0b3513d..95a1d80 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -1,30 +1,10 @@
#include "utils.h"
+#include "win_funcs.h"
// =======================
// ====== windows.h ======
// =======================
-typedef struct _PROCESS_INFORMATION {
- void* hProcess;
- void* hThread;
- u32 dwProcessId;
- u32 dwThreadId;
-} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
-typedef struct _OVERLAPPED {
- u32* Internal;
- u32* InternalHigh;
- union {
- struct {
- u32 Offset;
- u32 OffsetHigh;
- } DUMMYSTRUCTNAME;
- void* Pointer;
- } DUMMYUNIONNAME;
-
- void* hEvent;
-} OVERLAPPED, *LPOVERLAPPED;
-
-#define SUCCEEDED(hr) (((i32)(hr)) >= 0)
#if defined(_MSC_VER) && !defined(__clang__)
#define va_start(ap, x) ((void)(__va_start(&ap, x)))
@@ -44,12 +24,6 @@ typedef struct _OVERLAPPED {
#define STD_OUTPUT_HANDLE ((u32)-11)
#define STD_ERROR_HANDLE ((u32)-12)
-extern void* GetStdHandle(u32 nStdHandle);
-
-extern i32 WriteFile(void* hFile, const void* lpBuffer, u32 nNumberOfBytesToWrite, u32* lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);
-
-extern i32 ReadProcessMemory(void* hProcess, const void* lpBaseAddress, void* lpBuffer, size_t nSize, size_t* lpNumberOfBytesRead);
-
// ========================
// ====== !windows.h ======
// ========================
@@ -66,19 +40,7 @@ u8 is_hexadecimal_digit(char c) {
return ('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F');
}
-
// TODO: Improve basic functions perfs
-// max_size: str allocated size
-size_t str_len(const char* str, size_t max_size) {
- const char* c = str;
- size_t count = 0U;
- while (*c != '\0' && count < max_size) {
- c++;
- count++;
- }
- return count;
-}
-
void str_cat(char* out, const char* str, size_t c_str) {
char* cur_out = out;
const char* cur_str = str;
@@ -91,6 +53,18 @@ void str_cat(char* out, const char* str, size_t c_str) {
}
}
+void memcpy(void* restrict dst, const void* restrict src, size_t size) {
+ RtlCopyMemory(dst, src, size);
+}
+
+void memset(void* dst, int fill, size_t count) {
+ if (fill == 0) {
+ RtlZeroMemory(dst, count);
+ } else {
+ RtlFillMemory(dst, count, fill);
+ }
+}
+
void u64toa(u64 number, char* str, u32 base) {
static char codes[16U] = {
'0',
@@ -201,7 +175,7 @@ void print(const char* format, ...) {
if (*cur_fmt == 's') {
const char* str = va_arg(args, const char*);
if(str != NULL) {
- size_t length = str_len(str, sizeof(formatted_str));
+ size_t length = str_len(str);
i64 relative_fill_count = fill_count - length;
if (relative_fill_count > 1) {
fill_chars((u8*)cur_char, ' ', (u32)relative_fill_count);