<< Segmentation de la mémoire | Les buffer-overflows >> |
<< Segmentation de la mémoire | Les buffer-overflows >> |
FrizN | 06/01/14 10:03 |
On accède au premier argument à ebp+8, au deuxième à ebp+12, etc. On accède donc au i-ème argument par ebp + 8 + 4*i Si les arguments étaient rangés dans l'autre sens, il faudrait connaitre le nombre d'arguments, le premier serait par exemple à ebp + 8 + (nb arg - 1)*4, donc sans connaître nbarg on ne pourrait pas retrouver les arguments. |
|
Anonyme | 05/01/14 23:33 |
Merci, c'est plus clair. Cependant, "on ne connait pas le nombre d'arguments passés a priori", et alors, je ne comprends pas où est le problème ? |
|
FrizN | 05/01/14 17:34 |
2. Convention encore une fois, mais c'est également la manière logique de faire, puisque pour certaines fonctions on ne connait pas le nombre d'arguments passés a priori (c'est par exemple le cas de printf). |
|
FrizN | 05/01/14 17:34 |
1. Les variables locales sont à ebp - X et les arguments commencent à partir de ebp + 8, oui. L'ebp sauvegardé est bien une donnée locale à la fonction en cours (lié à son site d'appel tout comme l'adresse de retour). Il faut bien garder en tête que tout ceci n'est que convention omissible, et seulement valable pour les archi intel. |