Fix issue with regenerating patched functions with no base functions regenerated, add 1kB of padding between mods to mitigate OOB accesses in mods, update N64Recomp (#84)

This commit is contained in:
Wiseguy 2025-01-30 03:02:40 -05:00 committed by GitHub
parent 3474514013
commit 7319630e2e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 8 deletions

@ -1 +1 @@
Subproject commit b18e0ca2dd359d62dcc019771f0ccc4a1302bd03
Subproject commit 198de1b5cf6e58415948588584750c51562d58dd

View file

@ -1320,13 +1320,15 @@ std::vector<recomp::mods::ModLoadErrorDetails> recomp::mods::ModContext::regener
}
// Apply the regenlist.
regenerated_code_handle = apply_regenlist(regenlist, decompressed_rom);
if (!regenerated_code_handle || !regenerated_code_handle->good()) {
regenerated_code_handle.reset();
ret.emplace_back(ModLoadErrorDetails{
"", ModLoadError::FailedToLoadCode, error_to_string(CodeModLoadError::InternalError)
});
return ret;
if (!regenlist.functions.empty()) {
regenerated_code_handle = apply_regenlist(regenlist, decompressed_rom);
if (!regenerated_code_handle || !regenerated_code_handle->good()) {
regenerated_code_handle.reset();
ret.emplace_back(ModLoadErrorDetails{
"", ModLoadError::FailedToLoadCode, error_to_string(CodeModLoadError::InternalError)
});
return ret;
}
}
if (!regenlist.patched_hooks.empty()) {
@ -1484,6 +1486,8 @@ recomp::mods::CodeModLoadError recomp::mods::ModContext::init_mod_code(uint8_t*
cur_section_addr += section.size + section.bss_size;
// Align the next section's address to 16 bytes.
cur_section_addr = (cur_section_addr + 15) & ~15;
// Add some empty space between mods to act as a buffer for misbehaving mods that have out of bounds accesses.
cur_section_addr += 0x400;
}
// Iterate over each section again after loading them to perform R_MIPS_32 relocations.