J'ai un exercice qui me demande de produire un seg.fault. Dans ma compréhension, je peux le faire en débordant le tampon. Donc tout ce que j'ai besoin de faire est de fournir une entrée (Nom) plus grande qu'une certaine taille (couvrant l'adresse de retour). Donc, si buf, i et c contiennent 52 octets et ebp 4, alors l'adresse de retour devrait être après 56 octets. Donc, si je donne une entrée plus grande que 56, cela devrait produire un seg.fault. Est-ce que ma pensée est correcte? J'ai essayé avec ces chiffres, mais il fonctionne encore et sortie correctement. (UNIX 32 bits)Simple Buffer Overflow
#include <stdio.h>
#include <sys/mman.h>
#include <string.h>
#include <stdlib.h>
#define BUFSIZE 44
char grade = '3';
char Name[BUFSIZE];
void readString(char *s) {
char buf[BUFSIZE];
int i = 0;
int c;
while (1) {
c = fgetc(stdin);
if ((c == EOF) || (c == '\n'))
break;
buf[i++] = c;
}
buf[i] = 0;
for (i = 0; i < BUFSIZE; i++)
s[i] = buf[i];
return;
}
int main(void) {
mprotect((void*)((unsigned int)Name & 0xfffff000), 1,
PROT_READ | PROT_WRITE | PROT_EXEC);
printf("What is your name?\n");
readString(Name);
exit(0)
}
Autre segfault: 'int ohno = * ((int *) NULL); printf ("% d", ohno); ' – InternetAussie