1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
commit 5c45391e9f79854915c50a15054f2de4888596a2
Author: Yuxuan Shui <yshui@codeweavers.com>
Date: Sat May 3 21:57:23 2025 +0100
ntdll: Also relocate entry point for builtin modules.
Discovered while I was working on ASan support. ASan shadow memory
might be placed where the main image is normally loaded, forcing it to
relocate.
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index 202894750a0..c797c89952f 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -3424,10 +3424,11 @@ static NTSTATUS virtual_map_image( HANDLE mapping, void **addr_ptr, SIZE_T *size
status = map_image_into_view( view, filename, unix_fd, image_info, machine, shared_fd, needs_close );
if (status == STATUS_SUCCESS)
{
+ image_info->base = wine_server_client_ptr( view->base );
SERVER_START_REQ( map_image_view )
{
req->mapping = wine_server_obj_handle( mapping );
- req->base = wine_server_client_ptr( view->base );
+ req->base = image_info->base;
req->size = size;
req->entry = image_info->entry_point;
req->machine = image_info->machine;
@@ -3835,8 +3836,6 @@ NTSTATUS virtual_map_module( HANDLE mapping, void **module, SIZE_T *size, SECTIO
status = virtual_map_image( mapping, module, size, shared_file, limit_low, limit_high, 0,
machine, image_info, filename, FALSE );
virtual_fill_image_information( image_info, info );
- if (status == STATUS_IMAGE_NOT_AT_BASE)
- info->TransferAddress = (char *)*module + image_info->entry_point;
}
if (shared_file) NtClose( shared_file );
free( image_info );
|