lang:c:lieur
Conversion des prototypes en symboles (mangling)
Cas général
En C
, c'est simple :
- Pour une variable globale exportées, on prend le nom de la variable.
- Pour les fonctions exportées, on prend le nom de la fonction uniquement, sans le type de retour ni les arguments. Ce qui explique que la surcharge n'est pas possible en
C
. - Si on est en 32 bits, on préfixe le symbole par un
_
.
Exemple :
int tt; int tt4(int, int) { return 0; }
Donnera en 32 bits :
_tt _tt4
et en 64 bits :
tt tt4
Windows
Sous Windows, il est possible de préfixer le prototype par __stdcall
pour faire la liaison avec les API 32 bit de Windows. Cela ajoute au symbole un postfixe @
suivi d'un nombre égal à 4 fois le nombre d'argument. En 64 bit, aucun postfixe n'est ajouté.
Exemple :
int __stdcall tt2() { return 0; } int __stdcall tt3(int) { return 0; } int __stdcall tt5(int, char) { return 0; } int __stdcall tt6(int, char, int) { return 0; } int __stdcall tt7(char) { return 0; } int __stdcall tt8(long) { return 0; }
Donnera en 32 bits :
_tt2@0 _tt3@4 _tt5@8 _tt6@12 _tt7@4 _tt8@4
et en 64 bits :
tt2 tt3 tt5 tt6 tt7 tt8
Documentation complète
lang/c/lieur.txt · Dernière modification : 2020/07/16 08:41 de root