ntdll: Force execute permission again on the stack after clearing it.
This commit is contained in:
parent
6e9a6577c3
commit
58d076b419
|
@ -2423,11 +2423,7 @@ void WINAPI LdrInitializeThunk( ULONG unknown1, ULONG unknown2, ULONG unknown3,
|
|||
status = wine_call_on_stack( attach_process_dlls, wm, NtCurrentTeb()->Tib.StackBase );
|
||||
if (status != STATUS_SUCCESS) goto error;
|
||||
|
||||
/* clear the stack contents before calling the main entry point, some broken apps need that */
|
||||
wine_anon_mmap( NtCurrentTeb()->Tib.StackLimit,
|
||||
(char *)NtCurrentTeb()->Tib.StackBase - (char *)NtCurrentTeb()->Tib.StackLimit,
|
||||
PROT_READ | PROT_WRITE, MAP_FIXED );
|
||||
|
||||
virtual_clear_thread_stack();
|
||||
if (nt->FileHeader.Characteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE) VIRTUAL_UseLargeAddressSpace();
|
||||
return;
|
||||
|
||||
|
|
|
@ -134,6 +134,7 @@ extern unsigned int DIR_get_drives_info( struct drive_info info[MAX_DOS_DRIVES]
|
|||
|
||||
/* virtual memory */
|
||||
extern NTSTATUS virtual_alloc_thread_stack( void *base, SIZE_T stack_size );
|
||||
extern void virtual_clear_thread_stack(void);
|
||||
extern BOOL virtual_handle_stack_fault( void *addr );
|
||||
extern NTSTATUS VIRTUAL_HandleFault(LPCVOID addr);
|
||||
extern void VIRTUAL_SetForceExec( BOOL enable );
|
||||
|
|
|
@ -1242,6 +1242,21 @@ done:
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* virtual_clear_thread_stack
|
||||
*
|
||||
* Clear the stack contents before calling the main entry point, some broken apps need that.
|
||||
*/
|
||||
void virtual_clear_thread_stack(void)
|
||||
{
|
||||
void *stack = NtCurrentTeb()->Tib.StackLimit;
|
||||
size_t size = (char *)NtCurrentTeb()->Tib.StackBase - (char *)NtCurrentTeb()->Tib.StackLimit;
|
||||
|
||||
wine_anon_mmap( stack, size, PROT_READ | PROT_WRITE, MAP_FIXED );
|
||||
if (force_exec_prot) mprotect( stack, size, PROT_READ | PROT_WRITE | PROT_EXEC );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* VIRTUAL_HandleFault
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue