diff options
| author | aerosoul94 <aerosoul94@hotmail.com> | 2017-04-09 00:35:32 -0500 |
|---|---|---|
| committer | aerosoul94 <aerosoul94@hotmail.com> | 2017-04-09 00:35:32 -0500 |
| commit | 592b0484b9c1e943093dd93b720428ebfaa116d2 (patch) | |
| tree | ecc226844a4131c67f720b74471eb097bd9f8926 /src/wiiu/cafe_loader.h | |
| parent | 991de71c144a0d2b70034593b03b6b93a96a0791 (diff) | |
Add Wii U RPX/RPL loader src. Some bug fixes.
Diffstat (limited to 'src/wiiu/cafe_loader.h')
| -rw-r--r-- | src/wiiu/cafe_loader.h | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/wiiu/cafe_loader.h b/src/wiiu/cafe_loader.h new file mode 100644 index 0000000..5417690 --- /dev/null +++ b/src/wiiu/cafe_loader.h @@ -0,0 +1,45 @@ +#pragma once + +#include "elf_reader.h" +#include "cafe.h" + +class cafe_loader { + elf_reader<elf32> *m_elf; + uint32 m_relocAddr; + + uint32 m_externStart; + uint32 m_externEnd; + + struct import { + uint32 addr; + uint32 orig; + const char *name; + }; + + std::vector<import> m_imports; + +public: + cafe_loader(elf_reader<elf32> *elf); + + void apply(); + +private: + void applySegments(); + void applySegment(uint32 sel, + const char *data, + uint32 addr, + uint32 size, + const char *name, + const char *sclass, + uchar perm, + uchar align, + bool load); + + void applyRelocations(); + + void processImports(); + void processExports(); + + void swapSymbols(); + void applySymbols(); +};
\ No newline at end of file |
