diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c index bbbdb90116fb3e24c8d4d69e45da21399d375437..0e580cd7556708d7dde527aaa0d07357b2b71011 100644 --- a/dlls/ntdll/unix/loader.c +++ b/dlls/ntdll/unix/loader.c @@ -1017,7 +1017,7 @@ static void fill_builtin_image_info( void *module, pe_image_info_t *info ) const IMAGE_NT_HEADERS *nt = (IMAGE_NT_HEADERS *)((const BYTE *)dos + dos->e_lfanew); info->base = nt->OptionalHeader.ImageBase; - info->entry_point = info->base + nt->OptionalHeader.AddressOfEntryPoint; + info->entry_point = nt->OptionalHeader.AddressOfEntryPoint; info->map_size = nt->OptionalHeader.SizeOfImage; info->stack_size = nt->OptionalHeader.SizeOfStackReserve; info->stack_commit = nt->OptionalHeader.SizeOfStackCommit; diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index 8976cb88f90c7749f292a395701e5621b808350c..fbdbf79d9d55ca1cd6c5ba481d7987dcf0530244 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -4512,7 +4512,7 @@ NTSTATUS WINAPI NtUnmapViewOfSection( HANDLE process, PVOID addr ) */ void virtual_fill_image_information( const pe_image_info_t *pe_info, SECTION_IMAGE_INFORMATION *info ) { - info->TransferAddress = wine_server_get_ptr( pe_info->entry_point ); + info->TransferAddress = wine_server_get_ptr( pe_info->base + pe_info->entry_point ); info->ZeroBits = pe_info->zerobits; info->MaximumStackSize = pe_info->stack_size; info->CommittedStackSize = pe_info->stack_commit; diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h index 4611f38c5c43cc58cad33f12fd8e959cbebe45d3..bb4862c96691d5808534ab82e21411bd31b9de4d 100644 --- a/include/wine/server_protocol.h +++ b/include/wine/server_protocol.h @@ -767,10 +767,10 @@ typedef union typedef struct { client_ptr_t base; - client_ptr_t entry_point; - mem_size_t map_size; mem_size_t stack_size; mem_size_t stack_commit; + unsigned int entry_point; + unsigned int map_size; unsigned int zerobits; unsigned int subsystem; unsigned short subsystem_minor; @@ -6252,7 +6252,7 @@ union generic_reply /* ### protocol_version begin ### */ -#define SERVER_PROTOCOL_VERSION 725 +#define SERVER_PROTOCOL_VERSION 726 /* ### protocol_version end ### */ diff --git a/server/debugger.c b/server/debugger.c index b718c7c283f93e44016b625ef78fb403e540863c..ca84a88258f2f97c687f7e44bbd3bf290bdc8a0d 100644 --- a/server/debugger.c +++ b/server/debugger.c @@ -160,7 +160,7 @@ static void fill_create_process_event( struct debug_event *event, const void *ar const struct memory_view *view = arg; const pe_image_info_t *image_info = get_view_image_info( view, &event->data.create_process.base ); - event->data.create_process.start = image_info->entry_point; + event->data.create_process.start = event->data.create_process.base + image_info->entry_point; event->data.create_process.dbg_offset = image_info->dbg_offset; event->data.create_process.dbg_size = image_info->dbg_size; /* the doc says write access too, but this doesn't seem a good idea */ diff --git a/server/mapping.c b/server/mapping.c index a4bb000268adeb960e163c0a6e30b92c01b55211..a814fe8090f16b1db20516f5eeedf68f6be8687d 100644 --- a/server/mapping.c +++ b/server/mapping.c @@ -705,7 +705,7 @@ static unsigned int get_image_params( struct mapping *mapping, file_pos_t file_s clr_size = nt.opt.hdr32.DataDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR].Size; mapping->image.base = nt.opt.hdr32.ImageBase; - mapping->image.entry_point = nt.opt.hdr32.ImageBase + nt.opt.hdr32.AddressOfEntryPoint; + mapping->image.entry_point = nt.opt.hdr32.AddressOfEntryPoint; mapping->image.map_size = ROUND_SIZE( nt.opt.hdr32.SizeOfImage ); mapping->image.stack_size = nt.opt.hdr32.SizeOfStackReserve; mapping->image.stack_commit = nt.opt.hdr32.SizeOfStackCommit; @@ -737,7 +737,7 @@ static unsigned int get_image_params( struct mapping *mapping, file_pos_t file_s clr_size = nt.opt.hdr64.DataDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR].Size; mapping->image.base = nt.opt.hdr64.ImageBase; - mapping->image.entry_point = nt.opt.hdr64.ImageBase + nt.opt.hdr64.AddressOfEntryPoint; + mapping->image.entry_point = nt.opt.hdr64.AddressOfEntryPoint; mapping->image.map_size = ROUND_SIZE( nt.opt.hdr64.SizeOfImage ); mapping->image.stack_size = nt.opt.hdr64.SizeOfStackReserve; mapping->image.stack_commit = nt.opt.hdr64.SizeOfStackCommit; diff --git a/server/process.c b/server/process.c index 15387a2affa8e7cad9100c5d5df97a5ca1af52d3..0870de5bb26b0cfb3b8839d50d9c24462fc42194 100644 --- a/server/process.c +++ b/server/process.c @@ -1399,7 +1399,7 @@ DECL_HANDLER(init_process_done) process->ldt_copy = req->ldt_copy; process->start_time = current_time; - current->entry_point = image_info->entry_point; + current->entry_point = base + image_info->entry_point; init_process_tracing( process ); generate_startup_debug_events( process ); @@ -1408,7 +1408,7 @@ DECL_HANDLER(init_process_done) if (image_info->subsystem != IMAGE_SUBSYSTEM_WINDOWS_CUI) process->idle_event = create_event( NULL, NULL, 0, 1, 0, NULL ); if (process->debug_obj) set_process_debug_flag( process, 1 ); - reply->entry = image_info->entry_point; + reply->entry = current->entry_point; reply->suspend = (current->suspend || process->suspend); } diff --git a/server/protocol.def b/server/protocol.def index b4049eb90e7e9aae57a85ed8849198e8f0d88a7c..133d6ad055289659274d17e0d7c649e49d735e6c 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -783,10 +783,10 @@ typedef union typedef struct { client_ptr_t base; - client_ptr_t entry_point; - mem_size_t map_size; mem_size_t stack_size; mem_size_t stack_commit; + unsigned int entry_point; + unsigned int map_size; unsigned int zerobits; unsigned int subsystem; unsigned short subsystem_minor; diff --git a/server/trace.c b/server/trace.c index 447710e8f8030047d703b1f4eac3b61c358b4637..4110b740621feb80f769bac42e00ec7421671a8c 100644 --- a/server/trace.c +++ b/server/trace.c @@ -1354,17 +1354,15 @@ static void dump_varargs_pe_image_info( const char *prefix, data_size_t size ) fprintf( stderr, "%s{", prefix ); dump_uint64( "base=", &info.base ); - dump_uint64( ",entry_point=", &info.entry_point ); - dump_uint64( ",map_size=", &info.map_size ); dump_uint64( ",stack_size=", &info.stack_size ); dump_uint64( ",stack_commit=", &info.stack_commit ); - fprintf( stderr, ",zerobits=%08x,subsystem=%08x,subsystem_minor=%04x,subsystem_major=%04x" + fprintf( stderr, ",entry_point=%08x,map_size=%08x,zerobits=%08x,subsystem=%08x,subsystem_minor=%04x,subsystem_major=%04x" ",osversion_major=%04x,osversion_minor=%04x,image_charact=%04x,dll_charact=%04x,machine=%04x" ",contains_code=%u,image_flags=%02x" ",loader_flags=%08x,header_size=%08x,file_size=%08x,checksum=%08x}", - info.zerobits, info.subsystem, info.subsystem_minor, info.subsystem_major, - info.osversion_major, info.osversion_minor, info.image_charact, info.dll_charact, - info.machine, info.contains_code, info.image_flags, info.loader_flags, + info.entry_point, info.map_size, info.zerobits, info.subsystem, info.subsystem_minor, + info.subsystem_major, info.osversion_major, info.osversion_minor, info.image_charact, + info.dll_charact, info.machine, info.contains_code, info.image_flags, info.loader_flags, info.header_size, info.file_size, info.checksum ); remove_data( min( size, sizeof(info) )); }