Ecco il succo del codice:
main(){
char s1[64], s2[64];
int a = 0, b = 0;
FILE *fp1, fp2*;
char temp;
scanf("%s", s1);
scanf("%s", s2);
...
//some checks happen, fp1 is opened to s1, fp2 is opened to s2,
temp = fgetc(fp1);
while(temp != EOF) {
fputc(temp, fp2);
temp = fgetc(fp1);
}
...
}
Nel primo scanf posso sovrascrivere l'EIP salvato e tutto va bene finché non passo attraverso quella sezione centrale. Quando il primo (sto usando un file vuoto per s1 quindi è anche l'unica volta che viene eseguito) fgetc
restituisce la memoria in cui EIP è stato modificato da 0x ----- --- a 0xff ------. Quando lo passo, sembra che succeda in /lib/ld-linux.so.2
Poiché questo è un suggerimento per i compiti a casa, è strongmente preferito, ma se vuoi vedere l'intero c
, binary
o asm
ecco il link .