From 1eebe439f5793b602cbaa90f7c79fe634e53b414 Mon Sep 17 00:00:00 2001 From: Federico Cecchetto Date: Sat, 25 Jun 2022 00:10:45 +0200 Subject: [PATCH] Better aslr patch errors --- src/client/main.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/client/main.cpp b/src/client/main.cpp index 156ffd47..e8862c4a 100644 --- a/src/client/main.cpp +++ b/src/client/main.cpp @@ -40,12 +40,12 @@ launcher::mode detect_mode_from_arguments() return launcher::mode::none; } -bool apply_aslr_patch(std::string* data) +void apply_aslr_patch(std::string* data) { // mp binary, sp binary if (data->size() != 0x1B97788 && data->size() != 0x1346D88) { - return false; + throw std::runtime_error("File size mismatch, bad game files"); } auto* dos_header = reinterpret_cast(&data->at(0)); @@ -56,22 +56,26 @@ bool apply_aslr_patch(std::string* data) { optional_header->DllCharacteristics &= ~(IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE); } - - return true; } void get_aslr_patched_binary(std::string* binary, std::string* data) { - std::string patched_binary = "h1-mod\\" + *binary; + const auto patched_binary = "h1-mod\\"s + *binary; - if (!apply_aslr_patch(data) || - (!utils::io::file_exists(patched_binary) && - !utils::io::write_file(patched_binary, *data, false))) + try { - throw std::runtime_error(utils::string::va( - "Could not create aslr patched binary!\n(%s)", - binary->data() - )); + apply_aslr_patch(data); + if (!utils::io::file_exists(patched_binary) && !utils::io::write_file(patched_binary, *data, false)) + { + throw std::runtime_error("Could not write file"); + } + } + catch (const std::exception& e) + { + throw std::runtime_error( + utils::string::va("Could not create aslr patched binary for %s! %s", + binary->data(), e.what()) + ); } *binary = patched_binary;