[PATCH v2] ntdll: Cache LDR_IMAGE_IS_DLL for InitDLL
Myah Caron
qsniyg at protonmail.com
Thu Apr 2 14:45:48 CDT 2020
Thanks for the suggestion! I don't think it's correct though, because under Windows 10, it will still load if BaseAddress (module) has been modified, even if it's set to 0.
See the test case here: https://github.com/qsniyg/wine_dll_load_test , uncomment the BaseAddress = 0 line in dll2.c
‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Thursday, April 2, 2020 12:57 AM, Ilie Halip <ilie.halip at gmail.com> wrote:
> You could alternatively check if the IMAGE_FILE_DLL flag is set in the
> NT header, maybe something like
> this (not compiled, not tested):
>
> --- a/dlls/ntdll/loader.c
> +++ b/dlls/ntdll/loader.c
> @@ -1309,7 +1309,14 @@ static NTSTATUS MODULE_InitDLL( WINE_MODREF
> *wm, UINT reason, LPVOID lpReserved
>
> if (wm->ldr.Flags & LDR_DONT_RESOLVE_REFS) return STATUS_SUCCESS;
>
> if (wm->ldr.TlsIndex != -1) call_tls_callbacks(
>
>
> wm->ldr.BaseAddress, reason );
>
> - if (!entry || !(wm->ldr.Flags & LDR_IMAGE_IS_DLL)) return STATUS_SUCCESS;
>
> - if (!entry) return STATUS_SUCCESS;
>
> - if (!(wm->ldr.Flags & LDR_IMAGE_IS_DLL))
>
> - {
>
> - if (RtlImageNtHeader(module)->FileHeader.Characteristics &
>
>
>
> IMAGE_FILE_DLL)
>
> - TRACE("... warning: mismatch between flags ... continuing
>
>
>
> anyway ...");
>
> - else
>
>
> - return STATUS_SUCCESS;
>
>
> - }
>
> if (TRACE_ON(relay))
> {
>
> Not sure which one is the better approach, though.
>
More information about the wine-devel
mailing list