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) ));
 }