Accueil > Forum > > > > Exploiter une dll c++ avec l'ASM
Exploiter une dll c++ avec l'ASM
lundi 3 juillet 2006 à 17:48:23 |
Exploiter une dll c++ avec l'ASM

frobinet
|
Bonjour, Je souhaite utiliser une dll écrite sous forme de class à partir du C++ dans mon programme ASM: Exemple : class DLL_EXPORT NomDeClass { public: NomDeClass (const char* pFilePath, ushort fFileOp, int &fStatus); ushort IsComplete (void); .... } Merci pour votre aide ! frobinet.
|
|
jeudi 6 juillet 2006 à 21:22:58 |
Re : Exploiter une dll c++ avec l'ASM

nightlord666
|
Pour lancer les fonctions, il faut que tu récupère le nom avec la décoration C++, lancer le constructeur statique(initialise tous les membres à 0), puis le constructeur, puis enfin les fonctions.
|
|
vendredi 7 juillet 2006 à 12:50:59 |
Re : Exploiter une dll c++ avec l'ASM

frobinet
|
J'ai vu que ça ressemblait à l'utilisation d'un COM. Mais je ne sais pas comment faire le lien (dans un fichier COM il y a un CLSID qui fait le lien)
J'ai donc fais une Lib c++ avec le bout de code suivant :
class MonTest { public:
MonTest(short Var1, short Var2) { return; } short Func1 ( void ) { return(1); }
}
Dans mon programme assembleur je créer la structure
MonTest STRUCT MonTest DWORD ?
Func1 DWORD ?
MonTest ENDS
Mais comment je fais le lien avec ma lib ?
|
|
dimanche 9 juillet 2006 à 21:01:19 |
Re : Exploiter une dll c++ avec l'ASM

ToutEnMasm
|
Réponse acceptée !
Salut, La méthode me semblant la plus adaptée , est d'appeler normalement la fonction C et de demander a CL de produire un fichier assembleur.L'option a rajouter est /FAs .Publier le résultat içi (juste la ou les parties intéressantes) et je vous aiderais pour la suite. Si c'est trop gros,publier le bout de code en c++ içi,je m'arrangerais pour la suite. ToutEnMasm
|
|
lundi 10 juillet 2006 à 12:06:28 |
Re : Exploiter une dll c++ avec l'ASM

frobinet
|
Salut, J'ai donc fais ce que tu m'a dit, ci dessous les différents fichiers :
Ma librairie C++ :
class __declspec(dllexport) MonTest { public:
MonTest(short Var1, short Var2) { return; } short Func1 ( void ) { return(1); } short Func2 ( void ) { return(2); } short Func3 (void) { return(3); }
};
Mon applis :
#include "Test.h"
int main () { MonTest *TestVar = new MonTest (10, 10); return(TestVar->Func1()); }
Et les sources en assembleur :
TITLE C:\Sources\C++\TestL\TestL.cpp .386P include listing.inc if @Version gt 510 .model FLAT else _TEXT SEGMENT PARA USE32 PUBLIC 'CODE' _TEXT ENDS _DATA SEGMENT DWORD USE32 PUBLIC 'DATA' _DATA ENDS CONST SEGMENT DWORD USE32 PUBLIC 'CONST' CONST ENDS _BSS SEGMENT DWORD USE32 PUBLIC 'BSS' _BSS ENDS $$SYMBOLS SEGMENT BYTE USE32 'DEBSYM' $$SYMBOLS ENDS $$TYPES SEGMENT BYTE USE32 'DEBTYP' $$TYPES ENDS _TLS SEGMENT DWORD USE32 PUBLIC 'TLS' _TLS ENDS ; COMDAT _main _TEXT SEGMENT PARA USE32 PUBLIC 'CODE' _TEXT ENDS FLAT GROUP _DATA, CONST, _BSS ASSUME CS: FLAT, DS: FLAT, SS: FLAT endif PUBLIC _main EXTRN ??2@YAPAXI@Z:NEAR ; operator new EXTRN ??3@YAXPAX@Z:NEAR ; operator delete EXTRN ??0MonTest@@QAE@FF@Z:NEAR ; MonTest::MonTest EXTRN ?Func1@MonTest@@QAEFXZ:NEAR ; MonTest::Func1 EXTRN __except_list:DWORD EXTRN __chkesp:NEAR EXTRN ___CxxFrameHandler:NEAR ; COMDAT xdata$x ; File C:\Sources\C++\TestL\TestL.cpp xdata$x SEGMENT __ehfuncinfo$_main DD 019930520H DD 01H DD FLAT:__unwindtable$_main DD 2 DUP(00H) DD 2 DUP(00H) ORG $+4 __unwindtable$_main DD 0ffffffffH DD FLAT:__unwindfunclet$_main$0 xdata$x ENDS ; COMDAT _main _TEXT SEGMENT _TestVar$ = -16 $T293 = -20 $T294 = -24 __$EHRec$ = -12 _main PROC NEAR ; COMDAT
; 5 : {
push ebp mov ebp, esp push -1 push __ehhandler$_main mov eax, DWORD PTR fs:__except_list push eax mov DWORD PTR fs:__except_list, esp sub esp, 80 ; 00000050H push ebx push esi push edi lea edi, DWORD PTR [ebp-92] mov ecx, 20 ; 00000014H mov eax, -858993460 ; ccccccccH rep stosd
; 6 : MonTest *TestVar = new MonTest (10, 10);
push 1 call ??2@YAPAXI@Z ; operator new add esp, 4 mov DWORD PTR $T294[ebp], eax mov DWORD PTR __$EHRec$[ebp+8], 0 cmp DWORD PTR $T294[ebp], 0 je SHORT $L295 push 10 ; 0000000aH push 10 ; 0000000aH mov ecx, DWORD PTR $T294[ebp] call ??0MonTest@@QAE@FF@Z ; MonTest::MonTest mov DWORD PTR -28+[ebp], eax jmp SHORT $L296 $L295: mov DWORD PTR -28+[ebp], 0 $L296: mov eax, DWORD PTR -28+[ebp] mov DWORD PTR $T293[ebp], eax mov DWORD PTR __$EHRec$[ebp+8], -1 mov ecx, DWORD PTR $T293[ebp] mov DWORD PTR _TestVar$[ebp], ecx
; 7 : return(TestVar->Func1());
mov ecx, DWORD PTR _TestVar$[ebp] call ?Func1@MonTest@@QAEFXZ ; MonTest::Func1 movsx eax, ax
; 8 : }
mov ecx, DWORD PTR __$EHRec$[ebp] mov DWORD PTR fs:__except_list, ecx pop edi pop esi pop ebx add esp, 92 ; 0000005cH cmp ebp, esp call __chkesp mov esp, ebp pop ebp ret 0 _TEXT ENDS ; COMDAT text$x text$x SEGMENT __unwindfunclet$_main$0: mov eax, DWORD PTR $T294[ebp] push eax call ??3@YAXPAX@Z ; operator delete pop ecx ret 0 __ehhandler$_main: mov eax, OFFSET FLAT:__ehfuncinfo$_main jmp ___CxxFrameHandler text$x ENDS _main ENDP END
|
|
lundi 10 juillet 2006 à 12:14:13 |
Re : Exploiter une dll c++ avec l'ASM

frobinet
|
Salut,
Pour infos j'ai aussi fais le test en mettant la classe directement dans le source sans passer par une librairie mais le compilateur appel toujours les deux fonctions ci-dessous en externe :
EXTRN ??2@YAPAXI@Z:NEAR ; operator new EXTRN ??3@YAXPAX@Z:NEAR ; operator delete
|
|
lundi 10 juillet 2006 à 17:29:05 |
Re : Exploiter une dll c++ avec l'ASM

frobinet
|
Salut,
J'en ai déduis le code suivant qui fonctionne correctement :
includelib Test.lib
EXTRN syscall ?Func1@MonTest@@QAEFXZ:NEAR ; MonTest::Func1
.data? _This:DWORD
.code start:
lea ecx, _This call ?Func1@MonTest@@QAEFXZ ; MonTest::Func1
PrintDec eax
xor eax, eax ret
end start
(bien penser à "syscall" si on utilise la convention d'appelle "stdcall" pour le programme complet, je le marque car j'ai encore perdu beaucoup de temps à cause de cette bétise)
Je pense que la solution la propre est de refaire une librairie tampon en C.
Merci pour l'astuce : par contre la compilation d'une classe est totalement zappé !
|
|
lundi 10 juillet 2006 à 17:33:45 |
Re : Exploiter une dll c++ avec l'ASM

frobinet
|
c'est remoi, le code ci-dessous ne fonctionne qu'en mode RELEASE en mode DEBUG le linkage ne passe pas.
|
|
lundi 10 juillet 2006 à 21:32:48 |
Re : Exploiter une dll c++ avec l'ASM

ToutEnMasm
|
Salut, Je ne voudrais pas jouer les rabats joies mais les noms décorés c++ c'est pas très lisible. ?Func1@MonTest@@QAEFXZ mérite une traduction.
Ton source ne donne pas les librairies ni les headers utilisés,dommage. J'ai quand même trouvé que la classe dllexport est décrite dans dbdao.h Pour transcrire les noms décorés C++,ml 8 le fait très bien.Mais il faut avoir la version express C++ 5 téléchargeable chez microsoft,puis télécharger ml 8.0. Voir première page de mon site pour obtenir les infos nécessaires. Si tu connais la librairie utilisé par ton code,tu peux aussi télécharger un utilitaire a la page beta de mon site,c'est protolib.Quand il détecte une fonction dans la définition qu'en donne le pecoff.doc (référence microsoft),il enlève la décoration C++ et fait apparaitre la définition en claire. Après une petite recherche il n'y a pas de lib de ce nom (dbdao),une autre doit contenir les définitions. Autre astuce,un petit coup de debugger et on voie quels sont les modules chargées,ça aide.
ToutEnMasm
|
|
lundi 10 juillet 2006 à 21:42:34 |
Re : Exploiter une dll c++ avec l'ASM

ToutEnMasm
|
J'allais oublier le plus important , avec les noms traduits et le header en main,on peut voir les décalages d'appels indirects (call [eax+N]) tel qu'ils apparaissent dans le source asm,et surtout s'offrir la réécriture de la classe. ToutEnmasm
|
|
Cette discussion est classée dans : class, dll, exploiter, asm, nomdeclass
Répondre à ce message
Sujets en rapport avec ce message
Compileur ASM [ par fabiin ]
SalutQuel compileur ASM me conseillez-vous ???Merci @+Fabs
Besoin de conseils en livre sur l'asm! [ par BlackWizzard ]
je voudrais m'acheter un livre sur l'asm sans trop de blabla et pas trop cher...qqun a qqchose a me conseiller?
virgule flotante en asm [ par webfish ]
Bonjour, Je fais de l'assembleur depuis pas longtemps, et j'aimerais savoir comment on fait des calculs avec des nombres à virgule flotante...
Probleme de dll! (arguments...) [ par BlackWizzard ]
salut les pro!voila, G une fonction contenu dans une dll mais cette fonction, je ne sait pas comment lui ajouter des arguments...voici un extrait du c
[URGENT] Passer des arguments a une DLL [ par BlackWizzard ]
Bonjours, je voudrai creer un dll en asm (ce qui est fait) mais je n'arrive pas a passer des arguments a la seul fonction de cette dll.imaginons le co
asm [ par damien174 ]
bonjour je viens de commencer a faire de l ASM sur PC, car je connais tres bien sur 68HC11.Avez vous des cours et un logiciel pour assembler et compil
ASM pour 68hc11 [ par Sphaxs ]
SphaxsSalut tout le monde,J'ai fait une plaque de test pour utiliser un 68hc11 mais je n'arrive pas à le programmer (pb de logiciel???), si quelqu'un
passage de paramétres entre VCpp et ASM [ par orchis ]
bjr a tous,j'ai ecris un programme en VCpp dont un module est en assembleur, mais je ne sais faire passer des paramétres entre les deux !! pourriez vo
Routine asm dans gcc [ par Juke ]
quelqu'un connait t'il un txt en francais qui explik comment incorporer de l'asm dans du c++ avec gcc ou dev-c++ ?
Reboot de la machine en c/c++ ou asm [ par Juke ]
quelqu'un sait t'il comment rebooter ou éteindre l'ordinateur en c/c++ ou en asm ?merci de votre aide.juke
Livres en rapport
|
Derniers Blogs
WP7 5K BELGIUM CHALLENGEWP7 5K BELGIUM CHALLENGE par junarnoalg
Microsoft Belgique a le plaisir de vous annoncer le lancement du
Challenge Windows Phone 7
. Celui-ci se déroule du 12 juillet au 30 novembre 2010 et vous donne l'opportunit...
Cliquez pour lire la suite de l'article par junarnoalg LES MONADES POUR LES NULSLES MONADES POUR LES NULS par mdufourneaudravel
Avec l'annonce de F#, je me suis intéressé de plus en plus à la programmation fonctionnelle, je suis donc rapidement tombé sur les " monades ", mais malgré la lecture de plusieurs articles, j'étais resté perméable à leur concept. C'est désormais fini, grâ...
Cliquez pour lire la suite de l'article par mdufourneaudravel [WP7] AJOUTER DES IMAGES DANS LA MEDIA LIBRARY D'UN WINDOWS PHONE 7[WP7] AJOUTER DES IMAGES DANS LA MEDIA LIBRARY D'UN WINDOWS PHONE 7 par Audrey
L'émulateur Windows Phone 7, fourni avec la version Beta des outils développeurs n'inclut aucune image dans sa bibliothèque. Pas très pratique de tester son application lorsque l'on souhaite que l'utilisateur puisse choisir une image présente dans le télé...
Cliquez pour lire la suite de l'article par Audrey VIVE LES MOCKS ET LES POCOSVIVE LES MOCKS ET LES POCOS par vLabz
J'observe régulièrement autour de moi de la confusion à propos de ces deux termes et j'aimerais juste rappeler ce qu'ils signifient. Je ne suis bien sûr pas le mieux placé pour faire une leçon mais je vais faire de mon mieux pour mettre en valeur ce q...
Cliquez pour lire la suite de l'article par vLabz [WF4] WORKFLOW AND CUSTOM ACTIVITIES - BEST PRACTICES (4/5)[WF4] WORKFLOW AND CUSTOM ACTIVITIES - BEST PRACTICES (4/5) par JeremyJeanson
Vendredi dernier Microsoft a publié le quatrième épisode des bonnes pratiques pour coder ses activités custom dans WF4 : endpoint.tv - Workflow and Custom Activities - Best Practices (Part 4) . Tout comme pour les précédents épisodes, j'ai pris le temps d...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Crystal Report (11)CRYSTAL REPORT (11)Crystal Reports est un outil de reporting souple et puissant, vous pouvez très facilement consult... Cliquez pour télécharger Crystal Report Academy System (12.0.2.0)ACADEMY SYSTEM (12.0.2.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft iPod Vidéo Convertisseur 6 (6.0.3.0419)XILISOFT IPOD VIDéO CONVERTISSEUR 6 (6.0.3.0419)Xilisoft iPod Vidéo Convertisseur est un outil puissant de conversion d'iPod, facile à utiliser. ... Cliquez pour télécharger Xilisoft iPod Vidéo Convertisseur 6 Xilisoft iPhone Vidéo Convertisseur 6 (6.0.3.0419)XILISOFT IPHONE VIDéO CONVERTISSEUR 6 (6.0.3.0419)Xilisoft iPhone Vidéo Convertisseur est le meilleur logiciel de conversion iPhone qui peut facile... Cliquez pour télécharger Xilisoft iPhone Vidéo Convertisseur 6 Xilisoft iPad Vidéo Convertisseur 6 (6.0.3.0419)XILISOFT IPAD VIDéO CONVERTISSEUR 6 (6.0.3.0419)Il s'agit d'un logiciel polyvalent pour convertir les formats vidéo/audio populaires en formats p... Cliquez pour télécharger Xilisoft iPad Vidéo Convertisseur 6
|