Existe-t-il des outils qui permetteraient d'analyser une dll; c'est à dire :
- lister toutes les fonctions présentes dans la dll
- renseigner sur le nombre et le type des paramètres pour chaque fonction
- autres renseignements éventuellement
> Pas possible si les fonctions ne sont pas "décorées". Si c'est le cas clic droit/'undecorate C++ functions'. Sinon pas possible d'avoir le proto a moins de desassembler.
qu'entendez vous par "décorées" ? le fait que la fonction ait été déclarée declspec(export) implique il qu'elle soit décorée ?
parlons nous de la même chose : une fonction qui est exportée se voit cataloguée dans une table des fonctions avec toutes les informations indispensables au lieur : prototype, mécanique d'appel...
> Pas possible si les fonctions ne sont pas "décorées".
Si c'est le cas clic droit/'undecorate C++ functions'.
Sinon pas possible d'avoir le proto a moins de desassembler.
qu'entendez vous par "décorées" ?
le fait que la fonction ait été déclarée declspec(export) implique il
qu'elle soit décorée ?
parlons nous de la même chose : une fonction qui est exportée se voit
cataloguée dans une table des fonctions avec toutes les informations
indispensables au lieur : prototype, mécanique d'appel...
> Pas possible si les fonctions ne sont pas "décorées". Si c'est le cas clic droit/'undecorate C++ functions'. Sinon pas possible d'avoir le proto a moins de desassembler.
qu'entendez vous par "décorées" ? le fait que la fonction ait été déclarée declspec(export) implique il qu'elle soit décorée ?
parlons nous de la même chose : une fonction qui est exportée se voit cataloguée dans une table des fonctions avec toutes les informations indispensables au lieur : prototype, mécanique d'appel...
Thierry
Bonjour,
Ambassadeur Kosh a écrit :
qu'entendez vous par "décorées" ? le fait que la fonction ait été déclarée declspec(export) implique il qu'elle soit décorée ?
voir Q126845
parlons nous de la même chose : une fonction qui est exportée se voit cataloguée dans une table des fonctions avec toutes les informations indispensables au lieur : prototype, mécanique d'appel...
Le linker ne se base, je crois, que sur le nom. Si tu (on peut se tutoyer ?) linkes avec la lib du DLL et que tu appelles une fonction avec le mauvais prototype (nombre d'argument différent) ca plante plus ou moins (suivant la convention d'appel utilisée).
-- "Oh God I am the American dream I do not think I'm too extreme An' I'm a handsome son of a bitch I'm gonna get a good job 'n' be real rich"
Bonjour,
Ambassadeur Kosh a écrit :
qu'entendez vous par "décorées" ?
le fait que la fonction ait été déclarée declspec(export) implique il
qu'elle soit décorée ?
voir Q126845
parlons nous de la même chose : une fonction qui est exportée se voit
cataloguée dans une table des fonctions avec toutes les informations
indispensables au lieur : prototype, mécanique d'appel...
Le linker ne se base, je crois, que sur le nom. Si tu (on peut se tutoyer
?) linkes avec la lib du DLL et que tu appelles une fonction avec le
mauvais prototype (nombre d'argument différent) ca plante plus ou
moins (suivant la convention d'appel utilisée).
--
"Oh God I am the American dream
I do not think I'm too extreme
An' I'm a handsome son of a bitch
I'm gonna get a good job 'n' be real rich"
qu'entendez vous par "décorées" ? le fait que la fonction ait été déclarée declspec(export) implique il qu'elle soit décorée ?
voir Q126845
parlons nous de la même chose : une fonction qui est exportée se voit cataloguée dans une table des fonctions avec toutes les informations indispensables au lieur : prototype, mécanique d'appel...
Le linker ne se base, je crois, que sur le nom. Si tu (on peut se tutoyer ?) linkes avec la lib du DLL et que tu appelles une fonction avec le mauvais prototype (nombre d'argument différent) ca plante plus ou moins (suivant la convention d'appel utilisée).
-- "Oh God I am the American dream I do not think I'm too extreme An' I'm a handsome son of a bitch I'm gonna get a good job 'n' be real rich"
Ambassadeur Kosh
> voir Q126845
ok. donc le prototype (celui affiché par Depends) est directement issu du nom "manglé". donc, avec un impdef ou autre outils du genre, je dois pouvoir fabriquer un .h (sous hypotese de mangling)
merci du coup de pouce...
> voir Q126845
ok.
donc le prototype (celui affiché par Depends) est directement issu du nom
"manglé".
donc, avec un impdef ou autre outils du genre, je dois pouvoir fabriquer un
.h (sous hypotese de mangling)
ok. donc le prototype (celui affiché par Depends) est directement issu du nom "manglé". donc, avec un impdef ou autre outils du genre, je dois pouvoir fabriquer un .h (sous hypotese de mangling)
merci du coup de pouce...
Ambassadeur Kosh
> Tout à fait. Tu n'as qu'à essayer (il faut que le prototype dans la lib soit en __int32 aussi).
ben non, justement. c'est pour voir si le linker se base juste sur la taille des parametres. d'ou le float...
Ah mais si c'est une fonction C++, ça change tout. Pour permettre la surcharge de fonction, les compilateurs C++ décorent les noms de façon à indiquer le type des arguments.
vi, thierry m'a recement rappellé ça. un impdef et une moulinette feront donc l'affaire.
Par contre il n'y a pas d'API pour ça non plus, vu que chaque compilateur décore les fonctions différement. C'est d'ailleurs la raison qui fait qu'en règle générale on n'exporte pas de fonctions C++...
un beau b... en effet.
> m'étonnerait aussi qu'on désassemble les fonctions et qu'on en > déduise les types par des regles sur le code machine qui manipule les > données :) Ça par contre c'est faisable. Long et ennuyeux mais faisable. À partir du moment où on parvient à reconstituer la logique du code, on connais aussi les arguments. Et pour différentier un int d'un float ça n'est pas très difficile. Ce qui est plus difficile c'est de savoir à quoi tel argument correspond.
j'entendais qu'un programme le fasse, pas le gugusse :)
Pour autant que je sache, pas pour des fonctions C. Le format PE n'indique nul part les prototypes des fonctions exportées, seulement leurs noms.
décidement, vive Com.
> Tout à fait. Tu n'as qu'à essayer (il faut que le prototype dans la lib
soit en __int32 aussi).
ben non, justement. c'est pour voir si le linker se base juste sur la taille
des parametres. d'ou le float...
Ah mais si c'est une fonction C++, ça change tout. Pour permettre la
surcharge de fonction, les compilateurs C++ décorent les noms de façon à
indiquer le type des arguments.
vi, thierry m'a recement rappellé ça.
un impdef et une moulinette feront donc l'affaire.
Par contre il n'y a pas d'API pour ça non plus, vu que chaque
compilateur décore les fonctions différement. C'est d'ailleurs la raison
qui fait qu'en règle générale on n'exporte pas de fonctions C++...
un beau b... en effet.
> m'étonnerait aussi qu'on désassemble les fonctions et qu'on en
> déduise les types par des regles sur le code machine qui manipule les
> données :)
Ça par contre c'est faisable. Long et ennuyeux mais faisable. À partir
du moment où on parvient à reconstituer la logique du code, on connais
aussi les arguments. Et pour différentier un int d'un float ça n'est pas
très difficile. Ce qui est plus difficile c'est de savoir à quoi tel
argument correspond.
j'entendais qu'un programme le fasse, pas le gugusse :)
Pour autant que je sache, pas pour des fonctions C. Le format PE
n'indique nul part les prototypes des fonctions exportées, seulement
leurs noms.
> Tout à fait. Tu n'as qu'à essayer (il faut que le prototype dans la lib soit en __int32 aussi).
ben non, justement. c'est pour voir si le linker se base juste sur la taille des parametres. d'ou le float...
Ah mais si c'est une fonction C++, ça change tout. Pour permettre la surcharge de fonction, les compilateurs C++ décorent les noms de façon à indiquer le type des arguments.
vi, thierry m'a recement rappellé ça. un impdef et une moulinette feront donc l'affaire.
Par contre il n'y a pas d'API pour ça non plus, vu que chaque compilateur décore les fonctions différement. C'est d'ailleurs la raison qui fait qu'en règle générale on n'exporte pas de fonctions C++...
un beau b... en effet.
> m'étonnerait aussi qu'on désassemble les fonctions et qu'on en > déduise les types par des regles sur le code machine qui manipule les > données :) Ça par contre c'est faisable. Long et ennuyeux mais faisable. À partir du moment où on parvient à reconstituer la logique du code, on connais aussi les arguments. Et pour différentier un int d'un float ça n'est pas très difficile. Ce qui est plus difficile c'est de savoir à quoi tel argument correspond.
j'entendais qu'un programme le fasse, pas le gugusse :)
Pour autant que je sache, pas pour des fonctions C. Le format PE n'indique nul part les prototypes des fonctions exportées, seulement leurs noms.
décidement, vive Com.
Cyrille \cns\ Szymanski
>> > m'étonnerait aussi qu'on désassemble les fonctions et qu'on en > déduise les types par des regles sur le code machine qui manipule > les données :) Ça par contre c'est faisable. Long et ennuyeux mais faisable. À partir du moment où on parvient à reconstituer la logique du code, on connais aussi les arguments. Et pour différentier un int d'un float ça n'est pas très difficile. Ce qui est plus difficile c'est de savoir à quoi tel argument correspond.
On peut quand même automatiser un poil cette procédure si l'argument est utilisé dans un appel de fonction connu. C'est peut-être ce que tu endends par "reconstituer la logique du code".
>> > m'étonnerait aussi qu'on désassemble les fonctions et qu'on en
> déduise les types par des regles sur le code machine qui manipule
> les données :)
Ça par contre c'est faisable. Long et ennuyeux mais faisable. À
partir du moment où on parvient à reconstituer la logique du code, on
connais aussi les arguments. Et pour différentier un int d'un float
ça n'est pas très difficile. Ce qui est plus difficile c'est de
savoir à quoi tel argument correspond.
On peut quand même automatiser un poil cette procédure si l'argument est
utilisé dans un appel de fonction connu. C'est peut-être ce que tu endends
par "reconstituer la logique du code".
>> > m'étonnerait aussi qu'on désassemble les fonctions et qu'on en > déduise les types par des regles sur le code machine qui manipule > les données :) Ça par contre c'est faisable. Long et ennuyeux mais faisable. À partir du moment où on parvient à reconstituer la logique du code, on connais aussi les arguments. Et pour différentier un int d'un float ça n'est pas très difficile. Ce qui est plus difficile c'est de savoir à quoi tel argument correspond.
On peut quand même automatiser un poil cette procédure si l'argument est utilisé dans un appel de fonction connu. C'est peut-être ce que tu endends par "reconstituer la logique du code".
Ce qui est plus difficile c'est de savoir à quoi tel argument correspond.
En desassemblant c'est assez facile (la preuve, j'ai deja réussi :-) en se basant sur les fonctions de l'API Win 32 appellés dans la DLL. Si le nieme parametre de la fonction exportée est passé en premier parametre de GetWindowText, y'a de fortes chances que ca soit un HWND.
-- "Oh God I am the American dream I do not think I'm too extreme An' I'm a handsome son of a bitch I'm gonna get a good job 'n' be real rich"
Bonjour,
Møgluglu a écrit :
Ce qui est plus difficile c'est de savoir à quoi tel
argument correspond.
En desassemblant c'est assez facile (la preuve, j'ai deja réussi :-)
en se basant sur les fonctions de l'API Win 32 appellés dans la DLL.
Si le nieme parametre de la fonction exportée est passé en premier
parametre de GetWindowText, y'a de fortes chances que ca soit un HWND.
--
"Oh God I am the American dream
I do not think I'm too extreme
An' I'm a handsome son of a bitch
I'm gonna get a good job 'n' be real rich"
Ce qui est plus difficile c'est de savoir à quoi tel argument correspond.
En desassemblant c'est assez facile (la preuve, j'ai deja réussi :-) en se basant sur les fonctions de l'API Win 32 appellés dans la DLL. Si le nieme parametre de la fonction exportée est passé en premier parametre de GetWindowText, y'a de fortes chances que ca soit un HWND.
-- "Oh God I am the American dream I do not think I'm too extreme An' I'm a handsome son of a bitch I'm gonna get a good job 'n' be real rich"
Thierry
Bonjour,
Ambassadeur Kosh a écrit :
un impdef et une moulinette feront donc l'affaire.
T'as vu UnDecorateSymbolName ?
-- "Oh God I am the American dream I do not think I'm too extreme An' I'm a handsome son of a bitch I'm gonna get a good job 'n' be real rich"
Bonjour,
Ambassadeur Kosh a écrit :
un impdef et une moulinette feront donc l'affaire.
T'as vu UnDecorateSymbolName ?
--
"Oh God I am the American dream
I do not think I'm too extreme
An' I'm a handsome son of a bitch
I'm gonna get a good job 'n' be real rich"