From 335276ab6b9f4b7292a440747a902e8d73efa657 Mon Sep 17 00:00:00 2001 From: Marcus Meissner Date: Tue, 24 Nov 1998 20:22:53 +0000 Subject: [PATCH] Adjust broken entrypoint addresses. (win98 notepad.exe) --- loader/pe_image.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/loader/pe_image.c b/loader/pe_image.c index 64ece28908..70df46fee7 100644 --- a/loader/pe_image.c +++ b/loader/pe_image.c @@ -600,6 +600,15 @@ static BOOL32 PE_MapImage( PDB32 *process,WINE_MODREF *wm, OFSTRUCT *ofs, DWORD *(IMAGE_NT_HEADERS *)(load_addr + dos_header->e_lfanew) = *nt_header; memcpy(PE_SECTIONS(load_addr),PE_SECTIONS(hModule),sizeof(IMAGE_SECTION_HEADER)*nt_header->FileHeader.NumberOfSections); + /* FIXME: Some binaries seems to have an AOEP below the base of code + * (win98 notepad.exe ?). Fix it up. + */ + if (nt_header->OptionalHeader.AddressOfEntryPointOptionalHeader.BaseOfCode) { + FIXME(win32,"AddressOfEntryPoint (0x%08lx) is below BaseOfCode (0x%08lx). Setting to BaseOfCode (expect crash).\n",nt_header->OptionalHeader.AddressOfEntryPoint,nt_header->OptionalHeader.BaseOfCode); + + /* Note use of the copied nt header, which is used later */ + PE_HEADER(wm->module)->OptionalHeader.AddressOfEntryPoint=nt_header->OptionalHeader.BaseOfCode; + } pe_seg = PE_SECTIONS(hModule); for (i = 0; i < nt_header->FileHeader.NumberOfSections; i++, pe_seg++) {