Bonjour à vous,
Je vous fais part d'un problème qui me cogne tranquillement mais sûrement.
Quand on demande à PB de pondre des DLLs, avec des noms de fonctions, que fait-il? Il pond des DLLs avec ces mêmes noms de fonctions.
Là, j'ai pas loin de 1600 fonctions (il y a au moins deux couches, parce qu'il y a tout un panel de fonctions qui englobent les maths, le cryptage, etc...)
avec des noms, mais alors des noms... à ressembler à Lucy...
En fait, le nom de fonction DLL démarre bien. Un sigle, suivi d'un mot anglais ou deux: impeccable.
Puis la fin du nom se met à partir en vrille avec des arobases, des lettres, etc...
Genre:
BSGetFirstValue@@A@@@Zq
(c'est fictif)
Bon, j'ai quand même demandé de quel pondoir c'était sorti. On m'a répondu, "Visual Studio chai pas quoi"...
Alors, ça parle à quelqu'un ces arobases et autres à la fin?
Suffixe non identifié des noms de fonction dans DLL
Re: Suffixe non identifié des noms de fonction dans DLL
On se rapproche un peu...
On se rapproche encore...
Wiki UK : Décorations des noms de fonction C++
Désolé pour l'absence de traduction. Le temps me manque. Je partage quand même car cela me semble nécessaire à savoir (à moins que je me plante... Comme d'hab!)
the
SomeFunction@@@23mangledstuff#@@@@
is mangled to give the types and class of
the C++ function.
The
actual mangling information means
something (like parameter size in
bytes and more) which might be
useful for validation and debugging
but is otherwise guff.
The decorated naming convention for pointers to member functions was changed in Visual C++ version 4.0. C++ libraries created
with Visual C++ version 2.0 should be recompiled to link properly with source files compiled with the current version of Visual C++.
Code : Tout sélectionner
C:\>undname ?func1@a@@AAEXH@Z
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation 1981-2000. All rights reserved.Undecoration
of :- "?func1@a@@AAEXH@Z"
is :- "private: void __thiscall a::func1(int)"
Wiki UK : Décorations des noms de fonction C++
Désolé pour l'absence de traduction. Le temps me manque. Je partage quand même car cela me semble nécessaire à savoir (à moins que je me plante... Comme d'hab!)
Re: Suffixe non identifié des noms de fonction dans DLL
J'étais au courant des décorations mais je ne savais pas que cela signifiait quelque chose!
J'ai trouvé ça:
http://openclassrooms.com/forum/sujet/p ... ocks-73344
Pour supprimer les suffixes de type @nn ajoute ceci dans les options du linker :
-Wl,--kill-at
et ça aussi:
https://groups.google.com/forum/#!topic ... 3txNlhPxCE
In the Project settings, Configuration Properties, Linker, Debuging
dialog, you need to set both the "Generate Map File" and the "Map
Exports" setting to YES (/MAPINFO:EXPORTS linker option).
J'ai trouvé ça:
http://openclassrooms.com/forum/sujet/p ... ocks-73344
Pour supprimer les suffixes de type @nn ajoute ceci dans les options du linker :
-Wl,--kill-at
et ça aussi:
https://groups.google.com/forum/#!topic ... 3txNlhPxCE
In the Project settings, Configuration Properties, Linker, Debuging
dialog, you need to set both the "Generate Map File" and the "Map
Exports" setting to YES (/MAPINFO:EXPORTS linker option).
Re: Suffixe non identifié des noms de fonction dans DLL
C'est le mangling , cela permet à des langages évolué , une fois compilé , donc "aplati" , de connaitre les paramètres de retours , les paramètre des arguments etc...Alors, ça parle à quelqu'un ces arobases et autres à la fin?
En c++ , une fonction (méthode) peu avoir différentes signature :
Code : Tout sélectionner
class MaClass
{
public:
MaClass():mValue(0){}
void set(unsigned int value)
{
mValue = value;
}
void set(unsigned int value, unsigned int mul)
{
mValue = value * mul;
}
private:
unsigned int mValue;
};
MaClass Test;
Test.set(50);
//ou
Test.set(10,5);
Si tu as le code source en C++/C , tu exporte tout en C pour viré la déco. a savoir que la déco n'est pas standard, chaque compilo fait sa sauce...
Re: Suffixe non identifié des noms de fonction dans DLL
Merci à vous, le lien wiki en anglais que j'ai trouvé et posté plus haut, semble bien correspondre (coup de chance).
Re: Suffixe non identifié des noms de fonction dans DLL
Je n'ai pas encore traduit la doc de l'expert en démontage de bigoudi sur le wiki UK, mais rien qu'à lire en diagonale, je constate que chez Microsoft, il n'y a pas que les rails de train qui sont suivis: ils ont pondu une convention qui mélange O et 0. Si les noms décorés étaient fait pour rester humainement lisibles, c'est loopé...
Re: Suffixe non identifié des noms de fonction dans DLL
Moralité : achetez le dernier OS, les autres d'avant ne lavaient pas plus blanc que blanc...Microsoft a récemment corrigé un bug
vieux d'une vingtaine d'années et
présent depuis... Windows 95, note 20
Minutes. Manifestement, aucun pirate
n'a exploité cette faille, "mais il était
possible de prendre le contrôle d'un PC
via un lien malicieux ouvert par Internet
Explorer" , écrit le quotidien.
Bon, j'ai tout traduit. Ce n'est pas très compliqué. L'affaire de quelques heures de cogitation. Je pense qu'interpréter les noms décorés est une clé qui simplifie la vie quand on veut récupérer des DLLs C++. Là, j'ai focalisé sur les DLLs de Visual Studio C++, parce que c'est ce que j'ai besoin. Mais s'il y en a qui veulent s'attaquer aux codages de noms d'autres compilateurs, je pense que les conséquences seront très constructives. Notamment celui de Borland.