mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-01-28 22:04:43 -08:00
mscoree-CorValidateImage: Only update entry point for IL-only images on 32-bit.
This commit is contained in:
parent
13a3cadc66
commit
d28a7ba29e
@ -1,14 +1,14 @@
|
||||
From 813e87c2f979a552a0573abfd6afcfcec8584edf Mon Sep 17 00:00:00 2001
|
||||
From 8a95b2a4647c5a92cc2f91b3baaaf2b9756176b1 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Thu, 2 Apr 2015 02:38:29 +0200
|
||||
Subject: mscoree: Implement _CorValidateImage.
|
||||
|
||||
---
|
||||
dlls/mscoree/mscoree_main.c | 71 +++++++++++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 69 insertions(+), 2 deletions(-)
|
||||
dlls/mscoree/mscoree_main.c | 74 +++++++++++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 72 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/mscoree/mscoree_main.c b/dlls/mscoree/mscoree_main.c
|
||||
index 8b46fd5..6e02c79 100644
|
||||
index 8b46fd5..3644a18 100644
|
||||
--- a/dlls/mscoree/mscoree_main.c
|
||||
+++ b/dlls/mscoree/mscoree_main.c
|
||||
@@ -21,11 +21,14 @@
|
||||
@ -26,7 +26,7 @@ index 8b46fd5..6e02c79 100644
|
||||
#include "winuser.h"
|
||||
#include "winnls.h"
|
||||
#include "winreg.h"
|
||||
@@ -259,8 +262,72 @@ VOID WINAPI _CorImageUnloading(PVOID imageBase)
|
||||
@@ -259,8 +262,75 @@ VOID WINAPI _CorImageUnloading(PVOID imageBase)
|
||||
|
||||
HRESULT WINAPI _CorValidateImage(PVOID* imageBase, LPCWSTR imageName)
|
||||
{
|
||||
@ -42,7 +42,8 @@ index 8b46fd5..6e02c79 100644
|
||||
+ return E_INVALIDARG;
|
||||
+
|
||||
+ nt = RtlImageNtHeader(*imageBase);
|
||||
+ if (!nt) return STATUS_INVALID_IMAGE_FORMAT;
|
||||
+ if (!nt)
|
||||
+ return STATUS_INVALID_IMAGE_FORMAT;
|
||||
+
|
||||
+ cliheader = RtlImageDirectoryEntryToData(*imageBase, TRUE, IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR, &size);
|
||||
+ if (!cliheader || size < sizeof(*cliheader))
|
||||
@ -54,8 +55,7 @@ index 8b46fd5..6e02c79 100644
|
||||
+
|
||||
+ if (nt->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
|
||||
+ {
|
||||
+ /* Clear out the entrypoint if nonzero */
|
||||
+ if ((cliheader->Flags & COMIMAGE_FLAGS_ILONLY) && nt->OptionalHeader.AddressOfEntryPoint)
|
||||
+ if (cliheader->Flags & COMIMAGE_FLAGS_ILONLY)
|
||||
+ {
|
||||
+ DWORD *entry = &nt->OptionalHeader.AddressOfEntryPoint;
|
||||
+ DWORD old_protect;
|
||||
@ -75,22 +75,25 @@ index 8b46fd5..6e02c79 100644
|
||||
+ if (!(cliheader->Flags & COMIMAGE_FLAGS_ILONLY))
|
||||
+ return STATUS_INVALID_IMAGE_FORMAT;
|
||||
+
|
||||
+ FIXME("conversion of IMAGE_NT_HEADERS32 -> IMAGE_NT_HEADERS64 header not implemented\n");
|
||||
+ FIXME("conversion of IMAGE_NT_HEADERS32 -> IMAGE_NT_HEADERS64 not implemented\n");
|
||||
+ return STATUS_NOT_IMPLEMENTED;
|
||||
+ }
|
||||
+
|
||||
+#else
|
||||
+ if (nt->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
|
||||
+ {
|
||||
+ DWORD *entry = &nt->OptionalHeader.AddressOfEntryPoint;
|
||||
+ DWORD old_protect;
|
||||
+ if (cliheader->Flags & COMIMAGE_FLAGS_ILONLY)
|
||||
+ {
|
||||
+ DWORD *entry = &nt->OptionalHeader.AddressOfEntryPoint;
|
||||
+ DWORD old_protect;
|
||||
+
|
||||
+ if (!VirtualProtect(entry, sizeof(*entry), PAGE_READWRITE, &old_protect))
|
||||
+ return E_UNEXPECTED;
|
||||
+ *entry = (nt->FileHeader.Characteristics & IMAGE_FILE_DLL) ?
|
||||
+ ((DWORD)&_CorDllMain - (DWORD)*imageBase) : (DWORD)&_CorExeMain - (DWORD)*imageBase;
|
||||
+ if (!VirtualProtect(entry, sizeof(*entry), old_protect, &old_protect))
|
||||
+ return E_UNEXPECTED;
|
||||
+ if (!VirtualProtect(entry, sizeof(*entry), PAGE_READWRITE, &old_protect))
|
||||
+ return E_UNEXPECTED;
|
||||
+ *entry = (nt->FileHeader.Characteristics & IMAGE_FILE_DLL) ?
|
||||
+ ((DWORD)&_CorDllMain - (DWORD)*imageBase) : ((DWORD)&_CorExeMain - (DWORD)*imageBase);
|
||||
+ if (!VirtualProtect(entry, sizeof(*entry), old_protect, &old_protect))
|
||||
+ return E_UNEXPECTED;
|
||||
+ }
|
||||
+
|
||||
+ return STATUS_SUCCESS;
|
||||
+ }
|
||||
@ -102,5 +105,5 @@ index 8b46fd5..6e02c79 100644
|
||||
|
||||
HRESULT WINAPI GetCORSystemDirectory(LPWSTR pbuffer, DWORD cchBuffer, DWORD *dwLength)
|
||||
--
|
||||
2.3.3
|
||||
2.3.5
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user