Merge remote-tracking branch 'GliniakRepo/patchingSystem' into canary_pr

This commit is contained in:
Gliniak
2022-05-19 10:01:33 +02:00
18 changed files with 520 additions and 2 deletions

View File

@@ -406,6 +406,9 @@ object_ref<UserModule> KernelState::LoadUserModule(
}
module->Dump();
emulator_->patcher()->ApplyPatchesForTitle(memory_, module->title_id(),
module->hash());
emulator_->on_patch_apply();
if (module->is_dll_module() && module->entry_point() && call_entry) {
// Call DllMain(DLL_PROCESS_ATTACH):

View File

@@ -13,6 +13,7 @@
#include "xenia/base/byte_stream.h"
#include "xenia/base/logging.h"
#include "xenia/base/xxhash.h"
#include "xenia/cpu/elf_module.h"
#include "xenia/cpu/processor.h"
#include "xenia/cpu/xex_module.h"
@@ -128,6 +129,9 @@ X_STATUS UserModule::LoadFromFile(const std::string_view path) {
}
}
CalculateHash();
XELOGI("Module hash: {:016X} for {}", hash_, name_);
return LoadXexContinue();
}
@@ -804,5 +808,13 @@ void UserModule::Dump() {
xe::logging::AppendLogLine(xe::LogLevel::Info, 'i', sb.to_string_view());
}
void UserModule::CalculateHash() {
uint8_t* base_adr = memory()->TranslateVirtual(xex_module()->base_address());
XXH3_state_t hash_state;
XXH3_64bits_reset(&hash_state);
XXH3_64bits_update(&hash_state, base_adr, xex_module()->image_size());
hash_ = XXH3_64bits_digest(&hash_state);
}
} // namespace kernel
} // namespace xe

View File

@@ -38,6 +38,7 @@ class UserModule : public XModule {
const std::string& path() const override { return path_; }
const std::string& name() const override { return name_; }
uint64_t hash() const { return hash_; }
enum ModuleFormat {
kModuleFormatUndefined = 0,
@@ -97,9 +98,11 @@ class UserModule : public XModule {
private:
X_STATUS LoadXexContinue();
void CalculateHash();
std::string name_;
std::string path_;
uint64_t hash_ = -1;
uint32_t guest_xex_header_ = 0;
ModuleFormat module_format_ = kModuleFormatUndefined;