Je suis en train d'apprendre à propos de la destruction de la pile et j'ai trouvé un exemple qui, pour moi, ne fonctionne pas comme prévu. J'ai le code suivant:Des octets supplémentaires sur la pile lors de la tentative d'écrasement de la pile dans C
#include <stdio.h>
GetInput() {
char buffer[8];
gets(buffer);
puts(buffer);
}
main() {
GetInput();
return 0;
}
lors de l'exécution du code GDB avec des points d'arrêt à « GetInput() » et « gets (buffer) » et l'affichage de la pile au premier et le deuxième point de rupture me donne la suivant:
En regardant la pile, 20 octets y sont poussés. Ce 20 octets devrait être le suivant: 8 octets pour le tampon, 4 octets pour l'ancienne valeur de EBP et 4 autres octets pour l'adresse de retour. et il y a encore 4 octets dont je ne suis pas sûr d'où il vient. Quelqu'un pourrait-il s'il vous plaît expliquer pourquoi est-il 20 octets au lieu de 16
Quel est le type de retour 'GetInput'? Que signifie * EBP *? En général, le mieux est de vérifier le code d'assemblage. https://en.wikipedia.org/wiki/Call_stack – tilz0R
@ tilz0R EBP est un registre de pointeur de données de pile. –
Avez-vous désactivé la protection/détection de destruction de pile lors de la construction? –