Browse Source

Format and add configuration file for testing

development
Abheek Dhawan 3 years ago
parent
commit
d1301ec244
  1. 46
      main.cpp
  2. BIN
      modlimitfix

46
main.cpp

@ -13,7 +13,7 @@ static const uint64_t address_already_patched = 1;
static const uint64_t check_range_start = 0xB94000; static const uint64_t check_range_start = 0xB94000;
static const uint64_t check_range_end = 0xB98000; static const uint64_t check_range_end = 0xB98000;
static const uint64_t patch_offset_in_sequence = 1; static const uint64_t patch_offset_in_sequence = 1;
static const uint32_t patched_limit = 500; uint32_t patched_limit = 500;
static const std::vector<uint64_t> known_candidates{0xB95CF6, 0xB96366, static const std::vector<uint64_t> known_candidates{0xB95CF6, 0xB96366,
0xB967A6, 0xB95E56}; 0xB967A6, 0xB95E56};
@ -60,12 +60,27 @@ uint64_t find_patch_address(const std::vector<uint8_t> &search_buffer) {
} }
int main() { int main() {
freopen("modlimitfix.conf", "r", stdin);
uint32_t mod_limit;
bool using_conf = false;
cin >> mod_limit;
if (mod_limit) {
patched_limit = mod_limit;
using_conf = true;
}
if (using_conf) {
cout << "Using configuration for mod limit value..." << endl;
} else {
cout << "Using defaults for mod limit values..." << endl;
}
cout << "Patching with a limit of " << patched_limit << "..." << endl;
auto path = fs::absolute(fs::current_path() / "witcher3.exe"); auto path = fs::absolute(fs::current_path() / "witcher3.exe");
if (!fs::exists(path)) { if (!fs::exists(path)) {
cout << "Could not find witcher3.exe file, make sure you are running this " cout << "Could not find witcher3.exe file, make sure you are running this "
<< "in the bin/x64 directory." << endl; << "in the bin/x64 directory." << endl;
cout << "Please press ENTER or close the window to terminate the program" << endl; cout << "Please press ENTER or close the window to terminate the program"
<< endl;
cin.get(); cin.get();
return 0; return 0;
} }
@ -80,7 +95,8 @@ int main() {
if (file.eof() || if (file.eof() ||
!file.read(reinterpret_cast<char *>(search_buffer.data()), read_size)) { !file.read(reinterpret_cast<char *>(search_buffer.data()), read_size)) {
cout << "witcher3.exe is unexpectedly small, aborting patching." << endl; cout << "witcher3.exe is unexpectedly small, aborting patching." << endl;
cout << "Please press ENTER or close the window to terminate the program" << endl; cout << "Please press ENTER or close the window to terminate the program"
<< endl;
cin.get(); cin.get();
return 0; return 0;
} }
@ -90,13 +106,16 @@ int main() {
if (patch_address == address_not_found) { if (patch_address == address_not_found) {
cout << "Did not find the address to patch, possibly an unexpected version " cout << "Did not find the address to patch, possibly an unexpected version "
"of executable. Contact sedmelluq and give him your exe." << endl; "of executable. Contact sedmelluq and give him your exe."
cout << "Please press ENTER or close the window to terminate the program" << endl; << endl;
cout << "Please press ENTER or close the window to terminate the program"
<< endl;
cin.get(); cin.get();
return 0; return 0;
} else if (patch_address == address_already_patched) { } else if (patch_address == address_already_patched) {
cout << "It seems the executable is already patched" << endl; cout << "It seems the executable is already patched" << endl;
cout << "Please press ENTER or close the window to terminate the program" << endl; cout << "Please press ENTER or close the window to terminate the program"
<< endl;
cin.get(); cin.get();
return 0; return 0;
} }
@ -105,13 +124,17 @@ int main() {
if (fs::exists(backup_path)) { if (fs::exists(backup_path)) {
cout << "Backup file witcher3.exe.orig already exists. Rename it or delete " cout << "Backup file witcher3.exe.orig already exists. Rename it or delete "
"it (might be left over from previous patch attempt)." << endl; "it (might be left over from previous patch attempt)."
cout << "Please press ENTER or close the window to terminate the program" << endl; << endl;
cout << "Please press ENTER or close the window to terminate the program"
<< endl;
cin.get(); cin.get();
return 0; return 0;
} else if (!fs::copy_file(path, backup_path)) { } else if (!fs::copy_file(path, backup_path)) {
cout << "Failed to create backup file, try running as administrator." << endl; cout << "Failed to create backup file, try running as administrator."
cout << "Please press ENTER or close the window to terminate the program" << endl; << endl;
cout << "Please press ENTER or close the window to terminate the program"
<< endl;
cin.get(); cin.get();
return 0; return 0;
} }
@ -129,7 +152,8 @@ int main() {
cout << "Successfully patched." << endl; cout << "Successfully patched." << endl;
} }
} }
cout << "Please press ENTER or close the window to terminate the program" << endl; cout << "Please press ENTER or close the window to terminate the program"
<< endl;
cin.get(); cin.get();
return 0; return 0;
} }

BIN
modlimitfix

Binary file not shown.
Loading…
Cancel
Save