diff --git a/emummc/source/main.c b/emummc/source/main.c index e93d3761d..8ec63f8d4 100644 --- a/emummc/source/main.c +++ b/emummc/source/main.c @@ -33,22 +33,22 @@ void __init(); void __initheap(void); void setup_hooks(void); -void setup_nintendo_paths(void); void __libc_init_array(void); +void setup_nintendo_paths(void); void hook_function(uintptr_t source, uintptr_t target); void *__stack_top; uintptr_t text_base; size_t fs_code_size; +u8 *fs_rw_mapping = NULL; +Handle self_proc_handle = 0; char inner_heap[INNER_HEAP_SIZE]; size_t inner_heap_size = INNER_HEAP_SIZE; -Handle self_proc_handle = 0; -u8 *fs_rw_mapping = NULL; + extern char _start; extern char __argdata__; // Nintendo Path -// TODO static char nintendo_path[0x80] = "Nintendo"; // 1.0.0 requires special path handling because it has separate album and contents paths. @@ -63,6 +63,7 @@ static const fs_offsets_t *fs_offsets; // Defined by linkerscript #define INJECTED_SIZE ((uintptr_t)&__argdata__ - (uintptr_t)&_start) #define INJECT_OFFSET(type, offset) (type)(text_base + INJECTED_SIZE + offset) +#define FS_CODE_BASE INJECT_OFFSET(uintptr_t, 0) #define GENERATE_ADD(register, register_target, value) (0x91000000 | value << 10 | register << 5 | register_target) #define GENERATE_ADRP(register, page_addr) (0x90000000 | ((((page_addr) >> 12) & 0x3) << 29) | ((((page_addr) >> 12) & 0x1FFFFC) << 3) | ((register) & 0x1F)) @@ -230,7 +231,7 @@ static void _map_fs_rw(void) { do { fs_rw_mapping = (u8 *)(smcGenerateRandomU64() & 0xFFFFFF000ull); - rc = svcMapProcessMemory(fs_rw_mapping, self_proc_handle, INJECT_OFFSET(u64, 0), fs_code_size); + rc = svcMapProcessMemory(fs_rw_mapping, self_proc_handle, FS_CODE_BASE, fs_code_size); } while (rc == 0xDC01 || rc == 0xD401); if (rc != 0) @@ -240,7 +241,7 @@ static void _map_fs_rw(void) { } static void _unmap_fs_rw(void) { - Result rc = svcUnmapProcessMemory(fs_rw_mapping, self_proc_handle, INJECT_OFFSET(u64, 0), fs_code_size); + Result rc = svcUnmapProcessMemory(fs_rw_mapping, self_proc_handle, FS_CODE_BASE, fs_code_size); if (rc != 0) { fatal_abort(Fatal_BadResult); @@ -250,7 +251,7 @@ static void _unmap_fs_rw(void) { } static void _write32(uintptr_t source, u32 value) { - *((u32 *)(fs_rw_mapping + (source - INJECT_OFFSET(u64, 0)))) = value; + *((u32 *)(fs_rw_mapping + (source - FS_CODE_BASE))) = value; } void hook_function(uintptr_t source, uintptr_t target) @@ -412,7 +413,7 @@ void __init() text_base = meminfo.addr; // Get code size - svcQueryMemory(&meminfo, &pageinfo, INJECT_OFFSET(u64, 0)); + svcQueryMemory(&meminfo, &pageinfo, FS_CODE_BASE); fs_code_size = meminfo.size; load_emummc_ctx(); diff --git a/emummc/source/utils/types.h b/emummc/source/utils/types.h index 5af01d48e..ce4db820c 100644 --- a/emummc/source/utils/types.h +++ b/emummc/source/utils/types.h @@ -31,26 +31,26 @@ #define BIT(n) (1U<<(n)) #endif -typedef signed char s8; -typedef short s16; -typedef short SHORT; -typedef int s32; -typedef int INT; -typedef long LONG; -typedef long long int s64; -typedef unsigned char u8; -typedef unsigned char BYTE; -typedef unsigned short u16; -typedef unsigned short WORD; -typedef unsigned short WCHAR; -typedef unsigned int u32; -typedef unsigned int UINT; -typedef unsigned long DWORD; -typedef unsigned long long QWORD; -typedef unsigned long long int u64; -typedef volatile unsigned char vu8; -typedef volatile unsigned short vu16; -typedef volatile unsigned int vu32; +typedef int8_t s8; +typedef int16_t s16; +typedef int16_t SHORT; +typedef int32_t s32; +typedef int32_t INT; +typedef int64_t LONG; +typedef int64_t s64; +typedef uint8_t u8; +typedef uint8_t BYTE; +typedef uint16_t u16; +typedef uint16_t WORD; +typedef uint16_t WCHAR; +typedef uint32_t u32; +typedef uint32_t UINT; +typedef uint32_t DWORD; +typedef uint64_t QWORD; +typedef uint64_t u64; +typedef volatile uint8_t vu8; +typedef volatile uint16_t vu16; +typedef volatile uint32_t vu32; typedef u32 Handle; ///< Kernel object handle. typedef u32 Result; ///< Function error code result type. @@ -58,7 +58,6 @@ typedef u32 Result; ///< Function error code result type. #define INVALID_HANDLE ((Handle) 0) #define CUR_PROCESS_HANDLE ((Handle) 0xFFFF8001) - #ifndef __cplusplus typedef int bool; #define true 1