Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++
C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 10/12/2012, 10h44   #1
ram-0000
Rédacteur/Modérateur

 
Avatar de ram-0000
 
Homme Raymond
Inscription : mai 2007
Messages : 9 011
Détails du profil
Informations personnelles :
Nom : Homme Raymond
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 9 011
Points : 27 692
Points : 27 692
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
.
ram-0000 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 11/12/2012, 11h53   #2
bonnotguillaume
Nouveau Membre du Club
 
Homme Guillaume Bonnot
Ingénieur développement logiciels
Inscription : janvier 2012
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Bonnot
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2012
Messages : 17
Points : 36
Points : 36
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)
bonnotguillaume est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 13h23   #3
guillaume07
Débutant
 
Inscription : mai 2006
Messages : 615
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 615
Points : 184
Points : 184
c'est quoi le sens premier et le sens second du terme ??
guillaume07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 13h51   #4
gbdivers
Responsable C++

 
Homme Guillaume Belz
Biochimiste
Inscription : novembre 2008
Messages : 5 311
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Belz
Âge : 37
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Biochimiste
Secteur : Santé

Informations forums :
Inscription : novembre 2008
Messages : 5 311
Points : 19 505
Points : 19 505
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.
gbdivers est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 14h33   #5
bonnotguillaume
Nouveau Membre du Club
 
Homme Guillaume Bonnot
Ingénieur développement logiciels
Inscription : janvier 2012
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Bonnot
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2012
Messages : 17
Points : 36
Points : 36
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.
bonnotguillaume est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 10h12   #6
guillaume07
Débutant
 
Inscription : mai 2006
Messages : 615
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 615
Points : 184
Points : 184
hum ok intéréssant
guillaume07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 16h41   #7
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 380
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 380
Points : 32 012
Points : 32 012
Envoyer un message via MSN à Médinoc
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.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 17h14   #8
gbdivers
Responsable C++

 
Homme Guillaume Belz
Biochimiste
Inscription : novembre 2008
Messages : 5 311
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Belz
Âge : 37
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Biochimiste
Secteur : Santé

Informations forums :
Inscription : novembre 2008
Messages : 5 311
Points : 19 505
Points : 19 505
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 S'il y a une erreur, on laisse... (bon, ok, on laisse pas totalement, on met une note de traduction pour prévenir le lecteur. Et on prévient l'auteur. Mais on ne modifie pas les propos de l'auteur)

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 :
1
2
3
4
5
6
7
// avec gcc
type __attribute__((cdecl)) nom (paramètres)  
type __attribute__((stdcall)) nom (paramètres)  
 
// avec VS
type __cdecl nom (paramètres) 
type __stdcall nom (paramètres)
Bref, je me prononce pas, mais cela ne me semble pas faux (au pire, incomplet)
__________________
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.
gbdivers est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 21h05   #9
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 380
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 380
Points : 32 012
Points : 32 012
Envoyer un message via MSN à Médinoc
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.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h47.


 
 
 
 
Partenaires

Hébergement Web