Fix #1545 - ERR_MEM_EMBEDDEDALLOC_ALLOC Crash (#2116)

This commit is contained in:
Quentin 2023-09-12 20:19:24 +02:00 committed by GitHub
parent e4349c6e2a
commit e0ae6837d0

View File

@ -35,7 +35,7 @@ namespace big
return value == 0xE9;
}
bool is_unwanted_dependency(__int64 cb)
bool is_unwanted_dependency(__int64 cb, uint64_t caller_addr_offset)
{
auto f1 = *(__int64*)(cb + 0x60);
auto f2 = *(__int64*)(cb + 0x100);
@ -44,12 +44,24 @@ namespace big
if (!is_address_in_game_region(f1) || !is_address_in_game_region(f2) || !is_address_in_game_region(f3))
return false;
// These must run, otherwise we'll at some point run out of sysMemSimpleAllocator memory.
if (caller_addr_offset == 0xAA03D4 || caller_addr_offset == 0xAA0A21 || caller_addr_offset == 0xAA0902)
{
return false;
}
return is_jump(f1) || is_jump(f2) || is_jump(f3);
}
void hooks::queue_dependency(void* dependency)
{
if (is_unwanted_dependency((__int64)dependency))
uint64_t caller_addr_offset = (uint64_t)_ReturnAddress();
static auto module_base = (uint64_t)GetModuleHandle(0);
caller_addr_offset -= module_base;
if (is_unwanted_dependency((__int64)dependency, caller_addr_offset))
{
return;
}