Mercurial > mplayer.hg
changeset 21462:bd6a451d2588
mmap memory area for generated code to avoid crashes on machines which
support noexec
author | reimar |
---|---|
date | Sun, 03 Dec 2006 20:26:00 +0000 |
parents | 71235c49d6ac |
children | c355981eebfd |
files | loader/win32.c |
diffstat | 1 files changed, 9 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/loader/win32.c Sun Dec 03 19:49:39 2006 +0000 +++ b/loader/win32.c Sun Dec 03 20:26:00 2006 +0000 @@ -70,6 +70,9 @@ #include <kstat.h> #endif +#include <sys/mman.h> +#include "osdep/mmap_anon.h" + #if HAVE_VSSCANF int vsscanf( const char *str, const char *format, va_list ap); #else @@ -5299,14 +5302,18 @@ #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;