Liaison d'un module .obj asm à un exe c++

Soyez le premier à donner votre avis sur cette source.

Vue 6 417 fois - Téléchargée 392 fois

Description

Ceci montre, après création d'un module objet avec MASM, comment le lier à son projet c++.
il faut respecter plusieurs choses tels que l'option de respet de la casse, la décoration des noms exportés PUBLIC, la récupération des params sur la pile, le modèle mémoire ect...
J'ai fait une procédure qui ne fait que récupérer 2 pointeur, un dword et un byte, puis les incrémentes. On l'appelle depuis le code c++ en ayant pris soin de la déclarer extern "C". Voir le code asm de la procédure et le main c++, pour les détails.
Je pense que ça peut etre utile car je m'en suis servi pour créer un proc de tri à bulles qui me parait beaucoup plus efficace comme ceci.
Plusieurs autres utilités peuvent être trouvés à cette liaison de module obj.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Arnaud16022
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2 -
Idem que Gerald mais j'ai pas pu être posté,on nous a hacké notre forum ...
Maintenant plus intéressant, appeller une fonction implémentée dans le code C++ à partir de l'assembleur ^^
Je suis en train de créer un langage de "script" basé sur le principe ...
Bonne continuation
(PS : dans l'exemple que tu as donné, a savoir le tri par bulles, il est effectivement mieux de le mettre direct dans le code C++ avec __asm{} )
cs_Gerald
Messages postés
31
Date d'inscription
dimanche 15 juillet 2001
Statut
Membre
Dernière intervention
8 janvier 2009
-
idem, j'avais fait dans le temps un petit tut avec NASM:
http://sheeps.free.fr/main.php?page=asmfunc
bonne continuation
yann_lo_san
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
17 -
J'ai essayé d'utiliser le nom des params a la place de [esp+...],
par exemple mov eax, ptr_dwVal, cç amarche et pour moi c'est un peu plus lisible mais factuel.
c'est le principe du PROTO, INVOKE, USES et ADDR avec masm qui permettent un codage très proche du C pour les procédures.
C'est un fait que masm, cl, link32 sont gratuits mais pas VisualStudio, donc beaucoup de travail en plus pour simplifier certaines choses quant on a que la ligne de commande !
BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13 -
ah oui encore un oubli:
Employer un "nom" de param n'a pas de sens en ASM, ces noms ne servent qu'à indiquer la finale du nom d'export (ici "@8" car 8 octets de param PUSHes par appelant).
Cet emploi de nom peut se faire car ml inclut un analyseur (jeu de macros) qui remplacera par un offset ESP ces noms. C'est le genre d'hérésie de code qu'on trouve fréquemment sur asmfr, le code obtenu fait pitié en rapport à ce que produirait VC++ 2005 avec un listing C correct. Il ne faut absolument pas s'habituer à cela, manipuler les registres sera nettement supérieur.
yann_lo_san
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
17 -
Dommage qu'il n'y ai pas de coloration syntaxique dans l'éditeur ! J'utilise TextPad et ça rend le code asm moins austère, ceci dit, c'est un détail, car je faisait pointer textPad sur MASM, je peut aussi le faire pointer sur n'importe quel exe.
Merci de tes commentaires très instructifs.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.