J'essaie de transformer certains des programmes en gera's Insecure Programming by example en applications client/serveur qui pourraient être utilisées pour capturer les scénarios d'indicateur pour enseigner le développement d'exploit. Le problème que j'ai est que je ne suis pas sûr comment Visual Studio (j'utilise 2005 Professional Edition) décide où allouer des variables sur la pile.Comment Visual Studio détermine-t-il l'ordre dans lequel les variables de pile doivent être allouées?
Quand je compiler et exécuter l'exemple 1:
int main() {
int cookie;
char buf[80];
printf("buf: %08x cookie: %08x\n", &buf, &cookie);
gets(buf);
if (cookie == 0x41424344)
printf("you win!\n");
}
Je reçois le résultat suivant:
buf: 0012ff14 cookie: 0012ff64
buf
commence à une adresse quatre-vingts octets inférieur à cookie
, et les quatre octets qui sont copiés dans buf
après les quatre-vingt premiers apparaîtra dans cookie
.
Le problème que j'ai est quand je place ce code dans une autre fonction. Lorsque je compile et exécute le code suivant, j'obtiens un résultat différent: buf
apparaît à une adresse supérieure à cookie
.
void ClientSocketHandler(SOCKET cs){
int cookie;
char buf[80];
char stringToSend[160];
int numBytesRecved;
int totalNumBytes;
sprintf(stringToSend,"buf: %08x cookie: %08x\n",&buf,&cookie);
send(cs,stringToSend,strlen(stringToSend),NULL);
Le résultat est:
buf: 0012fd00 cookie: 0012fcfc
Maintenant, il n'y a aucun moyen de définir cookie par l'intermédiaire des données arbitraires buf
écraser. Est-il possible de dire à Visual Studio d'allouer cookie
avant buf
? Est-il possible de dire à l'avance comment les variables seront attribuées?
Merci,
Jason
Ah, d'accord. Oui, je suppose que les structures devront faire. Merci pour l'aide.