Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Chiarimento sui parametri
Forum - C/C++ - Chiarimento sui parametri

Avatar
fabi3194 (Ex-Member)
Expert


Messaggi: 206
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 13:14
Venerdì, 30/07/2010
Salve a tutti, programmando con il c mi sto "buttando" sulle vulerabilità riguardanti la memoria; tuttavia non riesco a capire come trovare il parametro passato alle funzioni. Posto il source di un piccolo programmino e gli indirizzi in memoria interessati.
Codice sorgente - presumibilmente Plain Text

  1. (gdb) x/50xw buffer
  2. 0xbffff35c:     0x41414141      0x41414141      0x41414141      0x41414141
  3. 0xbffff36c:     0x41414141      0x41414141      0x41414141      0x41414141
  4. 0xbffff37c:     0x41414141      0x41414141      0x41414141      0x41414141
  5. 0xbffff38c:     0x00004141      0xb7fcb324      0xb7fcaff4      0xbffff3b8
  6. 0xbffff39c:     0x080484bc      0xbffff601      0xb7ff10c0      0x0804850b
  7. 0xbffff3ac:     0xb7fcaff4      0x08048500      0x00000000      0xbffff438
  8. 0xbffff3bc:     0xb7e8bbd6      0x00000002      0xbffff464      0xbffff470
  9. 0xbffff3cc:     0xb7fe1858      0xbffff420      0xffffffff      0xb7ffeff4
  10. 0xbffff3dc:     0x08048288      0x00000001      0xbffff420      0xb7ff06b6
  11. 0xbffff3ec:     0xb7fffab0      0xb7fe1b48      0xb7fcaff4      0x00000000
  12. 0xbffff3fc:     0x00000000      0xbffff438      0xef2ffd66      0xc1bf4b76
  13. 0xbffff40c:     0x00000000      0x00000000      0x00000000      0x00000002
  14. 0xbffff41c:     0x080483a0      0x00000000


Ok, gli 0x41414141 sono i valor della variabile buffer (che nell'indirizzo 0xbffff38c "straripano" nella variabile value... all'indirizzo 0xbffff39c c'è l'indirizzo di ritorno...all'indirizzo 0xbffff3b8 c'è il sfp.
Ora allego il source:
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int check_a(char *password){
  6.         int value =0;
  7.         char *buffer[12];
  8.         strcpy(buffer,password);
  9.         if (strcmp(buffer,"biscott")==0)
  10.                 value=1;
  11.         return value;
  12. }
  13.  
  14. int main(int argc, char *argv[]){
  15.         if (argc==1)
  16.                 return 1;
  17.         if(check_a(argv[1])==0)
  18.                 printf ("Doesn't work -.-''\n");
  19.         else
  20.                 printf ("Oh yeah,works :D\n");
  21.         return 0;
  22. }


Ora, le mie domande sono due:
1) Dov'è il parametro passato alla funzione check_a? Dovrebbe essere nei vicino all'indirizzo di ritorno ma non lo trovo...
2) Cosa c'è agli indirizzi 0xbffff38d e 0xbffff38e?
Spero di essere stato chiaro, grazie a tutti per l'attenzione :D


Java programmer
PM Quote
Avatar
fabi3194 (Ex-Member)
Expert


Messaggi: 206
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 13:21
Venerdì, 30/07/2010
Chiedo scusa, ho controllato sul manuale, l'indirizzo del parametro è dopo il valore di ritorno...quindi all'indirizzo 0xbffff601


Java programmer
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:04
Domenica, 01/08/2010
Prima di rispondere al tuo quesito, perchè utilizzi

char *buffer[12];

nella funzione?

Questo è un "vettore di 12 puntatori a char" ... è quello che volevi oppure intendevi un buffer di 12 caratteri? In questo caso dovrebbe essere

char buffer[12];


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Saladino (Member)
Pro


Messaggi: 90
Iscritto: 30/05/2010

Segnala al moderatore
Postato alle 18:47
Domenica, 01/08/2010
C'è google :

http://pages.cs.wisc.edu/~hasti/cs368/CppTutorial/NOTES/PA ...


http://www.cs.umbc.edu/~chang/cs313.s02/stack.shtml

http://www.google.it/search?q=stack+&btnG=Cerca&hl=it&sa=2


Testo quotato

Postato originariamente da fabi3194:

Salve a tutti, programmando con il c mi sto "buttando" sulle vulerabilità riguardanti la memoria; tuttavia non riesco a capire come trovare il parametro passato alle funzioni.



Le cose prima si capiscono e poi si fanno.
Non ci si 'butta'.





Ciao
PM Quote