diff options
| author | Crementif <26669564+Crementif@users.noreply.github.com> | 2026-05-21 23:27:58 +0200 |
|---|---|---|
| committer | Crementif <26669564+Crementif@users.noreply.github.com> | 2026-05-22 00:52:12 +0200 |
| commit | f78b28db5b3d1a9387bd18b1f2efe15b6d09dcb4 (patch) | |
| tree | 47370fa6044f5dd138f6a8344745ed8070968b9e /src/wiiu/cafe_loader.h | |
| parent | 283dd15c854eaf1ae8b967305050775183f30754 (diff) | |
Add RPX/RPL relocation support and improve overall accuracy
Diffstat (limited to 'src/wiiu/cafe_loader.h')
| -rw-r--r-- | src/wiiu/cafe_loader.h | 48 |
1 files changed, 41 insertions, 7 deletions
diff --git a/src/wiiu/cafe_loader.h b/src/wiiu/cafe_loader.h index dbfdddb..b754fe6 100644 --- a/src/wiiu/cafe_loader.h +++ b/src/wiiu/cafe_loader.h @@ -3,22 +3,46 @@ #include "elf_reader.h" #include "cafe.h" +#include <map> +#include <string> #include <vector> class cafe_loader { elf_reader<elf32> *m_elf; - uint32 m_relocAddr; - - ea_t m_externStart; - ea_t m_externEnd; struct import { - ea_t addr; - ea_t orig; - const char *name; + uint32 symbol_index; + ea_t table_ea; + ea_t thunk_ea; + std::string module; + std::string name; + int32 tls_module_index; + bool is_function; + bool is_tls; }; std::vector<import> m_imports; + std::map<ea_t, ea_t> m_internalTrampolines; + std::vector<int> m_symbol_imports; + + uint32 m_sdaBase; + uint32 m_sda2Base; + uint32 m_textSize; + uint32 m_trampAdjust; + int32 m_tlsModuleIndex; + bool m_haveFileInfo; + bool m_haveTextRegion; + bool m_isRpx; + ea_t m_textAllocBase; + ea_t m_textAllocEnd; + ea_t m_textLoadStart; + ea_t m_textLoadEnd; + ea_t m_importThunkStart; + ea_t m_importThunkEnd; + ea_t m_preTrampStart; + ea_t m_preTrampCursor; + ea_t m_postTrampCursor; + ea_t m_postTrampEnd; public: cafe_loader(elf_reader<elf32> *elf); @@ -37,6 +61,16 @@ private: uchar align, bool load); + void collectFileInfo(); + void collectImports(); + void collectImportThunks(); + void createTextTrampolineSegments(); + bool isImportSection(uint16 section_index) const; + ea_t ensureImportThunk(size_t symbol_index, ea_t reloc_ea); + ea_t resolveSymbolValue(size_t symbol_index) const; + ea_t createRel24Trampoline(ea_t target); + int32 resolveTlsModuleIndex(size_t symbol_index) const; + void applyRelocations(); void processImports(); |
