mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-12-22 20:31:14 +00:00
emummc: cleanup pr per review
This commit is contained in:
parent
b966345b25
commit
d9c9083574
2 changed files with 29 additions and 29 deletions
|
@ -33,22 +33,22 @@
|
||||||
void __init();
|
void __init();
|
||||||
void __initheap(void);
|
void __initheap(void);
|
||||||
void setup_hooks(void);
|
void setup_hooks(void);
|
||||||
void setup_nintendo_paths(void);
|
|
||||||
void __libc_init_array(void);
|
void __libc_init_array(void);
|
||||||
|
void setup_nintendo_paths(void);
|
||||||
void hook_function(uintptr_t source, uintptr_t target);
|
void hook_function(uintptr_t source, uintptr_t target);
|
||||||
|
|
||||||
void *__stack_top;
|
void *__stack_top;
|
||||||
uintptr_t text_base;
|
uintptr_t text_base;
|
||||||
size_t fs_code_size;
|
size_t fs_code_size;
|
||||||
|
u8 *fs_rw_mapping = NULL;
|
||||||
|
Handle self_proc_handle = 0;
|
||||||
char inner_heap[INNER_HEAP_SIZE];
|
char inner_heap[INNER_HEAP_SIZE];
|
||||||
size_t inner_heap_size = 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 _start;
|
||||||
extern char __argdata__;
|
extern char __argdata__;
|
||||||
|
|
||||||
// Nintendo Path
|
// Nintendo Path
|
||||||
// TODO
|
|
||||||
static char nintendo_path[0x80] = "Nintendo";
|
static char nintendo_path[0x80] = "Nintendo";
|
||||||
|
|
||||||
// 1.0.0 requires special path handling because it has separate album and contents paths.
|
// 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
|
// Defined by linkerscript
|
||||||
#define INJECTED_SIZE ((uintptr_t)&__argdata__ - (uintptr_t)&_start)
|
#define INJECTED_SIZE ((uintptr_t)&__argdata__ - (uintptr_t)&_start)
|
||||||
#define INJECT_OFFSET(type, offset) (type)(text_base + INJECTED_SIZE + offset)
|
#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_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))
|
#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 {
|
do {
|
||||||
fs_rw_mapping = (u8 *)(smcGenerateRandomU64() & 0xFFFFFF000ull);
|
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);
|
} while (rc == 0xDC01 || rc == 0xD401);
|
||||||
|
|
||||||
if (rc != 0)
|
if (rc != 0)
|
||||||
|
@ -240,7 +241,7 @@ static void _map_fs_rw(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _unmap_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)
|
if (rc != 0)
|
||||||
{
|
{
|
||||||
fatal_abort(Fatal_BadResult);
|
fatal_abort(Fatal_BadResult);
|
||||||
|
@ -250,7 +251,7 @@ static void _unmap_fs_rw(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _write32(uintptr_t source, u32 value) {
|
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)
|
void hook_function(uintptr_t source, uintptr_t target)
|
||||||
|
@ -412,7 +413,7 @@ void __init()
|
||||||
text_base = meminfo.addr;
|
text_base = meminfo.addr;
|
||||||
|
|
||||||
// Get code size
|
// Get code size
|
||||||
svcQueryMemory(&meminfo, &pageinfo, INJECT_OFFSET(u64, 0));
|
svcQueryMemory(&meminfo, &pageinfo, FS_CODE_BASE);
|
||||||
fs_code_size = meminfo.size;
|
fs_code_size = meminfo.size;
|
||||||
|
|
||||||
load_emummc_ctx();
|
load_emummc_ctx();
|
||||||
|
|
|
@ -31,26 +31,26 @@
|
||||||
#define BIT(n) (1U<<(n))
|
#define BIT(n) (1U<<(n))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef signed char s8;
|
typedef int8_t s8;
|
||||||
typedef short s16;
|
typedef int16_t s16;
|
||||||
typedef short SHORT;
|
typedef int16_t SHORT;
|
||||||
typedef int s32;
|
typedef int32_t s32;
|
||||||
typedef int INT;
|
typedef int32_t INT;
|
||||||
typedef long LONG;
|
typedef int64_t LONG;
|
||||||
typedef long long int s64;
|
typedef int64_t s64;
|
||||||
typedef unsigned char u8;
|
typedef uint8_t u8;
|
||||||
typedef unsigned char BYTE;
|
typedef uint8_t BYTE;
|
||||||
typedef unsigned short u16;
|
typedef uint16_t u16;
|
||||||
typedef unsigned short WORD;
|
typedef uint16_t WORD;
|
||||||
typedef unsigned short WCHAR;
|
typedef uint16_t WCHAR;
|
||||||
typedef unsigned int u32;
|
typedef uint32_t u32;
|
||||||
typedef unsigned int UINT;
|
typedef uint32_t UINT;
|
||||||
typedef unsigned long DWORD;
|
typedef uint32_t DWORD;
|
||||||
typedef unsigned long long QWORD;
|
typedef uint64_t QWORD;
|
||||||
typedef unsigned long long int u64;
|
typedef uint64_t u64;
|
||||||
typedef volatile unsigned char vu8;
|
typedef volatile uint8_t vu8;
|
||||||
typedef volatile unsigned short vu16;
|
typedef volatile uint16_t vu16;
|
||||||
typedef volatile unsigned int vu32;
|
typedef volatile uint32_t vu32;
|
||||||
|
|
||||||
typedef u32 Handle; ///< Kernel object handle.
|
typedef u32 Handle; ///< Kernel object handle.
|
||||||
typedef u32 Result; ///< Function error code result type.
|
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 INVALID_HANDLE ((Handle) 0)
|
||||||
#define CUR_PROCESS_HANDLE ((Handle) 0xFFFF8001)
|
#define CUR_PROCESS_HANDLE ((Handle) 0xFFFF8001)
|
||||||
|
|
||||||
|
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
typedef int bool;
|
typedef int bool;
|
||||||
#define true 1
|
#define true 1
|
||||||
|
|
Loading…
Reference in a new issue