|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
![]() ![]() ![]() Raymond Inscription : mai 2007 Messages : 9 011 ![]() |
L'objectif de cette série d'articles d'Alex Darby sur la programmation « bas-niveau » est de permettre aux développeurs ayant déjà des connaissances de la programmation C++ de mieux comprendre comment ses programmes sont exécutés en pratique. Ce troisième article explique le rôle et le fonctionnement de la Pile, son usage lors de l'appel d'une fonction, la gestion des variables locales ainsi que la gestion de la valeur de retour d'une fonction.
Programme d'étude sur le C++ bas niveau n° 3 : la Pile Connaissiez-vous bien le fonctionnement de la Pile et des appels de fonctions ? Connaissez-vous d'autres détails important mais mal connus sur la Pile ?Retrouver l'ensemble des articles de cette série sur la page d'index.
__________________
Raymond Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi ![]() Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.e-verbe Un logiciel de conjugaison des verbes de la langue française.Ma page personnelle sur DVP. |
|
|
30
|
|
|
#2 |
|
Nouveau Membre du Club
![]() Guillaume BonnotIngénieur développement logiciels Inscription : janvier 2012 Messages : 17 ![]() |
Article très intéressant !
![]() Néanmoins je me demande à quoi servent les 64 octets réservés au début de la Stack Frame :/ En tout cas ça à l'air très pratique pour hacker (sens premier du terme bien-sur) |
|
|
00
|
|
|
#3 |
|
Débutant
Inscription : mai 2006 Messages : 615 ![]() |
c'est quoi le sens premier et le sens second du terme ??
|
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Guillaume BelzBiochimiste Inscription : novembre 2008 Messages : 5 311 ![]() |
Il fait référence au white hack (modifier du code) et black hack (piratage)
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP. Ma page personnelle avec la liste de mes articles - Mon blog sur le C++, Qt et les GPU. Je suis régulièrement sur le chat pour les questions C++/Qt. Apprendre Qt 5 : vidéos d'installation (YouTube), extraites du livre Créer des applications avec Qt 5. |
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Guillaume BonnotIngénieur développement logiciels Inscription : janvier 2012 Messages : 17 ![]() |
En fait, si les 64 octets ne sont jamais utilisés, tu peux y inscrire du code asm et modifier le code original pour qu'il appelle ton code.
La recherche de zones de codes 'vides' est essentielle car il y a beaucoup d'adresses/saut relatifs et donc modifier la longueur du code peut avoir des effets de bords. |
|
|
00
|
|
|
#6 |
|
Débutant
Inscription : mai 2006 Messages : 615 ![]() |
hum ok intéréssant
|
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() |
D'après un commentaire sur le site original, les 64 octets sont pour le "Edit and Continue" du debugger.
Aussi, il y a une erreur dans l'article, qui a été traduite telle quelle: La convention d'appel pour les fonctions non-membres / C n'est pas stdcall, mais cdecl.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
|
|
#8 | ||
![]() ![]() ![]() Guillaume BelzBiochimiste Inscription : novembre 2008 Messages : 5 311 ![]() |
Je dois bien avouer que n'étant pas du tout un spécialiste des fonctions d'appels, j'aurais du mal à me prononcer.
Premier point, dans une traduction, on traduit, on modifie pas le texte Pour cette histoire de fonction d'appel, ça me semble pas si évident (et faux de la part de l'auteur). Une petite recherche très rapide me le confirme. A priori, pour linux, gcc utilise bien cdecl par défaut, mais sous windows (comme dans l'article), c'est bien stdcall. Il est également possible de choisir le type d'appel Code :
__________________
Vous souhaitez rejoindre l'équipe de bénévoles qui fait vivre Developpez (traduction, rédaction, modération) ? Contactez moi par MP. Ma page personnelle avec la liste de mes articles - Mon blog sur le C++, Qt et les GPU. Je suis régulièrement sur le chat pour les questions C++/Qt. Apprendre Qt 5 : vidéos d'installation (YouTube), extraites du livre Créer des applications avec Qt 5. |
||
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() |
C'est bien à une note de traducteur que je pensais.
Mais mon argument ultime, c'est que le désassemblage montré sur les captures montre bien la convention d'appel cdecl. Le ret est tout seul (en stdcall, il aurait un paramètre) et l'appelant fait un add esp, 4 après l'appel pour nettoyer la pile (ce qu'il ne fait pas en stdcall). La NdT me paraît donc tout indiquée. L'auteur est déjà prévenu, par le premier commentaire de son article. Vieux de plus d'un an.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
10
|
Copyright © 2000-2013 - www.developpez.com