From: root Date: Tue, 31 May 2016 02:13:46 +0000 (-0400) Subject: Fix linker (hopefully) X-Git-Tag: stable-1~33 X-Git-Url: https://chaos.moe/g/?a=commitdiff_plain;h=feddde511d4d259d0749a2b91975730c3dc2a2ba;p=corbenik%2Fcorbenik.git Fix linker (hopefully) --- diff --git a/Makefile b/Makefile index d563546..8c3d8ee 100644 --- a/Makefile +++ b/Makefile @@ -20,16 +20,19 @@ dir_out := out REVISION := r$(shell git rev-list --count HEAD):$(shell git rev-parse HEAD | head -c8) ASFLAGS := -mlittle-endian -mcpu=arm946e-s -march=armv5te -CFLAGS := -MMD -MP -Wall -Wextra -Werror -Os $(ASFLAGS) -fno-builtin -std=c11 -DVERSION=\"$(REVISION)\" +CFLAGS := -MMD -MP -Wall -Wextra -Werror -fno-omit-frame-pointer -Os $(ASFLAGS) -fno-builtin -std=c11 -DVERSION=\"$(REVISION)\" FLAGS := dir_out=$(abspath $(dir_out)) --no-print-directory -LDFLAGS := -nostdlib -Wl,-z,defs -lgcc +LDFLAGS := -nostdlib -Wl,-z,defs -lgcc -Wl,-Map,$(dir_build)/link.map objects_cfw = $(patsubst $(dir_source)/%.s, $(dir_build)/%.o, \ $(patsubst $(dir_source)/%.c, $(dir_build)/%.o, \ $(call rwildcard, $(dir_source), *.s *.c))) .PHONY: all -all: host/langemu.conf a9lh modules external +all: a9lh modules external + +.PHONY: full +full: host/langemu.conf all .PHONY: modules modules: @@ -41,6 +44,8 @@ external: .PHONY: a9lh a9lh: $(dir_out)/arm9loaderhax.bin + echo "Generating symbol table" + ./host/symtab.sh > modules/template/src/symtab.h .PHONY: reformat reformat: @@ -102,7 +107,6 @@ $(dir_build)/firm/%.o: $(dir_source)/firm/%.s @mkdir -p "$(@D)" $(COMPILE.s) $(OUTPUT_OPTION) $< - $(dir_build)/patch/%.o: $(dir_source)/patch/%.c @mkdir -p "$(@D)" $(COMPILE.c) -Wno-unused-function $(OUTPUT_OPTION) $< diff --git a/copy.sh b/copy.sh index 10df3f2..ab6dce3 100644 --- a/copy.sh +++ b/copy.sh @@ -4,7 +4,7 @@ # You don't and shouldn't need to use it. mnt=/media/sd -dev=/dev/sdd +dev=/dev/sdb mnt=/mnt/ext1 diff --git a/host/symtab.sh b/host/symtab.sh new file mode 100755 index 0000000..35e185d --- /dev/null +++ b/host/symtab.sh @@ -0,0 +1,18 @@ +#!/bin/bash +echo "// This file is automatically generated. Don't edit it." +echo "#ifndef __SYMTAB_H" +echo "#define __SYMTAB_H" +grep ' 0x00000000........ ' build/link.map | \ + while read sym; do + declare -a dat + dat=($sym) + offs=${dat[0]} + name=${dat[1]} + + offs="$(echo "$offs" | sed 's|00000000||g')" + + if [ "$name" != "." ]; then + echo " #define ${name}_offset ((void*)${offs})" + fi +done +echo "#endif" diff --git a/linker.ld b/linker.ld index 51bd054..802a17d 100644 --- a/linker.ld +++ b/linker.ld @@ -1,19 +1,3 @@ -/* This memory map is mainly to assist in doing stuff in code. -MEMORY -{ - INSTRUCTION_TCM (rw) : ORIGIN = 0x00000000, LENGTH = 0x08000000 - ARM_INTERNAL (rw) : ORIGIN = 0x08000000, LENGTH = 0x00100000 - NEW_INTERNAL (rw) : ORIGIN = 0x08100000, LENGTH = 0x00080000 - IO_MEMORY (rw) : ORIGIN = 0x10000000, LENGTH = 0x08000000 - VRAM (rw) : ORIGIN = 0x18000000, LENGTH = 0x00600000 - DSP_MEMORY (rw) : ORIGIN = 0x1FF00000, LENGTH = 0x00080000 - AXI_WRAM (rw) : ORIGIN = 0x1FF80000, LENGTH = 0x00080000 - FCRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x08000000 - NEW_FCRAM (rwx) : ORIGIN = 0x28000000, LENGTH = 0x08000000 - DATA_TCM (rw) : ORIGIN = 0xFFF00000, LENGTH = 0x00004000 - BOOTROM (rw) : ORIGIN = 0xFFFF0000, LENGTH = 0x00010000 -} */ - ENTRY(_start) SECTIONS { diff --git a/modules/template/Makefile b/modules/template/Makefile index 972f9ee..6cebdc4 100644 --- a/modules/template/Makefile +++ b/modules/template/Makefile @@ -14,7 +14,7 @@ dir_build := build dir_out := out ASFLAGS := -mlittle-endian -mcpu=arm946e-s -march=armv5te -CFLAGS := -MMD -MP -Wall -Wextra -Werror -O0 $(ASFLAGS) -fno-builtin -std=c11 +CFLAGS := -MMD -MP -Wall -Wextra -Werror -Os -fno-omit-frame-pointer $(ASFLAGS) -fno-builtin -std=c11 FLAGS := dir_out=$(abspath $(dir_out)) --no-print-directory LDFLAGS := -nostdlib -Wl,-z,defs -lgcc diff --git a/modules/template/linker.ld b/modules/template/linker.ld index 0a7a3ad..b8eb07e 100644 --- a/modules/template/linker.ld +++ b/modules/template/linker.ld @@ -1,4 +1,4 @@ -ENTRY(_start) +ENTRY(main) SECTIONS { . = 0x24400000; diff --git a/modules/template/src/exported.h b/modules/template/src/exported.h index 495cf31..13e6f3a 100644 --- a/modules/template/src/exported.h +++ b/modules/template/src/exported.h @@ -1,33 +1,30 @@ #ifndef EXPORTED_H #define EXPORTED_H +#include "symtab.h" + #include "headers.h" #define stdout ((void*)0) #define stderr ((void*)2) -extern int strlen(const char *string); -extern int isprint(char c); -extern void memcpy(void *dest, const void *src, size_t size); -extern void memmove(void *dest, const void *src, size_t size); -extern void memset(void *dest, const int filler, size_t size); -extern int memcmp(const void *buf1, const void *buf2, const size_t size); -extern void strncpy(void *dest, const void *src, const size_t size); -extern int strncmp(const void *buf1, const void *buf2, const size_t size); -extern int atoi(const char *str); -extern uint8_t* memfind (uint8_t *string, uint32_t stringlen, uint8_t *pat, uint32_t patlen); - -extern void putc(void* buf, const int c); -extern void puts(void* buf, const char *string); -extern void fprintf(void* channel, const char* format, ...); - -extern firm_h* get_firm(); -extern exefs_h* get_firm_proc9_exefs(); - -extern firm_h* get_agb(); -extern exefs_h* get_agb_proc9_exefs(); - -extern firm_h* get_twl(); -extern exefs_h* get_twl_proc9_exefs(); +int (*strlen)(const char *string) = strlen_offset; +int (*isprint)(char c) = isprint_offset; +void (*memcpy)(void *dest, const void *src, size_t size) = memcpy_offset; +void (*memmove)(void *dest, const void *src, size_t size) = memmove_offset; +void (*memset)(void *dest, const int filler, size_t size) = memset_offset; +int (*memcmp)(const void *buf1, const void *buf2, const size_t size) = memcmp_offset; +void (*strncpy)(void *dest, const void *src, const size_t size) = strncpy_offset; +int (*strncmp)(const void *buf1, const void *buf2, const size_t size) = strncmp_offset; +int (*atoi)(const char *str) = atoi_offset; +uint8_t* (*memfind)(uint8_t *string, uint32_t stringlen, uint8_t *pat, uint32_t patlen) = memfind_offset; + +void (*putc)(void* buf, const int c) = putc_offset; +void (*puts)(void* buf, const char *string) = puts_offset; +void (*fprintf)(void* channel, const char* format, ...) = fprintf_offset; + +exefs_h* (*get_firm_proc9_exefs)() = get_firm_proc9_exefs_offset; +exefs_h* (*get_agb_proc9_exefs)() = get_agb_proc9_exefs_offset; +exefs_h* (*get_twl_proc9_exefs)() = get_twl_proc9_exefs_offset; #endif diff --git a/modules/template/src/main.c b/modules/template/src/main.c index a790f75..75ec056 100644 --- a/modules/template/src/main.c +++ b/modules/template/src/main.c @@ -3,8 +3,7 @@ #include "exported.h" int main() { - // Your patch goes here. - fprintf(stderr, "Hi, I'm a patch!\n"); + fprintf(stderr, "Hi!\n"); return 0; } diff --git a/modules/template/src/start.s b/modules/template/src/start.s deleted file mode 100644 index 5898ae6..0000000 --- a/modules/template/src/start.s +++ /dev/null @@ -1,40 +0,0 @@ -.section .text.start -.align 4 -.global _start -_start: - b main - -.macro stub name - .global \name - \name : - ldr pc, [pc, #-4] // Load the data after this to the PC. return will be before this call. - bx lr // Fall through in case of error. -.endm - -// memory.c -stub strlen -stub isprint -stub memcpy -stub memmove -stub memset -stub memcmp -stub strncpy -stub strncmp -stub atoi -stub memfind - -// draw.c -stub putc -stub puts -stub fprintf - -// Wrappers to get shit. - -// Get NATIVE_FIRM process9 -stub get_firm_proc9_exefs - -// Get AGB_FIRM process9 exefs -stub get_agb_proc9_exefs - -// Get TWL_FIRM process9 exefs -stub get_twl_proc9_exefs diff --git a/modules/template/src/symtab.h b/modules/template/src/symtab.h new file mode 100644 index 0000000..49bb47e --- /dev/null +++ b/modules/template/src/symtab.h @@ -0,0 +1,195 @@ +// This file is automatically generated. Don't edit it. +#ifndef __SYMTAB_H +#define __SYMTAB_H + #define START_SECTION_offset ((void*)0x23f00000) + #define _start_offset ((void*)0x23f00000) + #define START_SECTION_END_offset ((void*)0x23f000e0) + #define TEXT_SECTION_offset ((void*)0x23f000e0) + #define getMMCDevice_offset ((void*)0x23f001dc) + #define geterror_offset ((void*)0x23f00204) + #define inittarget_offset ((void*)0x23f0021c) + #define sdmmc_send_command_offset ((void*)0x23f00274) + #define sdmmc_sdcard_writesectors_offset ((void*)0x23f004bc) + #define sdmmc_sdcard_readsectors_offset ((void*)0x23f00538) + #define sdmmc_nand_readsectors_offset ((void*)0x23f005b4) + #define sdmmc_nand_writesectors_offset ((void*)0x23f0063c) + #define InitSD_offset ((void*)0x23f006c4) + #define Nand_Init_offset ((void*)0x23f00848) + #define SD_Init_offset ((void*)0x23f00a04) + #define sdmmc_sdcard_init_offset ((void*)0x23f00c28) + #define sdmmc_get_cid_offset ((void*)0x23f00c48) + #define ff_convert_offset ((void*)0x23f014b0) + #define ff_wtoupper_offset ((void*)0x23f01698) + #define clust2sect_offset ((void*)0x23f016bc) + #define get_fat_offset ((void*)0x23f016e8) + #define put_fat_offset ((void*)0x23f01924) + #define f_mount_offset ((void*)0x23f02a24) + #define f_open_offset ((void*)0x23f02ab4) + #define f_read_offset ((void*)0x23f02cc4) + #define f_write_offset ((void*)0x23f02ee8) + #define f_sync_offset ((void*)0x23f0316c) + #define f_close_offset ((void*)0x23f03270) + #define f_chdir_offset ((void*)0x23f0329c) + #define f_lseek_offset ((void*)0x23f03338) + #define f_opendir_offset ((void*)0x23f03560) + #define f_closedir_offset ((void*)0x23f03644) + #define f_readdir_offset ((void*)0x23f03660) + #define f_stat_offset ((void*)0x23f036fc) + #define f_getfree_offset ((void*)0x23f03780) + #define f_truncate_offset ((void*)0x23f038e8) + #define f_unlink_offset ((void*)0x23f03a00) + #define f_mkdir_offset ((void*)0x23f03b38) + #define f_chmod_offset ((void*)0x23f03d70) + #define f_rename_offset ((void*)0x23f03e1c) + #define f_utime_offset ((void*)0x23f03fcc) + #define waitcycles_offset ((void*)0x23f04084) + #define disk_status_offset ((void*)0x23f040a4) + #define disk_initialize_offset ((void*)0x23f040b4) + #define disk_read_offset ((void*)0x23f040d0) + #define disk_write_offset ((void*)0x23f040f8) + #define disk_ioctl_offset ((void*)0x23f04120) + #define patch_example_offset ((void*)0x23f04180) + #define patch_signatures_offset ((void*)0x23f041a0) + #define getSvcAndExceptions_offset ((void*)0x23f042d4) + #define patch_services_offset ((void*)0x23f04360) + #define patch_aadowngrade_offset ((void*)0x23f04534) + #define patch_modules_offset ((void*)0x23f045b0) + #define patch_firmprot_offset ((void*)0x23f0476c) + #define wait_offset ((void*)0x23f0486c) + #define patch_firm_all_offset ((void*)0x23f048d4) + #define clear_disp_offset ((void*)0x23f04a08) + #define clear_text_offset ((void*)0x23f04a80) + #define clear_screen_offset ((void*)0x23f04b34) + #define set_cursor_offset ((void*)0x23f04b54) + #define clear_screens_offset ((void*)0x23f04b8c) + #define draw_character_offset ((void*)0x23f04bb4) + #define shut_up_offset ((void*)0x23f04cb4) + #define putc_offset ((void*)0x23f04cd8) + #define puts_offset ((void*)0x23f04f10) + #define put_int64_offset ((void*)0x23f04f68) + #define put_uint64_offset ((void*)0x23f0507c) + #define put_hexdump_offset ((void*)0x23f05158) + #define put_uint_offset ((void*)0x23f051ac) + #define put_int_offset ((void*)0x23f051d0) + #define fflush_offset ((void*)0x23f051f4) + #define vfprintf_offset ((void*)0x23f05368) + #define fprintf_offset ((void*)0x23f0560c) + #define strlen_offset ((void*)0x23f05664) + #define isprint_offset ((void*)0x23f0568c) + #define memcpy_offset ((void*)0x23f056a8) + #define memmove_offset ((void*)0x23f0573c) + #define memset_offset ((void*)0x23f057e0) + #define memcmp_offset ((void*)0x23f05840) + #define strncpy_offset ((void*)0x23f0587c) + #define strncmp_offset ((void*)0x23f058b4) + #define atoi_offset ((void*)0x23f05928) + #define memfind_offset ((void*)0x23f05958) + #define fmount_offset ((void*)0x23f05a10) + #define fopen_offset ((void*)0x23f05a80) + #define fclose_offset ((void*)0x23f05b54) + #define fumount_offset ((void*)0x23f05b80) + #define fseek_offset ((void*)0x23f05bd8) + #define ftell_offset ((void*)0x23f05c54) + #define feof_offset ((void*)0x23f05c7c) + #define fsize_offset ((void*)0x23f05ccc) + #define fwrite_offset ((void*)0x23f05cf4) + #define fread_offset ((void*)0x23f05d4c) + #define write_file_offset ((void*)0x23f05da4) + #define read_file_offset ((void*)0x23f05dfc) + #define regenerate_config_offset ((void*)0x23f05e54) + #define load_config_offset ((void*)0x23f05f3c) + #define save_config_offset ((void*)0x23f06074) + #define get_firm_proc9_exefs_offset ((void*)0x23f06100) + #define get_twl_proc9_exefs_offset ((void*)0x23f06118) + #define get_agb_proc9_exefs_offset ((void*)0x23f06130) + #define execp_offset ((void*)0x23f06148) + #define wait_key_offset ((void*)0x23f0623c) + #define header_offset ((void*)0x23f062f4) + #define menu_patches_offset ((void*)0x23f06320) + #define menu_options_offset ((void*)0x23f06330) + #define menu_info_offset ((void*)0x23f06790) + #define menu_help_offset ((void*)0x23f06864) + #define menu_reset_offset ((void*)0x23f068cc) + #define menu_poweroff_offset ((void*)0x23f068fc) + #define menu_main_offset ((void*)0x23f0692c) + #define menu_handler_offset ((void*)0x23f06af0) + #define arm11_preboot_halt_offset ((void*)0x23f06ba0) + #define slot0x11key96_init_offset ((void*)0x23f06bdc) + #define decrypt_firm_title_offset ((void*)0x23f06c50) + #define decrypt_arm9bin_offset ((void*)0x23f06db8) + #define decrypt_firm_offset ((void*)0x23f06f28) + #define load_firm_offset ((void*)0x23f06fac) + #define boot_firm_offset ((void*)0x23f0723c) + #define find_proc9_offset ((void*)0x23f073cc) + #define load_firms_offset ((void*)0x23f074b0) + #define boot_cfw_offset ((void*)0x23f07660) + #define aes_setkey_offset ((void*)0x23f076a8) + #define aes_use_keyslot_offset ((void*)0x23f07714) + #define aes_setiv_offset ((void*)0x23f0773c) + #define aes_advctr_offset ((void*)0x23f077a8) + #define aes_change_ctrmode_offset ((void*)0x23f0786c) + #define aes_batch_offset ((void*)0x23f078e0) + #define aes_offset ((void*)0x23f07990) + #define ncch_getctr_offset ((void*)0x23f07aa4) + #define sha_wait_idle_offset ((void*)0x23f07b64) + #define sha_offset ((void*)0x23f07b84) + #define rsa_wait_idle_offset ((void*)0x23f07c78) + #define rsa_use_keyslot_offset ((void*)0x23f07c98) + #define rsa_setkey_offset ((void*)0x23f07cbc) + #define rsa_iskeyset_offset ((void*)0x23f07d64) + #define rsa_offset ((void*)0x23f07d84) + #define rsa_verify_offset ((void*)0x23f07e24) + #define get_firm_info_offset ((void*)0x23f07e88) + #define i2cGetDeviceBusId_offset ((void*)0x23f07ed8) + #define i2cGetDeviceRegAddr_offset ((void*)0x23f07ef0) + #define i2cGetDataReg_offset ((void*)0x23f07f0c) + #define i2cGetCntReg_offset ((void*)0x23f07f28) + #define i2cWaitBusy_offset ((void*)0x23f07f44) + #define i2cGetResult_offset ((void*)0x23f07f6c) + #define i2cStop_offset ((void*)0x23f07f9c) + #define i2cSelectDevice_offset ((void*)0x23f07fd4) + #define i2cSelectRegister_offset ((void*)0x23f08014) + #define i2cReadRegister_offset ((void*)0x23f08054) + #define i2cReadRegisterBuffer_offset ((void*)0x23f08118) + #define i2cWriteRegister_offset ((void*)0x23f08250) + #define __udivsi3_offset ((void*)0x23f08308) + #define __aeabi_uidiv_offset ((void*)0x23f08308) + #define __aeabi_uidivmod_offset ((void*)0x23f083fc) + #define __aeabi_ldiv0_offset ((void*)0x23f0841c) + #define __aeabi_idiv0_offset ((void*)0x23f0841c) + #define __aeabi_ldivmod_offset ((void*)0x23f08420) + #define __aeabi_uldivmod_offset ((void*)0x23f084f4) + #define __udivmoddi4_offset ((void*)0x23f08530) + #define __clzdi2_offset ((void*)0x23f0865c) + #define __clzsi2_offset ((void*)0x23f08684) + #define TEXT_SECTION_END_offset ((void*)0x23f086cc) + #define DATA_SECTION_offset ((void*)0x23f086cc) + #define main_offset ((void*)0x23f086cc) + #define color_top_offset ((void*)0x23f08764) + #define color_bottom_offset ((void*)0x23f08765) + #define firm_loc_offset ((void*)0x23f08e64) + #define twl_firm_loc_offset ((void*)0x23f08e70) + #define agb_firm_loc_offset ((void*)0x23f08e78) + #define fcram_temp_offset ((void*)0x23f08e7c) + #define firm_signatures_offset ((void*)0x23f08e80) + #define DATA_SECTION_END_offset ((void*)0x23f09150) + #define BSS_SECTION_offset ((void*)0x23f09150) + #define handelSD_offset ((void*)0x23f09150) + #define handelNAND_offset ((void*)0x23f0918c) + #define memory_header_t_offset ((void*)0x23f091d0) + #define freeSpace_offset ((void*)0x23f091d8) + #define kill_output_offset ((void*)0x23f0a708) + #define conf_handle_offset ((void*)0x23f13580) + #define config_offset ((void*)0x23f13584) + #define doing_autoboot_offset ((void*)0x23f13e90) + #define firm_loaded_offset ((void*)0x23f13e98) + #define twl_firm_p9_exefs_offset ((void*)0x23f13e9c) + #define firm_p9_exefs_offset ((void*)0x23f13ea0) + #define agb_firm_proc9_offset ((void*)0x23f13ea4) + #define twl_firm_proc9_offset ((void*)0x23f13ed4) + #define firm_proc9_offset ((void*)0x23f13f04) + #define agb_firm_p9_exefs_offset ((void*)0x23f13f34) + #define BSS_SECTION_END_offset ((void*)0x23f13f38) + #define RODATA_SECTION_offset ((void*)0x23f13f38) + #define RODATA_SECTION_END_offset ((void*)0x23f148f8) +#endif diff --git a/source/linker.c b/source/linker.c index 219c435..46a7dd7 100644 --- a/source/linker.c +++ b/source/linker.c @@ -57,38 +57,6 @@ execp(char* path) fclose(f); - fprintf(stderr, "[s]"); - - uint32_t* link_table = (uint32_t*)(FCRAM_PATCHBIN_EXEC_LOC + 4); - - fprintf(stderr, "[r]"); - - // 0 - magic - - // memory.c - link_table[2] = (uint32_t)strlen; - link_table[4] = (uint32_t)isprint; - link_table[6] = (uint32_t)memcpy; - link_table[8] = (uint32_t)memmove; - link_table[10] = (uint32_t)memset; - link_table[12] = (uint32_t)memcmp; - link_table[14] = (uint32_t)strncpy; - link_table[16] = (uint32_t)strncmp; - link_table[18] = (uint32_t)atoi; - link_table[20] = (uint32_t)memfind; - - // draw.c - link_table[22] = (uint32_t)putc; - link_table[24] = (uint32_t)puts; - link_table[26] = (uint32_t)fprintf; - - // Get functions - link_table[28] = (uint32_t)get_firm_proc9_exefs; - - link_table[30] = (uint32_t)get_agb_proc9_exefs; - - link_table[32] = (uint32_t)get_twl_proc9_exefs; - fprintf(stderr, "[b]\n"); int (*patch_loc)() = (void*)FCRAM_PATCHBIN_EXEC_LOC; diff --git a/source/patch/aadowngrade.c b/source/patch/aadowngrade.c index bdd62e2..631682b 100644 --- a/source/patch/aadowngrade.c +++ b/source/patch/aadowngrade.c @@ -4,6 +4,8 @@ PATCH(aadowngrade) { + exefs_h* firm_p9_exefs = get_firm_proc9_exefs(); + uint8_t* firm_mem = (uint8_t*)firm_p9_exefs + sizeof(exefs_h) + firm_p9_exefs->fileHeaders[0].offset; uint32_t size = firm_p9_exefs->fileHeaders[0].size; diff --git a/source/patch/patch_file.h b/source/patch/patch_file.h index c6c88a6..81c1fa8 100644 --- a/source/patch/patch_file.h +++ b/source/patch/patch_file.h @@ -15,13 +15,17 @@ #include "../config.h" #include "../common.h" +exefs_h* get_firm_proc9_exefs(); +exefs_h* get_twl_proc9_exefs(); +exefs_h* get_agb_proc9_exefs(); + #define PATCH(name) int patch_##name() #elif MODULE // Build patch as loadable executable. // TODO - Includes. -#define PATCH(name) int main() +#define PATCH(name) int patch() #else #define PATCH(name) (void) diff --git a/source/patch/prot.c b/source/patch/prot.c index 376bc42..869bb5e 100644 --- a/source/patch/prot.c +++ b/source/patch/prot.c @@ -4,6 +4,8 @@ PATCH(firmprot) { + exefs_h* firm_p9_exefs = get_firm_proc9_exefs(); + uint8_t* firm_mem = (uint8_t*)firm_p9_exefs + sizeof(exefs_h) + firm_p9_exefs->fileHeaders[0].offset; uint32_t size = firm_p9_exefs->fileHeaders[0].size; diff --git a/source/patch/sig.c b/source/patch/sig.c index 376d906..1f85495 100644 --- a/source/patch/sig.c +++ b/source/patch/sig.c @@ -4,6 +4,8 @@ PATCH(signatures) { + exefs_h* firm_p9_exefs = get_firm_proc9_exefs(); + // Look for signature checks uint8_t pat1[] = { 0xC0, 0x1C, 0x76, 0xE7 }; diff --git a/source/patch/svc.c b/source/patch/svc.c index a77ed88..912675b 100644 --- a/source/patch/svc.c +++ b/source/patch/svc.c @@ -43,8 +43,8 @@ PATCH(services) char* at = str + (strlen(str) - 6); for (uint32_t i = 0; i <= 0xff; i++) { // Get string for svc. - at[0] = ("0123456789abcdef")[( - (i >> 4) & 0xf)]; // This is just hexdump. Nothing complicated. + at[0] = ("0123456789abcdef")[((i >> 4) & 0xf)]; + // This is just hexdump. Nothing complicated. at[1] = ("0123456789abcdef")[(i & 0xf)]; FILE* data = fopen(str, "r"); diff --git a/source/patcher.c b/source/patcher.c index fb55a2c..713500f 100644 --- a/source/patcher.c +++ b/source/patcher.c @@ -32,7 +32,7 @@ int patch_firm_all() { // FIXME - Linker is bork at the moment. - // execp(PATH_PATCHES "/example.vco"); + execp(PATH_PATCHES "/example.vco"); // wait();