Mortal Kombat 11 allocates memory, with zero_bits set to 0, and applies a 43-bit mask on the pointer. This would have worked in Windows 7, as MSDN says that 43-bits was the maximum pointer size, but the game exhibits this same behavior in wine even when the windows version is set to 8+. This is probably not an issue on Windows, as the allocator may return a much lower address. --- dlls/ntdll/virtual.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c index 181dffe42e..437aef099e 100644 --- a/dlls/ntdll/virtual.c +++ b/dlls/ntdll/virtual.c @@ -132,7 +132,7 @@ static void *address_space_start = (void *)0x110000; /* keep DOS area clear * static const UINT page_shift = 12; static const UINT_PTR page_mask = 0xfff; static void *address_space_limit = (void *)0x7fffffff0000; -static void *user_space_limit = (void *)0x7fffffff0000; +static void *user_space_limit = (void *)0x7ffffff0000; static void *working_set_limit = (void *)0x7fffffff0000; static void *address_space_start = (void *)0x10000; #else @@ -2625,6 +2625,7 @@ void virtual_set_large_address_space(void) { IMAGE_NT_HEADERS *nt = RtlImageNtHeader( NtCurrentTeb()->Peb->ImageBaseAddress );
+ if (is_win64) return; if (!(nt->FileHeader.Characteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE)) return; /* no large address space on win9x */ if (NtCurrentTeb()->Peb->OSPlatformId != VER_PLATFORM_WIN32_NT) return;