7
votes

Code indépendant de la position et distributeur

Comment les fonctions virtuelles sont-elles implémentées dans le code indépendant de la position?

Je sais que si ma classe a des fonctions virtuelles, le compilateur génère généralement un circule pour celui-ci contenant des adresses de toutes les fonctions virtuelles et stocke un pointeur sur la tablette dans chaque objet de ma classe.

Maintenant, si mon code est indépendant de la position, le compilateur ne peut pas connaître les adresses de fonctions virtuelles (ni aucune fonction, à ce sujet). Alors qu'est-ce que ça fait?

J'aimerais savoir quels compilateurs réels font (pas ce qui est théoriquement possible); Je suis surtout intéressé par les plates-formes Linux 32 bits, mais d'autres plates-formes sont légèrement intéressantes aussi.


1 commentaires

La liaison sait, il n'aura pas de difficulté à réparer les compensations tant qu'ils ne croient pas les limites de module. Trouver un qui fait en réalité ce serait le problème plus difficile.


3 Réponses :


-2
votes

Je vous suggère d'écrire des exemples de programmes et de les examiner vous-même avec l'exemple IDA Pro. Téléchargez le version gratuite ou version de démonstration .


0 commentaires

-1
votes

Fondamentalement, un circuit équitable est partout implémenté comme une table de pointes de fonction.


0 commentaires

9
votes

Il y a deux options:

  1. Acceptez que votre tablevisse ne soit pas indépendante de la position et essayez de l'éloigner de la section du code, de sorte que tout code qui nécessite une liaison dynamique des réalisations vit à côté de l'autre afin de réduire le nombre de pages inébranlables. GCC fait ceci .
  2. Utilisez des sauts relatifs dans la table équipée. Je ne suis au courant d'aucune implémentation qui le fait, et cela ne fonctionne que tant que la table à la carte vit à un décalage fixe à partir des implémentations de la méthode et ceux-ci ne peuvent pas être remplacés au moment de la charge (qu'ils peuvent être sur des systèmes Elfs typiques). < / li>

0 commentaires