From: Sebastian Lackner Subject: kernel32: Update VirtualAddress of resource section in write_raw_resources. Message-Id: <539F2162.7050402@fds-team.de> Date: Mon, 16 Jun 2014 18:54:58 +0200 Fixes http://bugs.winehq.org/show_bug.cgi?id=30432 --- dlls/kernel32/resource.c | 1 + dlls/kernel32/tests/resource.c | 6 ++++++ 2 files changed, 7 insertions(+) From b52bef65b7046fa059a32c794a740ee062f2d2e6 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sun, 15 Jun 2014 23:38:38 +0200 Subject: kernel32: Update VirtualAddress of resource section in write_raw_resources. --- dlls/kernel32/resource.c | 1 + dlls/kernel32/tests/resource.c | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/dlls/kernel32/resource.c b/dlls/kernel32/resource.c index e829f28..ecd599f 100644 --- a/dlls/kernel32/resource.c +++ b/dlls/kernel32/resource.c @@ -1554,6 +1554,7 @@ static BOOL write_raw_resources( QUEUEDUPDATES *updates ) sec->SizeOfRawData = section_size; sec->Misc.VirtualSize = virtual_section_size; nt->OptionalHeader.SizeOfImage += rva_delta; + nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress = sec->VirtualAddress; nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].Size = res_size.total_size; nt->OptionalHeader.SizeOfInitializedData = get_init_data_size( write_map->base, mapping_size ); } diff --git a/dlls/kernel32/tests/resource.c b/dlls/kernel32/tests/resource.c index f94fed6..43551fa 100644 --- a/dlls/kernel32/tests/resource.c +++ b/dlls/kernel32/tests/resource.c @@ -394,6 +394,7 @@ static void check_exe( const sec_verify *verify ) int i; IMAGE_DOS_HEADER *dos; IMAGE_NT_HEADERS *nt; + IMAGE_OPTIONAL_HEADER *opt; IMAGE_SECTION_HEADER *sec; IMAGE_RESOURCE_DIRECTORY *dir; HANDLE file, mapping; @@ -415,6 +416,7 @@ static void check_exe( const sec_verify *verify ) goto end; nt = (void*) ((BYTE*) dos + dos->e_lfanew); + opt = &nt->OptionalHeader; sec = (void*) &nt[1]; for(i = 0; i < max_sections; i++) @@ -444,6 +446,10 @@ static void check_exe( const sec_verify *verify ) verify->NumberOfNamedEntries, dir->NumberOfNamedEntries); ok( dir->NumberOfIdEntries == verify->NumberOfIdEntries, "NumberOfIdEntries should be %d instead of %d\n", verify->NumberOfIdEntries, dir->NumberOfIdEntries); + + ok(opt->DataDirectory[IMAGE_FILE_RESOURCE_DIRECTORY].VirtualAddress == sec[verify->rsrc_section].VirtualAddress, + "VirtualAddress in optional header should be %d instead of %d\n", + sec[verify->rsrc_section].VirtualAddress, opt->DataDirectory[IMAGE_FILE_RESOURCE_DIRECTORY].VirtualAddress); } end: -- 1.7.9.5