mirror of
https://github.com/switchbrew/nx-hbloader.git
synced 2025-06-21 13:32:40 +02:00
Add debugger svcBreak pre/post NRO load/unload hooks
This commit is contained in:
parent
5ce1d33b7d
commit
c69c6a9e0d
@ -288,6 +288,8 @@ void loadNro(void)
|
|||||||
rw_size = header->segments[2].size + header->bss_size;
|
rw_size = header->segments[2].size + header->bss_size;
|
||||||
rw_size = (rw_size+0xFFF) & ~0xFFF;
|
rw_size = (rw_size+0xFFF) & ~0xFFF;
|
||||||
|
|
||||||
|
svcBreak(BreakReason_NotificationOnlyFlag | BreakReason_PreUnloadDll, g_nroAddr, g_nroSize);
|
||||||
|
|
||||||
// .text
|
// .text
|
||||||
rc = svcUnmapProcessCodeMemory(
|
rc = svcUnmapProcessCodeMemory(
|
||||||
g_procHandle, g_nroAddr + header->segments[0].file_off, ((u64) g_heapAddr) + header->segments[0].file_off, header->segments[0].size);
|
g_procHandle, g_nroAddr + header->segments[0].file_off, ((u64) g_heapAddr) + header->segments[0].file_off, header->segments[0].size);
|
||||||
@ -309,6 +311,8 @@ void loadNro(void)
|
|||||||
if (R_FAILED(rc))
|
if (R_FAILED(rc))
|
||||||
fatalThrow(MAKERESULT(Module_HomebrewLoader, 26));
|
fatalThrow(MAKERESULT(Module_HomebrewLoader, 26));
|
||||||
|
|
||||||
|
svcBreak(BreakReason_NotificationOnlyFlag | BreakReason_PostUnloadDll, g_nroAddr, g_nroSize);
|
||||||
|
|
||||||
g_nroAddr = g_nroSize = 0;
|
g_nroAddr = g_nroSize = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,6 +324,8 @@ void loadNro(void)
|
|||||||
|
|
||||||
memcpy(g_argv, g_nextArgv, sizeof g_argv);
|
memcpy(g_argv, g_nextArgv, sizeof g_argv);
|
||||||
|
|
||||||
|
svcBreak(BreakReason_NotificationOnlyFlag | BreakReason_PreLoadDll, (uintptr_t)g_argv, sizeof(g_argv));
|
||||||
|
|
||||||
uint8_t *nrobuf = (uint8_t*) g_heapAddr;
|
uint8_t *nrobuf = (uint8_t*) g_heapAddr;
|
||||||
|
|
||||||
NroStart* start = (NroStart*) (nrobuf + 0);
|
NroStart* start = (NroStart*) (nrobuf + 0);
|
||||||
@ -463,6 +469,8 @@ void loadNro(void)
|
|||||||
g_nroAddr = (u64)map_addr;
|
g_nroAddr = (u64)map_addr;
|
||||||
g_nroSize = nro_size;
|
g_nroSize = nro_size;
|
||||||
|
|
||||||
|
svcBreak(BreakReason_NotificationOnlyFlag | BreakReason_PostLoadDll, g_nroAddr, g_nroSize);
|
||||||
|
|
||||||
memset(__stack_top - STACK_SIZE, 0, STACK_SIZE);
|
memset(__stack_top - STACK_SIZE, 0, STACK_SIZE);
|
||||||
|
|
||||||
extern NORETURN void nroEntrypointTrampoline(u64 entries_ptr, u64 handle, u64 entrypoint);
|
extern NORETURN void nroEntrypointTrampoline(u64 entries_ptr, u64 handle, u64 entrypoint);
|
||||||
|
Loading…
Reference in New Issue
Block a user