From 21e411fde7a04bac271e34c2459de532884689a4 Mon Sep 17 00:00:00 2001 From: rdbo Date: Thu, 22 Dec 2022 09:03:09 -0300 Subject: [PATCH] cleaned up unix includes from libmem.h --- libmem/include/libmem.h | 140 +--------------------------------------- libmem/src/helpers.c | 2 + libmem/src/hook.c | 115 +-------------------------------- libmem/src/memory.c | 3 + libmem/src/module.c | 3 + libmem/src/process.c | 4 ++ libmem/src/symbol.cpp | 1 + libmem/src/thread.c | 3 + 8 files changed, 21 insertions(+), 250 deletions(-) diff --git a/libmem/include/libmem.h b/libmem/include/libmem.h index 2e5afdef..affcc891 100644 --- a/libmem/include/libmem.h +++ b/libmem/include/libmem.h @@ -289,44 +289,11 @@ # include # include # include -#elif LM_OS == LM_OS_LINUX || LM_OS == LM_OS_ANDROID -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# if LM_OS != LM_OS_ANDROID -# include -# endif -# include -# include -# include -#elif LM_OS == LM_OS_BSD -# include -# include +#else # include # include -# include -# include -# include -# include # include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include +# include #endif /* LM_OS */ #if LM_LANG == LM_LANG_CPP @@ -423,114 +390,13 @@ typedef struct { lm_flags_t flags; } lm_page_t; -enum { - LM_DETOUR_ANY, -# if LM_ARCH == LM_ARCH_X86 - LM_DETOUR_JMP32, - LM_DETOUR_JMP64, - LM_DETOUR_CALL32, - LM_DETOUR_CALL64, - LM_DETOUR_RET32, - LM_DETOUR_RET64, -# endif - LM_DETOUR_INVAL -}; - -typedef lm_int_t lm_detour_t; - /* LM_GetModule(Ex) Flags */ enum { LM_MOD_BY_STR = 0, LM_MOD_BY_ADDR }; -enum { - LM_DATLOC_INVAL = 0, -# if LM_ARCH == LM_ARCH_X86 - /* x86_32 */ - LM_DATLOC_EAX, - LM_DATLOC_EBX, - LM_DATLOC_ECX, - LM_DATLOC_EDX, - LM_DATLOC_ESI, - LM_DATLOC_EDI, - LM_DATLOC_ESP, - LM_DATLOC_EBP, - LM_DATLOC_EIP, - /* - LM_DATLOC_XMM0, - LM_DATLOC_XMM1, - LM_DATLOC_XMM2, - LM_DATLOC_XMM3, - LM_DATLOC_XMM4, - LM_DATLOC_XMM5, - LM_DATLOC_XMM6, - LM_DATLOC_XMM7, - */ - /* x86_64 */ -# if LM_BITS == 64 - LM_DATLOC_RAX, - LM_DATLOC_RBX, - LM_DATLOC_RCX, - LM_DATLOC_RDX, - LM_DATLOC_RSI, - LM_DATLOC_RDI, - LM_DATLOC_RSP, - LM_DATLOC_RBP, - LM_DATLOC_RIP, - LM_DATLOC_R8, - LM_DATLOC_R9, - LM_DATLOC_R10, - LM_DATLOC_R11, - LM_DATLOC_R12, - LM_DATLOC_R13, - LM_DATLOC_R14, - LM_DATLOC_R15, - /* - LM_DATLOC_XMM8, - LM_DATLOC_XMM9, - LM_DATLOC_XMM10, - LM_DATLOC_XMM11, - LM_DATLOC_XMM12, - LM_DATLOC_XMM13, - LM_DATLOC_XMM14, - LM_DATLOC_XMM15, - */ -# endif -# elif LM_ARCH == LM_ARCH_ARM -# endif - LM_DATLOC_STACK -}; - -typedef lm_int_t lm_datloc_t; - -typedef struct { - lm_datloc_t datloc; - lm_size_t size; - lm_byte_t *data; -} lm_datio_t; - -typedef struct { -# if LM_OS == LM_OS_WIN - CONTEXT regs; -# if LM_BITS == 64 - WOW64_CONTEXT regs32; -# endif -# elif LM_OS == LM_OS_LINUX || LM_OS == LM_OS_ANDROID -# if LM_ARCH == LM_ARCH_X86 - struct user_regs_struct regs; - struct user_fpregs_struct fpregs; -# elif LM_ARCH == LM_ARCH_ARM - struct user regs; -# endif -# elif LM_OS == LM_OS_BSD -# if LM_ARCH == LM_ARCH_X86 - struct reg regs; - struct fpreg fpregs; -# elif LM_ARCH == LM_ARCH_ARM -# endif -# endif -} lm_regs_t; +typedef lm_int_t lm_detour_t; /* Based from instruction struct from capstone.h */ typedef struct { diff --git a/libmem/src/helpers.c b/libmem/src/helpers.c index 45d3ca35..e16e8d69 100644 --- a/libmem/src/helpers.c +++ b/libmem/src/helpers.c @@ -1,6 +1,8 @@ #include "internal.h" #if LM_OS != LM_OS_WIN +#include + LM_PRIVATE lm_size_t _LM_OpenFileBuf(lm_tstring_t path, lm_tchar_t **pfilebuf) diff --git a/libmem/src/hook.c b/libmem/src/hook.c index 33ea2046..40c3a0f0 100644 --- a/libmem/src/hook.c +++ b/libmem/src/hook.c @@ -9,117 +9,6 @@ _LM_DetourPayload(lm_address_t src, { lm_size_t size = 0; - if (!buf) - return size; - -# if LM_ARCH == LM_ARCH_X86 - switch (detour) { - case LM_DETOUR_JMP32: - { - lm_byte_t payload[] = { - 0xE9, 0x0, 0x0, 0x0, 0x0 /* jmp 0x0 */ - }; - - size = sizeof(payload); - - *(lm_uint32_t *)&payload[1] = (lm_uint32_t)( - (lm_uintptr_t)dst - (lm_uintptr_t)src - size - ); - - *buf = (lm_byte_t *)LM_MALLOC(size); - LM_MEMCPY(*buf, payload, size); - break; - } - case LM_DETOUR_JMP64: - case LM_DETOUR_ANY: - { - if (bits == 64) { - lm_byte_t payload[] = { - 0xFF, 0x25, 0x0, 0x0, 0x0, 0x0, /* jmp [rip] */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 /* */ - }; - - size = sizeof(payload); - - *(lm_uintptr_t *)&payload[6] = (lm_uintptr_t)dst; - - *buf = (lm_byte_t *)LM_MALLOC(size); - LM_MEMCPY(*buf, payload, size); - } else { - lm_byte_t payload[] = { - 0xFF, 0x25, 0x0, 0x0, 0x0, 0x0, /* jmp [eip] */ - 0x0, 0x0, 0x0, 0x0 /* */ - }; - - size = sizeof(payload); - - *(lm_uint32_t *)&payload[6] = (lm_uint32_t)( - (lm_uintptr_t)dst - ); - - *buf = (lm_byte_t *)LM_MALLOC(size); - LM_MEMCPY(*buf, payload, size); - } - break; - } - case LM_DETOUR_CALL32: - { - lm_byte_t payload[] = { - 0xE8, 0x0, 0x0, 0x0, 0x0 /* call 0x0 */ - }; - - size = sizeof(payload); - - *(lm_uint32_t *)&payload[1] = (lm_uint32_t)( - (lm_uintptr_t)dst - (lm_uintptr_t)src - size - ); - - *buf = (lm_byte_t *)LM_MALLOC(size); - LM_MEMCPY(*buf, payload, size); - break; - } - case LM_DETOUR_CALL64: - { - if (bits == 64) { - lm_byte_t payload[] = { - 0xFF, 0x15, 0x0, 0x0, 0x0, 0x0, /* call [rip] */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 /* */ - }; - - size = sizeof(payload); - - *(lm_uintptr_t *)&payload[6] = (lm_uintptr_t)dst; - - *buf = (lm_byte_t *)LM_MALLOC(size); - LM_MEMCPY(*buf, payload, size); - } else { - lm_byte_t payload[] = { - 0xFF, 0x15, 0x0, 0x0, 0x0, 0x0, /* call [eip] */ - 0x0, 0x0, 0x0, 0x0 /* */ - }; - - size = sizeof(payload); - - *(lm_uint32_t *)&payload[6] = (lm_uint32_t)( - (lm_uintptr_t)dst - ); - - *buf = (lm_byte_t *)LM_MALLOC(size); - LM_MEMCPY(*buf, payload, size); - } - break; - } - case LM_DETOUR_RET32: - { - break; - } - case LM_DETOUR_RET64: - { - break; - } - } -# elif LM_ARCH == LM_ARCH_ARM -# endif return size; } @@ -193,7 +82,7 @@ LM_MakeTrampoline(lm_address_t src, payload_size = _LM_DetourPayload(LM_NULLPTR, &((lm_byte_t *)src)[size], - LM_DETOUR_JMP64, + 0, LM_GetProcessBits(), &payload); @@ -237,7 +126,7 @@ LM_MakeTrampolineEx(lm_process_t proc, payload_size = _LM_DetourPayload(LM_NULLPTR, &((lm_byte_t *)src)[size], - LM_DETOUR_JMP64, + 0, LM_GetProcessBits(), &payload); diff --git a/libmem/src/memory.c b/libmem/src/memory.c index 5adab081..f26eb824 100644 --- a/libmem/src/memory.c +++ b/libmem/src/memory.c @@ -1,4 +1,7 @@ #include "internal.h" +#if LM_OS != LM_OS_WIN +# include +#endif LM_API lm_size_t LM_ReadMemory(lm_address_t src, diff --git a/libmem/src/module.c b/libmem/src/module.c index 03ac9b21..ffdf6db6 100644 --- a/libmem/src/module.c +++ b/libmem/src/module.c @@ -1,4 +1,7 @@ #include "internal.h" +#if LM_OS != LM_OS_WIN +# include +#endif LM_API lm_bool_t LM_EnumModules(lm_bool_t(*callback)(lm_module_t mod, diff --git a/libmem/src/process.c b/libmem/src/process.c index 9861556f..025818ff 100644 --- a/libmem/src/process.c +++ b/libmem/src/process.c @@ -1,4 +1,8 @@ #include "internal.h" +#if LM_OS != LM_OS_WIN +# include +# include +#endif #if LM_OS == LM_OS_WIN LM_PRIVATE lm_bool_t diff --git a/libmem/src/symbol.cpp b/libmem/src/symbol.cpp index e607d8af..3568469a 100644 --- a/libmem/src/symbol.cpp +++ b/libmem/src/symbol.cpp @@ -29,6 +29,7 @@ _LM_EnumPeSyms(lm_size_t bits, } #else #include +#include using namespace LIEF::ELF; diff --git a/libmem/src/thread.c b/libmem/src/thread.c index 9cc8c541..3c0cd444 100644 --- a/libmem/src/thread.c +++ b/libmem/src/thread.c @@ -1,4 +1,7 @@ #include "internal.h" +#if LM_OS != LM_OS_WIN +# include +#endif LM_API lm_bool_t LM_EnumThreads(lm_bool_t(*callback)(lm_tid_t tid,