40namespace rex::filesystem {
63 virtual const std::string& GetName()
const = 0;
64 virtual bool IsExecutable()
const = 0;
90 bool IsExecutableAddress(u32 address)
const;
112 std::vector<BinarySymbol> binary_symbols_;
130 bool IsLoaded()
const {
return loaded_; }
131 const std::string& GetName()
const override {
return name_; }
134 const std::string& GetPath()
const {
return path_; }
147 bool Load(
const std::string_view name,
const std::string_view path,
const void* elf_addr,
155 bool loaded_ =
false;
156 std::vector<u8> elf_header_mem_;
157 u32 entry_point_ = 0;
158 u32 base_address_ = 0;
203 bool IsLoaded()
const {
return loaded_; }
244 const std::vector<ImportLibrary>& GetImportLibraries()
const {
return import_libs_; }
263 bool Load(
const std::string_view name,
const std::string_view path,
const void* xex_addr,
277 const std::string& GetName()
const override {
return name_; }
283 void PopulateBinaryData();
288 std::unique_ptr<filesystem::IXEXImage> image_;
289 std::unique_ptr<filesystem::PEInfo> pe_;
290 std::vector<u8> pending_image_;
291 std::vector<ImportLibrary> import_libs_;
293 bool loaded_ =
false;
294 bool finished_load_ =
false;
296 u32 base_address_ = 0;
309 :
library(library_name), ordinal(export_ordinal) {}
313 std::atomic<PPCFunc*> function{
nullptr};
340 [[nodiscard]] virtual std::optional<X_HANDLE> GetModule(std::string_view name,
341 bool user_only = false) = 0;
346 [[nodiscard]] virtual std::optional<X_HANDLE> GetExecutable() const = 0;
352 [[nodiscard]] virtual std::optional<X_HANDLE> FindKernelModule(std::string_view name) = 0;
358 [[nodiscard]] virtual std::optional<X_HANDLE> FindUserModule(std::string_view name) = 0;
364 [[nodiscard]] virtual
bool IsKernelModule(std::string_view name) = 0;
367 [[nodiscard]] virtual std::vector<X_HANDLE> GetKernelModules() = 0;
370 [[nodiscard]] virtual std::vector<X_HANDLE> GetUserModules() = 0;
381 [[nodiscard]] virtual
Result<X_HANDLE> LoadUserModule(std::string_view name,
382 bool call_entry = true) = 0;
389 virtual
void UnloadUserModule(X_HANDLE module,
bool call_entry = true) = 0;
395 virtual
void AddImportCandidate(std::string_view path) = 0;
403 [[nodiscard]] virtual
Result<X_HANDLE> RegisterKernelModule(X_HANDLE created) = 0;
411 virtual
void RegisterRecompiledModule(const
char* pe_name, const
char* guest_path,
412 const
char* shared_lib_name) = 0;
415 [[nodiscard]] virtual
rex::
platform::RankedMutex& GetLoadCountMutex() = 0;
bool Load(const std::string_view name, const std::string_view path, const void *elf_addr, size_t elf_length)
u32 GetImageSize() const override
Definition module.h:138
u32 GetBaseAddress() const override
Definition module.h:137
bool IsExecutable() const override
u32 GetEntryPoint() const override
Definition module.h:139
ELFModule(FunctionDispatcher *function_dispatcher)
Definition function_dispatcher.h:48
std::vector< BinarySection > binary_sections_
Definition module.h:111
virtual u32 GetBaseAddress() const
Definition module.h:69
virtual u32 GetExceptionDirectoryRVA() const
Definition module.h:84
virtual std::span< const BinarySymbol > GetBinarySymbols() const
GuestModule(FunctionDispatcher *function_dispatcher)
virtual u32 GetExceptionDirectoryAddress() const
Definition module.h:88
virtual u32 GetImageSize() const
Definition module.h:73
virtual std::span< const BinarySection > GetBinarySections() const
virtual u32 GetEntryPoint() const
Definition module.h:77
virtual const BinarySection * FindSectionByAddress(u32 address) const
virtual u32 GetExceptionDirectorySize() const
Definition module.h:86
virtual u32 GetExportTableAddress() const
Definition module.h:81
Definition title_runtime.h:85
bool Load(const std::string_view name, const std::string_view path, const void *xex_addr, size_t xex_length)
u32 GetExceptionDirectoryRVA() const override
std::span< const BinarySection > GetBinarySections() const override
XEXModule(FunctionDispatcher *function_dispatcher, TitleRuntime &runtime)
u32 GetExportAddress(const std::string_view name) const
bool IsExecutable() const override
std::span< const u8 > GetPendingImage() const
Definition module.h:269
u32 GetImageSize() const override
u32 GetExportTableAddress() const override
int ApplyPatch(XEXModule *module)
u32 GetExceptionDirectorySize() const override
u32 GetExceptionDirectoryAddress() const override
u32 GetBaseAddress() const override
Definition module.h:215
u32 GetEntryPoint() const override
u32 GetExportAddress(u16 ordinal) const
std::span< const BinarySymbol > GetBinarySymbols() const override
Interfaces, factory and module declaration.
#define REX_DECLARE_INTERFACE(Name, version)
Definition module.h:114
PPCFunc * ResolveModuleImport(ModuleImport &target)
u32 FourCCT
Definition endian.h:264
constexpr FourCCT make_fourcc(char a, char b, char c, char d)
Definition endian.h:273
std::expected< T, Error > Result
Definition result.h:98
Definition symbol_map.h:35
std::atomic< u64 > generation
Definition module.h:314
constexpr ModuleImport(const char *library_name, u16 export_ordinal)
Definition module.h:308
const char * library
Definition module.h:311
std::string file_name
Definition module.h:188
std::vector< LibraryImport > imports
Definition module.h:192
std::string name
Definition module.h:187
XEXVersion version
Definition module.h:190
XEXVersion min_version
Definition module.h:191
u32 thunk_address
Definition module.h:183
u32 value_address
Definition module.h:182
Integer types, byte order wrappers and size literals.
Move only function, const propagating pointer and scope guard.