Le compilateur moderne GCC est si puissant qu'il peut même empêcher le débordement de tampon en phase de compilation, de sorte que OS ne peut pas exécuter de code sur l'espace de pile.L'art du compilateur sur débordement de tampon
Par exemple:
void function(char *str)
{
char buffer[16];
strncpy(buffer, str, 256);
}
void main()
{
char large_string[256];
int i;
for(i = 0; i < 256; i++)
large_string[i] = 'A';
function(large_string);
}
La seule façon que je peux obtenir le 0x41414141 magique est de régler le paramètre de compilation GCC tels que:
gcc -fno-stack-protector -z execstack stackoverflow.c -o stackoverflow
(je l'ai testé sur ubuntu 10.04 x86 lucide boîte de 32bits
Y at-il un moyen de contourner la protection de destruction de la pile GCC?
À quelle limitation faites-vous référence, et pourquoi voulez-vous contourner ce que c'est? –
Vous voulez intentionnellement corrompre la pile? Pourquoi? Et votre code a un bug, btw. Vous avez oublié de terminer la chaîne 'large_string' par NULL. Le 'strcpy()' ne sera pas limité à seulement 255 octets. –
Je pense que vous voulez demander s'il est possible de contourner la protection de la pile gcc, si c'est le cas, vous devriez éditer la question pour que cela soit clair. – iabdalkader