|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre Expert
![]() ![]() Inscription : mai 2002 Messages : 727 ![]() |
La rubrique Assembleur :
http://asm.developpez.com/ Cours avancé : le décodage du jeu d'instruction x86 / x64 par Neitsa
Tutoriel Assembleur - Interfaçage avec C/C++ par Sébastien Le Ray (traduction du célèbre tutoriel du Dr Paul Carter) : Tutoriel pour débuter en Assembleur par Benoit-M : Programmation Assembleur sur microcontrôleur Motorola Coldfire par Joris Dedieu : |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Inscription : mai 2002 Messages : 727 ![]() |
Bonjour a tous
La F.A.Q. Assembleur est à présent à votre disposition. Ce n'est qu'une première version. Tout complément, toute proposition, suggestion, question-réponse supplémentaire, correctif, etc sont naturellement les bienvenus Le but de cette F.A.Q. est de constituer une base de connaissances reposant sur des séries de Questions / Réponses (Q-R) dans différents domaines. Pour l'instant, 2 catégories ont été retenues :
Comment contribuer à l'évolution de cette F.A.Q ? Vous pouvez contribuer à la F.A.Q. en proposant à la suite de ce post des Q-R, des corrections de bugs et d'orthographe. Quelques règles à respecter pour participer :
Bonne rédaction !
__________________
Smortex Les FAQ Assembleur - Linux In The Beginning Was The Command Line Neal Stephenson |
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() Inscription : juillet 2006 Messages : 415 ![]() |
Salut,
http://asm.developpez.com/faq/?page=fg_comp Quels sont les linkers pour l'assembleur ? On pourrait ajouter ld. http://asm.developpez.com/faq/?page=fx86 Qu'est-ce qu'un x86? J'ai envie d' ajouter que le 386 amène le mode protégé tout en restant compatible avec les versions antérieures. |
|
|
00
|
|
|
#4 | ||||||||||
![]() ![]() Sébastien Chercheur sécurité informatique Inscription : octobre 2003 Messages : 1 041 ![]() |
Bonjour,
Rien de bien transcendant dans ce post, si ce n'est la réponse à une question souvent posée: Comment compiler et lier du C ou du C++ et de l'assembleur sous VS sans sortir de l'IDE ni utiliser d'outil externes ? 1) Ici je crée un projet console (en C) ![]() 2) Je clique sur "application settings" afin de faire un projet vide (pas de "precompiled header" ni main() non standard.) ![]() Notez qu'on pourrait faire un autre type de projet sans problème (*.DLL, *.lib, Window, etc.). Pour la démonstration je choisis simplement un projet console : ![]() Clique sur "finish" pour valider. 4) Dans mon explorateur de projet ("project explorer"), j'ajoute un fichier .c : clique droit sur Source file > Add > new item : ![]() J'ajoute le fichier main.c : ![]() Voici le code du fichier C : Code C :
Notez que la fonction assembleur est préfixée avec le mot clé "extern" (puisqu'elle est dans un module (fichier objet) externe à main.obj). Notez aussi que la convention d'appel est en appel standard (stdcall) : cf. source assembleur où il est noté : .model flat, stdcall. 5) Toujours dans l'explorateur, j'ajoute un dossier nommé "Assembly" (clique droit sur le projet > add > new folder"). J'y met un fichier nommé main_asm.asm ![]() Attention ! : Il ne faut pas appeler les fichier assembleur (*.asm) du même nom qu'un des fichiers C. Par exemple main.c et main.asm. A la compilation il y aurait conflit au niveau des fichiers objets (asm.obj dans les deux cas). Il s'agit ici d'une simple fonction de "string reverse" absolument pas optimisée. Le but ici étant de montrer que l'on peut aussi appeler des APIs avec "invoke" ainsi que des constantes (e.g MEM_COMMIT , etc.). On aurait pu aussi mettre des données, bref, tout se passe comme dans un projet MASM : Code Assembleur :
Attention ! : Veillez particulièrement à ce qu'aucune de vos fonctions, label , données, etc. ne porte le même nom que dans le code source en C / C++ (sinon il y a une possibilité de conflit lors de l'édition de lien). 6) Cliquez (clique droit) ensuite sur le projet (ou la solution peut importe) et choisissez "Custom build rules" : ![]() 7) Choisissez "MASM" (n'oubliez pas la checkbox) et faites "OK" : ![]() 8 ) Faites un clique droit sur le projet (ou la solution) et choisissez "Properties". ![]() N.B : Notez qu'en choisissant le projet ou la solution, les paramètres qui sont appliqués vont l'être pour tous les fichiers *.asm du projet (ou de la solution). Pour appliquer des paramètres à un seul fichier faites "clique droit sur fichier > properties". Ici on indiquera simplement le dossier des "includes" de MASM ce qui nous permettra de ne pas "hardcoder" (codé en dur) le chemin dans le fichier source : On aura donc : Code :
Code :
![]() Notez que les paramètres sont appliqués à la fois pour la sortie en "Release" et "Debug" ("All Configurations" entouré en rouge dans l'image). Normalement il n'y a plus qu'a faire un F7 ("Build solution") et tout devrait bien fonctionner... ------------------------ Problèmes possibles : - Faites un clique droit sur le projet (explorateur de solution) puis : - Configuration properties > Linker > advanced > entry point - Projet console, mettez : mainCRTStartup (ou main si vous ne voulez pas du CRT) - Projet fenêtré : winMainStartup - DLL : DllMain (ou le nom de la procédure d'entrée de la DLL). voir les "Rule files" : http://msdn2.microsoft.com/en-us/lib...cw(VS.80).aspx Il s'agit d'un simple fichier XML. Vous pouvez l'éditez avec la dialog box adéquate : http://msdn2.microsoft.com/en-us/lib...zy(VS.80).aspx - Problème complexe et très dépendant du projet.... 1) Regarder la sortie de l'éditeur de lien : - Faites un clique droit sur le projet (explorateur de solution) puis : - Configuration properties > Linker > Command line > additional options : mettez ceci : Et regardez attentivement chaque ligne pour savoir ce qui cloche (les fichiers .obj sont-ils tous trouvés ?, etc.) 2) Si vous compiler du C, veillez bien à ce que le compilo soit réglé pour compiler du C... - Faites un clique droit sur le projet (explorateur de solution) puis : - Configuration properties > C / C++ > Advanced > compile as : (le langage utilisé !) 3) Si votre projet est en C++, il faut marquer les fonctions assembleur en "extern C" dans votre source C++, par exemple : Code C++ :
4) Essayez de passer directement les fichiers .obj au linker : - Faites un clique droit sur le projet (explorateur de solution) puis : - Configuration properties > Linker > Input > additional Dependencies > : mettez les noms des fichiers .obj. Servez vous des macros ! Et avec le switch "verbose" (cf. 1) regardez ce qu'il se passe... ---------------------- Sources et projet de démo : ftp://ftp-developpez.com/neitsa/faq/AsmEtC.rar ----------------------- Il vous faut votre propre "Custom Build Rule" : cf. http://blogs.msdn.com/devdev/archive...13/465034.aspx Il vous faut un "Custom build step" (plus rigide que la procédure sous VS 2005) : http://msdn2.microsoft.com/en-us/lib...0k(VS.80).aspx |
||||||||||
|
00
|
Copyright © 2000-2013 - www.developpez.com