NX, DEP & Co. testen



  • Hallo!
    Ich habe einen Athlon 64 und Windows XP SP2, bei dem ich DEP für alle Programme aktiviert habe. Nun habe ich folgendes kleines C-Progrämmchen geschrieben, compiliert und ausgeführt:

    #include <stdio.h>
    main() {
      char* data = "\x90\xC3 <- DATEN"; // NOP & RET
      void (*func)();
      func = data;
      func();
      printf("NX");
      getchar();
      return 0; }
    

    Es wird "NX" angezeigt und nach einem Druck auf [ENTER] schließt das Programm.
    Sollte Windows nicht irgendwie Alarm schlagen? Es werden doch Daten ausgeführt!
    MfG



  • Mal ASM angeguckt?
    Höchstwahrscheinlich wird der Quatsch komplett wegoptimiert.



  • compiled das überhaupt? man kann doch ohne cast einem function-pointer keine beliebige adresse zuweisen



  • Sgt. Nukem schrieb:

    Mal ASM angeguckt?
    Höchstwahrscheinlich wird der Quatsch komplett wegoptimiert.

    Da wird nichts wegoptimiert:

    .file	"nx.c"
    	.def	___main;	.scl	2;	.type	32;	.endef
    	.text
    LC0:
    	.ascii "\220\303 <- DATEN\0"
    LC1:
    	.ascii "NX\0"
    .globl _main
    	.def	_main;	.scl	2;	.type	32;	.endef
    _main:
    	pushl	%ebp
    	movl	%esp, %ebp
    	subl	$24, %esp
    	andl	$-16, %esp
    	movl	$0, %eax
    	movl	%eax, -12(%ebp)
    	movl	-12(%ebp), %eax
    	call	__alloca
    	call	___main
    	movl	$LC0, -4(%ebp)
    	movl	-4(%ebp), %eax
    	movl	%eax, -8(%ebp)
    	movl	-8(%ebp), %eax
    	call	*%eax
    	subl	$12, %esp
    	pushl	$LC1
    	call	_printf
    	addl	$16, %esp
    	call	_getchar
    	movl	$0, %eax
    	leave
    	ret
    	.def	_getchar;	.scl	2;	.type	32;	.endef
    	.def	_printf;	.scl	2;	.type	32;	.endef
    

    net schrieb:

    compiled das überhaupt? man kann doch ohne cast einem function-pointer keine beliebige adresse zuweisen

    Ja, das compiliert. Es gibt allerdings eine Warnung:

    nx.c: In function `main':
    nx.c:5: warning: assignment from incompatible pointer type

    Vielleicht ist das der Grund?



  • Hektor schrieb:

    Es gibt allerdings eine Warnung:

    nx.c: In function `main':
    nx.c:5: warning: assignment from incompatible pointer type

    Vielleicht ist das der Grund?

    😕


Anmelden zum Antworten