Ich versuche zu lernen Shellcode innerhalb eines Programms auszuführen, aber ich kann nicht einmal den einfachsten Code ausführen. Der folgende Code soll nur das Terminal verlassen, wenn es laufen gelassen:Eine Zeichenkette als Funktion übergeben
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/mman.h>
char exitcode[] = "\xb0\x01\x31\xdb\xcd\x80";
int main() {
int (*func)();
func = (int (*)())exitcode;
(int)(*func)();
return 0;
}
Aber alles, was ich bekommen, ist eine segfault. GDB sagt, es passiert, wenn das Programm auf den Speicherort von exitcode zugreift [at (int) (* func)(); ], aber ich bin mir nicht sicher, warum dies ein Problem verursacht. Ich betreibe ein 64-Bit Linux Mint OS. Jede Hilfe wird sehr geschätzt.
Wenn der Speicher für den Shellcode in einem nicht ausführbaren Bereich ist, wird dies nicht funktionieren. Die meisten modernen Betriebssysteme werden dies wahrscheinlich nicht erlauben. Sie sollten auch sicherstellen, dass der Shellcode für Ihre Architektur korrekt ist. –
Ist das für C oder C++? Semantik und mögliche Antworten können sich unterscheiden. – Olaf
Einen Objektzeiger auf einen Funktionszeiger werfen ist _undefined behaviour_. Alles kann passieren – Olaf