la question sous-instruction x86

voix
0

Supposons que nous avons le code suivant c

void fun(void){
    printf(this is fun\n);
}

Ensuite, nous compilons avec le mode de débogage, nous obtenons le code suivant désassembler:

push ebp
mov ebp,esp
sub esp, 0xc0
...

Ok, nous discutons juste:

sub esp, 0xc0

Ma question est: pourquoi est la valeur par défaut ici 0xc0, pas l'autre valeur, tels que 0xF0, 0xFF... et ainsi de suite?

Créé 18/12/2018 à 10:04
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Ceci est une configuration standard cadre de pile, enregistrer le pointeur de la pile puis en utilisant RASE pour l'indexation. Le montant soustrait ESP est ce qui est alloué pour le stockage variable locale de la procédure, et les variables locales seront accessibles en faisant référence [EBP- ??].

Sans voir le code de votre procédure, il est difficile de dire pourquoi il alloue beaucoup de stockage. Il n'y a pas de valeur par défaut utilisé par le compilateur, il alloue toujours exactement ce qui est nécessaire. Il peut le faire parce que les types de variables locales doivent être explicitement déclarés, et le compilateur sait à quel point l'espace est utilisé par chaque type. Il n'y a pas aléatoire ou incertitude, et aucun avantage pour l'allocation de stockage supplémentaire. Je vois peux pas comment la taille de randomiser stockage variable locale empêcherait toute forme d'attaque à base de pile. La plupart des processeurs modernes ont pris des mesures de prévention de l'exécution des données matérielles en place, ce qui rend ces attaques de toute façon impossible.

Créé 18/12/2018 à 11:43
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more