ReXGlue SDK
Toggle main menu visibility
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
>
34
#include <
rex/kernel/types/xex.h
>
35
36
namespace
rex::filesystem {
37
39
enum
PESectionFlags
: u32 {
40
kPESectionContainsCode
= 0x00000020,
41
kPESectionContainsDataInit
= 0x00000040,
42
kPESectionContainsDataUninit
= 0x00000080,
43
kPESectionMemoryExecute
= 0x20000000,
44
kPESectionMemoryRead
= 0x40000000,
45
kPESectionMemoryWrite
= 0x80000000,
46
};
47
48
class
PESection
{
49
public
:
50
char
name
[9];
51
u32
raw_address
;
52
u32
raw_size
;
53
u32
address
;
54
u32
size
;
55
u32
flags
;
56
};
57
58
struct
PEExport
{
59
const
char
* name;
60
u32 ordinal;
61
62
u64 addr;
63
};
64
65
struct
PEInfo
{
66
std::vector<PESection>
sections
;
67
u32 exception_directory_rva = 0;
68
u32 exception_directory_size = 0;
69
u32
time_date_stamp
= 0;
70
u32
header_size
= 0;
71
};
72
73
}
// namespace rex::filesystem
74
75
namespace
rex::filesystem {
76
78
enum class
XEXKey
: u8 {
79
kRetail,
80
kDevKit,
81
kRetailXEX1
,
82
kDevKitXEX1
,
83
};
84
85
struct
XEXPageRange
{
86
kernel::XEXSectionType
type =
kernel::kXEXSectionCode
;
87
u32 page_count = 0;
88
};
89
91
struct
XEXSecurityInfo
{
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
101
struct
XEXImportLibrary
{
102
std::string
name
;
103
u32
id
= 0;
104
kernel::XEXVersion
version{};
105
kernel::XEXVersion
min_version{};
106
std::vector<u32>
records
;
107
};
108
109
struct
XEXOptHeaderEntry
{
110
u32 index = 0;
111
u32
value
= 0;
112
};
113
115
class
IXEXImage
{
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
167
[[nodiscard]]
virtual
Result<std::unique_ptr<IXEXImage>
>
ApplyHeaderDelta
(
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
assert.h
rex::filesystem::IXEXImage
Definition
xex.h:115
rex::filesystem::IXEXImage::GetHeader
virtual const kernel::XEXHeader & GetHeader() const =0
rex::filesystem::IXEXImage::GetOptHeader
const T * GetOptHeader(kernel::XEXHeaderKey key) const
Definition
xex.h:130
rex::filesystem::IXEXImage::ApplyHeaderDelta
virtual Result< std::unique_ptr< IXEXImage > > ApplyHeaderDelta(const IXEXImage &patch) const =0
rex::filesystem::IXEXImage::GetKey
virtual XEXKey GetKey() const =0
rex::filesystem::IXEXImage::ApplyImageDelta
virtual Result< void > ApplyImageDelta(const IXEXImage &patch, std::span< u8 > image) const =0
rex::filesystem::IXEXImage::GetOptHeaderValue
virtual std::optional< u32 > GetOptHeaderValue(kernel::XEXHeaderKey key) const =0
rex::filesystem::IXEXImage::GetImageSize
virtual u32 GetImageSize() const =0
rex::filesystem::IXEXImage::Decode
virtual Result< void > Decode(std::span< const u8 > file, std::span< u8 > image)=0
rex::filesystem::PESection
Definition
xex.h:48
rex::filesystem::PESection::raw_size
u32 raw_size
Definition
xex.h:52
rex::filesystem::PESection::flags
u32 flags
Definition
xex.h:55
rex::filesystem::PESection::raw_address
u32 raw_address
Definition
xex.h:51
rex::filesystem::PESection::address
u32 address
Definition
xex.h:53
rex::filesystem::PESection::name
char name[9]
Definition
xex.h:50
rex::filesystem::PESection::size
u32 size
Definition
xex.h:54
rex::filesystem::PESectionFlags
PESectionFlags
Definition
xex.h:39
rex::filesystem::kPESectionMemoryExecute
@ kPESectionMemoryExecute
Definition
xex.h:43
rex::filesystem::kPESectionMemoryRead
@ kPESectionMemoryRead
Definition
xex.h:44
rex::filesystem::kPESectionMemoryWrite
@ kPESectionMemoryWrite
Definition
xex.h:45
rex::filesystem::kPESectionContainsCode
@ kPESectionContainsCode
Definition
xex.h:40
rex::filesystem::kPESectionContainsDataInit
@ kPESectionContainsDataInit
Definition
xex.h:41
rex::filesystem::kPESectionContainsDataUninit
@ kPESectionContainsDataUninit
Definition
xex.h:42
rex::filesystem::XEXKey
XEXKey
Definition
xex.h:78
rex::filesystem::XEXKey::kRetailXEX1
@ kRetailXEX1
Definition
xex.h:81
rex::filesystem::XEXKey::kDevKitXEX1
@ kDevKitXEX1
Definition
xex.h:82
xex.h
rex::kernel::XEXSectionType
XEXSectionType
Definition
xex.h:26
rex::kernel::kXEXSectionCode
@ kXEXSectionCode
Definition
xex.h:27
rex::kernel::XEXHeaderKey
XEXHeaderKey
Definition
xex.h:270
rex::Result
std::expected< T, Error > Result
Definition
result.h:98
platform.h
Platform flags, packing macros and export markers.
result.h
rex::filesystem::PEExport
Definition
xex.h:58
rex::filesystem::PEInfo
Definition
xex.h:65
rex::filesystem::PEInfo::sections
std::vector< PESection > sections
Definition
xex.h:66
rex::filesystem::PEInfo::time_date_stamp
u32 time_date_stamp
Definition
xex.h:69
rex::filesystem::PEInfo::header_size
u32 header_size
Definition
xex.h:70
rex::filesystem::XEXImportLibrary
Definition
xex.h:101
rex::filesystem::XEXImportLibrary::name
std::string name
Definition
xex.h:102
rex::filesystem::XEXImportLibrary::records
std::vector< u32 > records
Definition
xex.h:106
rex::filesystem::XEXOptHeaderEntry
Definition
xex.h:109
rex::filesystem::XEXOptHeaderEntry::value
u32 value
Definition
xex.h:111
rex::filesystem::XEXPageRange
Definition
xex.h:85
rex::filesystem::XEXSecurityInfo
Definition
xex.h:91
rex::filesystem::XEXSecurityInfo::pages
std::vector< XEXPageRange > pages
Definition
xex.h:98
rex::filesystem::XEXSecurityInfo::image_flags
u32 image_flags
Definition
xex.h:95
rex::filesystem::XEXSecurityInfo::image_size
u32 image_size
Definition
xex.h:94
rex::filesystem::XEXSecurityInfo::aes_key
std::array< u8, 0x10 > aes_key
Definition
xex.h:93
rex::filesystem::XEXSecurityInfo::export_table
u32 export_table
Definition
xex.h:96
rex::kernel::XEXHeader
Definition
xex.h:583
types.h
Integer types, byte order wrappers and size literals.
rex::kernel::XEXVersion
Definition
xex.h:391
utility.h
Move only function, const propagating pointer and scope guard.
rex
filesystem
xex.h
Generated by
1.18.0