summaryrefslogtreecommitdiff
path: root/src/wiiu/cafe_loader.h
diff options
context:
space:
mode:
authoraerosoul94 <aerosoul94@hotmail.com>2017-04-09 00:35:32 -0500
committeraerosoul94 <aerosoul94@hotmail.com>2017-04-09 00:35:32 -0500
commit592b0484b9c1e943093dd93b720428ebfaa116d2 (patch)
treeecc226844a4131c67f720b74471eb097bd9f8926 /src/wiiu/cafe_loader.h
parent991de71c144a0d2b70034593b03b6b93a96a0791 (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.h45
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