representation d'un objet c++ en asm - ASM - Programmation
Marsh Posté le 09-12-2010 à 14:48:08
ben tu te créé une classe avec une variable membre et une méthode, tu instancies cette classe dans le main, et tu utilises OllyDbg pour désassembler ton programme et regarder le source...
Marsh Posté le 10-12-2010 à 10:32:46
de toute façon, l'implémentation peut dépendre du compilateur, donc il n'y a pas de réponse à 100% sure.
Ensuite, ca va dépendre de ta classe : est-ce que tu as des fonctions virtuelles ou non ?
Edit : et j'imagine que quand tu mets assembleur, tu parles du layout mémoire ... Parce que ce n'est que de la mémoire, l'instance d'une classe, pas du code, donc pas de l'assembleur.
Marsh Posté le 10-12-2010 à 10:39:09
y'a surtout la question principale à se poser : pour quoi faire ??
Marsh Posté le 21-12-2010 à 01:15:20
Pour savoir ce qu'il se passe en dessous...
Moi en tout cas ça m'intéresse et j'ai demandé à des "experts" C++ de ma boite, et ben z'en savent rien.
Marsh Posté le 21-12-2010 à 09:40:31
Je dois avoir que je n'arrive pas a comprendre la question initiale (je ne sais pas ce qu'est l'instance d'un objet par exemple).
Est-ce que les informations trouvees en cherchant "C++ object model" y apportent une reponse ou non?
Marsh Posté le 21-12-2010 à 12:19:24
Schématiquement, un objet est une structure C avec en plus des méthodes.
Au niveau de l'assembleur, on a des données et du code.
Les données peuvent être allouées sur la pile, ou sur le tas (ou dans d'autres parties (cela dépend de la définition du mot "tas" )).
Cela dépend des objets.
Les noms des données ont des préfixes et/ou des suffixes pour différencier les contextes, les circonstances d'utilisation des objets.
Ce naming peut être assez complexe.
Le code est celui des méthodes.
En plus de cela, il y a des certaines particularités éventuelles à traiter comme le cas des fonctions virtuelles.
Elles nécessitent un traitement dynamique. Le compilateur ne peut pas savoir quelle fonction il faudra appeler.
Donc, le compilateur créé une table des fonctions virtuelles, et il inclut un bout de code qui fera le choix de la bonne fonction lors de l'exécution.
Donc, en résumé, on a, non seulement des données mais aussi du code derrière les objets, et on a des choses pré-determinées, et d'autres qui le sont lors de l'exécution.
Marsh Posté le 03-04-2011 à 13:28:21
ReplyMarsh Posté le 04-04-2011 à 10:46:59
Ok, donc tu voulais juste la description du layout mémoire des bitfields ? Tu noteras que même là, il n'est pas donné de sens ou d'ordre pour les membres dans la structure ni même de précision sur un éventuel padding entre tes membres.
Marsh Posté le 15-11-2010 à 10:11:03
Salut,
Je me demandais comment été représenté en assembleur un Objet C++,et son instance
Merci
---------------
.