Maison > développement back-end > C++ > le corps du texte

Comment contrôler les noms de fonctions exportés dans les DLL C ?

Susan Sarandon
Libérer: 2024-11-17 12:45:02
original
790 Les gens l'ont consulté

How Do I Control Exported Function Names in C   DLLs?

Exportations de DLL C : comprendre les noms décorés/mutilés

En C, lors de la création de DLL avec des fonctions exportées, il est courant de rencontrer des DLL décorées ou mutilées noms après compilation. Ceux-ci peuvent prêter à confusion, car ils diffèrent des noms de fonctions non décorés attendus.

Pourquoi les noms décorés ?

La décoration des noms de fonctions est un mécanisme utilisé par les compilateurs pour garantir que les signatures de fonction sont uniques. Ceci est particulièrement important dans les cas où plusieurs fonctions portent le même nom mais des paramètres différents. La décoration comprend des informations sur la convention d'appel de la fonction, les types de paramètres et d'autres attributs.

Fichier de définition de module par rapport aux exportations de style "C"

Les deux utilisant une définition de module (.def) et le style d'exportation "C" (extern "C" __declspec(dllexport)) peuvent donner lieu à des noms décorés. En effet, ils utilisent tous deux le format Windows PE sous-jacent, qui nécessite des noms décorés pour les fonctions exportées.

Suppression du nom décoré

Pour supprimer le nom décoré après le " =", vous pouvez utiliser la directive #pragma comment(linker). Cela vous permet de spécifier le nom de la fonction exportée et le nom décoré auquel elle se résout.

Par exemple :

#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
Copier après la connexion

Vous pouvez également utiliser ce qui suit dans le corps de la fonction pour générer automatiquement le nom décoré :

#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ "\"=\"" __FUNCDNAME__ "\"")
Copier après la connexion

Conclusion

Les noms décorés font partie intégrante du format Windows PE. En utilisant la directive #pragma comment(linker), vous pouvez spécifier le nom de la fonction exportée et le nom décoré auquel elle se résout, vous permettant de contrôler la façon dont les fonctions exportées apparaissent dans la sortie dumpbin.exe.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal