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 typeVielleicht ist das der Grund?
-
Hektor schrieb:
Es gibt allerdings eine Warnung:
nx.c: In function `main':
nx.c:5: warning: assignment from incompatible pointer typeVielleicht ist das der Grund?