[MPlayer-dev-eng] amd64 -sws 0 fix (iow: playing with NX bit)
Aurelien Jacobs
aurel at gnuage.org
Fri Jan 21 17:49:08 CET 2005
On Thu, 20 Jan 2005 15:05:06 -0800 (PST)
Trent Piepho <xyzzy at speakeasy.org> wrote:
> On Thu, 20 Jan 2005, Aurelien Jacobs wrote:
> > new feature introduced by amd64, which is called NX bit....
> > Yes, you've got it. The CPU simply prevent the execution of
> > this code which is in a data segment, causing a segfault.
> >
> > Now the question is how to solve this, cleanly ?
> > I can see few options :
> > (5) Probably other solutions, maybe better...
>
> Maybe it is possible to load the generated code via dlopen() or something like
> it?
>
> The following script works for me on ia32, does it work with NX?
>
> cat > dl.s <<EOF
> .text
> .align 4
> .globl foo
> .type foo, at function
> foo:
> .byte 184, 42, 0, 0, 0, 195
> .size foo,6
> EOF
> as -o dl.o dl.s
> ld -Bshareable -o dl.so dl.o
> mv dl.so /tmp # need to know absolute path
> cat > dl_test.c <<EOF
> #include <dlfcn.h>
> main() {
> void *dl = dlopen("/tmp/dl.so", RTLD_LAZY);
> int (*foo)(void) = dlsym(dl, "foo");
> printf("%d should be 42\n", foo()); }
> EOF
> gcc dl_test.c -ldl
> a.out
Yes, this works !
But that's a bit overkill to call an external linker at
runtime just for this !
Aurel
More information about the MPlayer-dev-eng
mailing list