From 190f0807911663b82006f86134715bed99a2238e Mon Sep 17 00:00:00 2001 From: reimar Date: Sun, 3 Dec 2006 20:26:00 +0000 Subject: mmap memory area for generated code to avoid crashes on machines which support noexec git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21478 b3059339-0415-0410-9bf9-f77b7e298cf2 --- loader/win32.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'loader') diff --git a/loader/win32.c b/loader/win32.c index 60b35d724f..aacd71ed4f 100644 --- a/loader/win32.c +++ b/loader/win32.c @@ -70,6 +70,9 @@ for DLL to know too much about its environment. #include #endif +#include +#include "osdep/mmap_anon.h" + #if HAVE_VSSCANF int vsscanf( const char *str, const char *format, va_list ap); #else @@ -5299,14 +5302,18 @@ static void ext_stubs(void) #define MAX_STUB_SIZE 0x60 #define MAX_NUM_STUBS 200 static int pos=0; -static char extcode[MAX_NUM_STUBS * MAX_STUB_SIZE]; +static char *extcode = NULL; static void* add_stub(void) { int i; int found = 0; // generated code in runtime! - char* answ = extcode + pos * MAX_STUB_SIZE; + char* answ; + if (!extcode) + extcode = mmap_anon(NULL, MAX_NUM_STUBS * MAX_STUB_SIZE, + PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE, 0); + answ = extcode + pos * MAX_STUB_SIZE; if (pos >= MAX_NUM_STUBS) { printf("too many stubs, expect crash\n"); return NULL; -- cgit v1.2.3