ReXGlue SDK
Loading...
Searching...
No Matches
xex.h
Go to the documentation of this file.
1
16
17#pragma once
18
19#include <array>
20#include <optional>
21#include <span>
22#include <string>
23#include <vector>
24#include <cstddef>
25#include <cstdint>
26#include <memory>
27#include <utility>
28
29#include <rex/platform.h>
30#include <rex/result.h>
31#include <rex/types.h>
32#include <rex/utility.h>
33#include <rex/assert.h>
35
36namespace rex::filesystem {
37
47
48class PESection {
49 public:
50 char name[9];
53 u32 address;
54 u32 size;
55 u32 flags;
56};
57
58struct PEExport {
59 const char* name;
60 u32 ordinal;
61
62 u64 addr;
63};
64
65struct PEInfo {
66 std::vector<PESection> sections;
67 u32 exception_directory_rva = 0;
68 u32 exception_directory_size = 0;
70 u32 header_size = 0;
71};
72
73} // namespace rex::filesystem
74
75namespace rex::filesystem {
76
78enum class XEXKey : u8 {
79 kRetail,
80 kDevKit,
83};
84
87 u32 page_count = 0;
88};
89
92 std::array<u8, 0x100> rsa_signature{};
93 std::array<u8, 0x10> aes_key{};
94 u32 image_size = 0;
95 u32 image_flags = 0;
96 u32 export_table = 0;
97 u32 load_address = 0;
98 std::vector<XEXPageRange> pages;
99};
100
102 std::string name;
103 u32 id = 0;
104 kernel::XEXVersion version{};
105 kernel::XEXVersion min_version{};
106 std::vector<u32> records;
107};
108
110 u32 index = 0;
111 u32 value = 0;
112};
113
116 public:
117 virtual ~IXEXImage() = default;
118
122 virtual const kernel::XEXHeader& GetHeader() const = 0;
123
124 virtual std::span<const u8> GetHeaderBytes() const = 0;
125
129 template <typename T>
130 const T* GetOptHeader(kernel::XEXHeaderKey key) const {
131 return static_cast<const T*>(FindOptHeader(key));
132 }
133
137 virtual std::optional<u32> GetOptHeaderValue(kernel::XEXHeaderKey key) const = 0;
138
139 virtual const XEXSecurityInfo& GetSecurity() const = 0;
140
141 virtual std::span<const XEXImportLibrary> GetImports() const = 0;
142
143 virtual std::vector<u32> GetAlternateTitleIDs() const = 0;
144
145 virtual bool IsPatch() const = 0;
146
148 virtual XEXKey GetKey() const = 0;
149
151 virtual u32 GetImageSize() const = 0;
152
160 [[nodiscard]] virtual Result<void> Decode(std::span<const u8> file, std::span<u8> image) = 0;
161
168 const IXEXImage& patch) const = 0;
169
177 [[nodiscard]] virtual Result<void> ApplyImageDelta(const IXEXImage& patch,
178 std::span<u8> image) const = 0;
179
180 protected:
181 virtual const void* FindOptHeader(kernel::XEXHeaderKey key) const = 0;
182};
183
184} // namespace rex::filesystem
Definition xex.h:115
virtual const kernel::XEXHeader & GetHeader() const =0
const T * GetOptHeader(kernel::XEXHeaderKey key) const
Definition xex.h:130
virtual Result< std::unique_ptr< IXEXImage > > ApplyHeaderDelta(const IXEXImage &patch) const =0
virtual XEXKey GetKey() const =0
virtual Result< void > ApplyImageDelta(const IXEXImage &patch, std::span< u8 > image) const =0
virtual std::optional< u32 > GetOptHeaderValue(kernel::XEXHeaderKey key) const =0
virtual u32 GetImageSize() const =0
virtual Result< void > Decode(std::span< const u8 > file, std::span< u8 > image)=0
Definition xex.h:48
u32 raw_size
Definition xex.h:52
u32 flags
Definition xex.h:55
u32 raw_address
Definition xex.h:51
u32 address
Definition xex.h:53
char name[9]
Definition xex.h:50
u32 size
Definition xex.h:54
PESectionFlags
Definition xex.h:39
@ kPESectionMemoryExecute
Definition xex.h:43
@ kPESectionMemoryRead
Definition xex.h:44
@ kPESectionMemoryWrite
Definition xex.h:45
@ kPESectionContainsCode
Definition xex.h:40
@ kPESectionContainsDataInit
Definition xex.h:41
@ kPESectionContainsDataUninit
Definition xex.h:42
XEXKey
Definition xex.h:78
@ kRetailXEX1
Definition xex.h:81
@ kDevKitXEX1
Definition xex.h:82
XEXSectionType
Definition xex.h:26
@ kXEXSectionCode
Definition xex.h:27
XEXHeaderKey
Definition xex.h:270
std::expected< T, Error > Result
Definition result.h:98
Platform flags, packing macros and export markers.
Definition xex.h:58
Definition xex.h:65
std::vector< PESection > sections
Definition xex.h:66
u32 time_date_stamp
Definition xex.h:69
u32 header_size
Definition xex.h:70
std::string name
Definition xex.h:102
std::vector< u32 > records
Definition xex.h:106
u32 value
Definition xex.h:111
std::vector< XEXPageRange > pages
Definition xex.h:98
u32 image_flags
Definition xex.h:95
u32 image_size
Definition xex.h:94
std::array< u8, 0x10 > aes_key
Definition xex.h:93
u32 export_table
Definition xex.h:96
Definition xex.h:583
Integer types, byte order wrappers and size literals.
Definition xex.h:391
Move only function, const propagating pointer and scope guard.