Oppure

Loading
30/07/10 11:14
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. Posto il source di un piccolo programmino e gli indirizzi in memoria interessati.
(gdb) x/50xw buffer
0xbffff35c:	0x41414141	0x41414141	0x41414141	0x41414141
0xbffff36c:	0x41414141	0x41414141	0x41414141	0x41414141
0xbffff37c:	0x41414141	0x41414141	0x41414141	0x41414141
0xbffff38c:	0x00004141	0xb7fcb324	0xb7fcaff4	0xbffff3b8
0xbffff39c:	0x080484bc	0xbffff601	0xb7ff10c0	0x0804850b
0xbffff3ac:	0xb7fcaff4	0x08048500	0x00000000	0xbffff438
0xbffff3bc:	0xb7e8bbd6	0x00000002	0xbffff464	0xbffff470
0xbffff3cc:	0xb7fe1858	0xbffff420	0xffffffff	0xb7ffeff4
0xbffff3dc:	0x08048288	0x00000001	0xbffff420	0xb7ff06b6
0xbffff3ec:	0xb7fffab0	0xb7fe1b48	0xb7fcaff4	0x00000000
0xbffff3fc:	0x00000000	0xbffff438	0xef2ffd66	0xc1bf4b76
0xbffff40c:	0x00000000	0x00000000	0x00000000	0x00000002
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:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int check_a(char *password){
	int value =0;
	char *buffer[12];
	strcpy(buffer,password);
	if (strcmp(buffer,"biscott")==0)
		value=1;
	return value;
}

int main(int argc, char *argv[]){
	if (argc==1)
		return 1;
	if(check_a(argv[1])==0)
		printf ("Doesn't work -.-''\n");
	else
		printf ("Oh yeah,works :D\n");
	return 0;
}

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
aaa
30/07/10 11:21
fabi3194
Chiedo scusa, ho controllato sul manuale, l'indirizzo del parametro è dopo il valore di ritorno...quindi all'indirizzo 0xbffff601
aaa
01/08/10 9:04
nessuno
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
01/08/10 16:47
Saladino
C'è google :

pages.cs.wisc.edu/~hasti/cs368/CppTutorial/NOTES/…


cs.umbc.edu/~chang/cs313.s02/…

google.it/…


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'.



aaa