ncch_container: Apply IPS patch after allocating .bss
This allows an IPS patch to edit .bss. This is useful for game patches that need to add code, as putting things in .bss allows adding new code *without* editing .code and thus without having to relocate everything.
This commit is contained in:
@ -539,26 +539,28 @@ Loader::ResultStatus NCCHContainer::LoadSectionExeFS(const char* name, std::vect
|
||||
}
|
||||
}
|
||||
|
||||
std::string override_ips = filepath + ".exefsdir/code.ips";
|
||||
|
||||
if (FileUtil::Exists(override_ips) && strcmp(name, ".code") == 0) {
|
||||
FileUtil::IOFile ips_file(override_ips, "rb");
|
||||
std::size_t ips_file_size = ips_file.GetSize();
|
||||
std::vector<u8> ips(ips_file_size);
|
||||
|
||||
if (ips_file.IsOpen() &&
|
||||
ips_file.ReadBytes(&ips[0], ips_file_size) == ips_file_size) {
|
||||
LOG_INFO(Service_FS, "File {} patching code.bin", override_ips);
|
||||
ApplyIPS(ips, buffer);
|
||||
}
|
||||
}
|
||||
|
||||
return Loader::ResultStatus::Success;
|
||||
}
|
||||
}
|
||||
return Loader::ResultStatus::ErrorNotUsed;
|
||||
}
|
||||
|
||||
bool NCCHContainer::ApplyIPSPatch(std::vector<u8>& code) const {
|
||||
const std::string override_ips = filepath + ".exefsdir/code.ips";
|
||||
|
||||
FileUtil::IOFile ips_file{override_ips, "rb"};
|
||||
if (!ips_file)
|
||||
return false;
|
||||
|
||||
std::vector<u8> ips(ips_file.GetSize());
|
||||
if (ips_file.ReadBytes(ips.data(), ips.size()) != ips.size())
|
||||
return false;
|
||||
|
||||
LOG_INFO(Service_FS, "File {} patching code.bin", override_ips);
|
||||
ApplyIPS(ips, code);
|
||||
return true;
|
||||
}
|
||||
|
||||
Loader::ResultStatus NCCHContainer::LoadOverrideExeFSSection(const char* name,
|
||||
std::vector<u8>& buffer) {
|
||||
std::string override_name;
|
||||
|
Reference in New Issue
Block a user