19#include <unordered_map>
66 be_u32 dll_base_original;
69 be_u32 time_date_stamp;
70 be_u32 loaded_imports;
73 be_u32 traversal_parent;
80enum class ModuleFormat : u8 { kUndefined, kXEX, kELF };
88 bool operator==(
const ThunkKey&)
const =
default;
109 ModuleFormat module_format = ModuleFormat::kUndefined;
125 std::unordered_map<KernelModuleState::ThunkKey, u32, KernelModuleState::ThunkKeyHash>
thunk_cache;
136 [[nodiscard]]
virtual const std::string&
GetPath()
const = 0;
146 u32* out_section_size)
const = 0;
173 template <
typename T>
175 return GetOptHeader(key,
reinterpret_cast<void**
>(out_ptr));
221 u32* out_section_size)
const override;
230 u32 caller_address = 0);
282 template <
typename T>
284 return GetOptHeader(key,
reinterpret_cast<void**
>(out_ptr));
288 u32* out_guest_address)
const override;
343 u32* out_header_guest_ptr);
void SetAddress(u16 ordinal, u32 address)
Definition export.h:47
u32 GetAddress(u16 ordinal) const
Definition export.h:50
Definition module_object.h:129
X_STATUS OptHeader(XEXHeaderKey key, T *out_ptr)
Definition module_object.h:174
virtual X_STATUS GetOptHeaderGuestAddress(XEXHeaderKey key, u32 *out_guest_address) const =0
virtual X_STATUS GetOptHeader(XEXHeaderKey key, void **out_ptr)=0
virtual std::vector< u32 > GetAlternateTitleIDs() const =0
virtual u32 GetTitleID() const =0
virtual const std::string & GetPath() const =0
virtual X_STATUS GetSection(std::string_view section_name, u32 *out_section_data, u32 *out_section_size) const =0
Definition title_runtime.h:85
Guest list and spin lock structures.
u32 X_STATUS
Definition status.h:23
X_HANDLE CreateModule(TitleRuntime &runtime, ModuleType type)
ModuleType
Definition module_object.h:78
XEXHeaderKey
Definition xex.h:270
Definition module_object.h:91
Definition module_object.h:84
u32 caller_module_base
Definition module_object.h:86
Definition module_object.h:82
std::unordered_map< ThunkKey, u32, ThunkKeyHash > thunk_cache
Definition module_object.h:96
rex::kernel::ExportVariableTable variables
Definition module_object.h:99
std::unique_ptr< rex::platform::HighResolutionTimer > timestamp_timer
Definition module_object.h:102
X_STATUS GetSection(std::string_view section_name, u32 *out_section_data, u32 *out_section_size) const override
u32 GetExportAddress(std::string_view export_name) const
ModuleType type
Definition module_object.h:200
static X_STATUS GetOptHeader(const kernel::GuestAddressSpace *memory, const XEXHeader *header, XEXHeaderKey key, u32 *out_header_guest_ptr)
X_STATUS LoadFromFile(TitleRuntime &owning_runtime, std::string_view guest_path)
KernelModuleState kernel
Definition module_object.h:210
u32 GetVariable(u16 ordinal) const
Definition module_object.h:301
X_STATUS GetOptHeader(XEXHeaderKey key, void **out_ptr) override
static X_HANDLE CreateKernelModule(TitleRuntime &runtime, std::string_view path)
u32 GetTitleID() const override
X_STATUS OptHeader(XEXHeaderKey key, T *out_ptr)
Definition module_object.h:283
bool IsNamed(std::string_view query) const
rex::kernel::XEXModule * GetXEX()
void SetVariable(u16 ordinal, u32 address)
Definition module_object.h:298
const std::string & GetPath() const override
Definition module_object.h:248
PropagateConst< std::unique_ptr< rex::kernel::GuestModule > > processor_module
Definition module_object.h:204
u32 GetExportAddress(TitleRuntime &owning_runtime, u16 ordinal, u32 caller_address=0)
X_STATUS LoadFromMemory(TitleRuntime &owning_runtime, const void *addr, size_t length)
static X_HANDLE FromHModule(TitleRuntime &runtime, void *hmodule)
std::vector< u32 > GetAlternateTitleIDs() const override
void InvalidateThunkCache(u32 lo, u32 hi)
static u32 HandleFromHModule(void *hmodule)
static X_HANDLE CreateUserModule(TitleRuntime &runtime)
std::string path
Definition module_object.h:202
ModuleObject(TitleRuntime *runtime_in, ModuleType type_in)
TitleRuntime * runtime
Definition module_object.h:208
u32 hmodule_ptr
Definition module_object.h:207
std::string name
Definition module_object.h:201
X_STATUS GetOptHeaderGuestAddress(XEXHeaderKey key, u32 *out_guest_address) const override
UserModuleState user
Definition module_object.h:209
Definition module_object.h:105
u32 stack_size
Definition module_object.h:116
std::unordered_map< KernelModuleState::ThunkKey, u32, KernelModuleState::ThunkKeyHash > thunk_cache
Definition module_object.h:125
std::string recompiled_key
Definition module_object.h:119
bool is_dll_module
Definition module_object.h:112
u32 entry_point
Definition module_object.h:115
u32 guest_xex_header
Definition module_object.h:107
std::vector< X_HANDLE > dependencies
Definition module_object.h:122
Definition module_object.h:47
be_u32 dll_base
Definition module_object.h:54
be_u16 load_count
Definition module_object.h:64
be_u32 xex_header_base
Definition module_object.h:71
X_LIST_ENTRY in_memory_order_links
Definition module_object.h:50
be_u32 full_image_size
Definition module_object.h:62
be_u32 checksum
Definition module_object.h:67
X_LIST_ENTRY in_initialization_order_links
Definition module_object.h:52
Integer types, byte order wrappers and size literals.
Move only function, const propagating pointer and scope guard.