Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1029 connectés 

  FORUM HardWare.fr
  Programmation
  ASM

  Compilateur asm, comment ça fonctionne ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Compilateur asm, comment ça fonctionne ?

n°1135932
NullDragon
Posté le 30-06-2005 à 14:31:08  profilanswer
 

Bonjour, je sais en gros comment fonctionne les compilateurs, on fait une analyste syntaxique, grammaticale, etc pour transformer cela en assembleur, puis en code objet, puis en executable. En bref ce n'est que de la conversion de format de fichier en y ajoutant le nécessaire avec l'éditeur de liens.  
 
La ou je me pose des questions c'est pour les compilateurs assembleur, si je voudrais en écrire un, quelle est le format du code objet, est-ce qu'il y a un standard précis à respecter ? Ensuite comment savoir en quoi traduire les instructions asm en son équivalent binaire ?? Est-ce qu'il y a une liste quelque part ?  
 
Suite à cela, après avoir analysé le code source, transformé cela en une suite binaire, comment savoir quelle instruction doit aller ou dans le fichier objet ? (à moins qu'il y ait un format précis) Est-ce qu'on enregistre la conversion de façon séquentielle pour faire un gros fichier .o qui contient l'équivalent binaire du code source dans le même ordre que ça à été écrit ? Parce que ça revient au même, à moins bien sûr que par exemple l'instruction MOV sont équivalent binaire ne soit pas (4D4F56) soit 10011010100111101010110 mais autre chose. Dans mon exemple MOV == à '10011010100111101010110' selon le code ascii, est-ce que le cpu respecte la norme ascii ?  
 
merci de m'éclaire sur ces points  :hello:

mood
Publicité
Posté le 30-06-2005 à 14:31:08  profilanswer
 

n°1135973
theshockwa​ve
I work at a firm named Koslow
Posté le 30-06-2005 à 14:53:02  profilanswer
 

recherche sur opcode, formats de fichiers PE ou ELF, ce sera un bon début

n°1135997
NullDragon
Posté le 30-06-2005 à 15:04:58  profilanswer
 

Ok merci :)

n°1136042
NullDragon
Posté le 30-06-2005 à 15:30:32  profilanswer
 

J'ai cherché sur Google, mais je n'ai rien trouvé de précis  :(  
 
Tout ce que je trouves sur Google c'est des sites qui parlent des instructions: MOV, DIV, etc. mais sans parler de leur équivalent binaire ni de la façon de les écrire dans le fichier objet.

n°1136060
chrisbk
-
Posté le 30-06-2005 à 15:37:08  profilanswer
 

Citation :

comment savoir en quoi traduire les instructions asm en son équivalent binaire ??


 
y'a un format la aussi, tu penses (et non le cpu lit pas de l'ascii [:zaib3k]
 
globalement, et pour simplifier, ca a la tronche :
 
[opcode d'instruction] [MODRM] [SIB] [DEPLACEMENT] [CONSTANTE]
 
le premier opcode indique l'instruction qu'on veut utiliser
l'octet modrm explicite les operandes. De mémoire, il est composé en 3 parties
 11 222 333  
 
la partie 1 indique la taille des operandes (8,16,32 bits)
la partie 2 indique l'operande de destination OU est parfois un modifieur de l'instruction (oué c'est le bordel)
la partie 3 indique la source
 
SIB : Scale Increment byte pour coder des trucs genre mov [eax + ebx * 4 +127]
 
DEPLACEMENT : le +127 de mon exemple d'au dessus
CONSTANT : bin une constante, genre dans mov [eax+2],5986
 
bref y'a pas de solution, faut se palucher l'encodage a la main a partir de la doc intel...
 
 
 
 
 
 
 
 
 
 
 

n°1136075
NullDragon
Posté le 30-06-2005 à 15:46:24  profilanswer
 

Ok :) Mais si je comprends bien, cette traduction du code on la place séquentiellement dans un fichier objet, enfin un fichier .o, un fichier txt ou peu importe et c'est la qu'intervient l'éditeur de liens ? Pour convertir ce fichier objet en un format d'un OS, PE, ELF, etc ?
 
Le fichier objet a un format précis ou si on écrit toute la traduction du code de façon séquentielle ? :)

n°1136079
chrisbk
-
Posté le 30-06-2005 à 15:48:58  profilanswer
 

bin ensuite au niveau des format d'executable, j'en ai aucune idée. Moi j'avais fait un truc a moi parce que je le pouvais, je suis pas allé plus loin. Je peux t'aider sur l'encodage d'opcode mais ca sera tout :d

n°1136094
NullDragon
Posté le 30-06-2005 à 15:53:14  profilanswer
 

Ok :)
 
À part la doc de intel qui est volumineuse, je voudrais pas me perdre dans ces documents :D Est-ce qu'il y a un simple fichier txt quelque part sur le net qui a une liste des opcodes avec leur équivalent binaire incluant SIB DEPLACEMENT, etc ? :D
 
J'aimerais faire un compilateur asm, je crois que c'est une bonne base à avoir, ça aide à comprendre bien des choses je crois :) Et j'aimerais bien faire ce compilateur en asm :D
 

n°1136105
theshockwa​ve
I work at a firm named Koslow
Posté le 30-06-2005 à 15:59:00  profilanswer
 

le fichier objet a un format précis (notamment, tu as la définition des symboles dans l'objet avec une information pour savoir s'ils sont dans l'objet ou externes afin que l'éditeur de lien puisse s'y retrouver)
 
Et oui, c'est l'éditeur de lien qui sort le fichier au format PE (pour windows) ou ELF (pour linux, BSD ou autre)
 
Edit : je ne suis pas trop sur de moi dans ce domaine, donc je laisse d'autres personnes me corriger si je me trompe ... :jap: En tout cas, il me semble bien que le format des objets dépend du compilateur, même si tu peux faire des suppositions sur ce que tu devras trouver dedans


Message édité par theshockwave le 30-06-2005 à 16:00:10
n°1136111
chrisbk
-
Posté le 30-06-2005 à 16:01:17  profilanswer
 

NullDragon a écrit :

Ok :)
 
À part la doc de intel qui est volumineuse, je voudrais pas me perdre dans ces documents :D Est-ce qu'il y a un simple fichier txt quelque part sur le net qui a une liste des opcodes avec leur équivalent binaire incluant SIB DEPLACEMENT, etc ? :D
 
J'aimerais faire un compilateur asm, je crois que c'est une bonne base à avoir, ça aide à comprendre bien des choses je crois :) Et j'aimerais bien faire ce compilateur en asm :D


 
ouais, j'en avais de la bonne, mais C'etait sur un site nommé "webster"
 
ah bin j'avais fait un topic ici meme, fait une recherche sur mon pseudo en auteur (avec juste "titre de message" de choisi) et regarde dans les vieux topics (genre 2-3ans)

mood
Publicité
Posté le 30-06-2005 à 16:01:17  profilanswer
 

n°1136130
NullDragon
Posté le 30-06-2005 à 16:10:41  profilanswer
 

Hmm, je n'ai rien trouvé  :pt1cable:  
 
Il est écrit webster dans le titre du sujet ? Tu l'avais posté dans la section programmation ASM ? :)

n°1136139
theshockwa​ve
I work at a firm named Koslow
Posté le 30-06-2005 à 16:15:31  profilanswer
 
n°1136151
NullDragon
Posté le 30-06-2005 à 16:21:54  profilanswer
 

Merci  :jap:

n°1136162
NullDragon
Posté le 30-06-2005 à 16:32:05  profilanswer
 

Autre petite question :D
 
Je vais tenter de créer un petit OS, j'aime la programmation système et bas niveau et si je comprends bien c'est le créateur du OS qui décide de son format d'exécutable, pour Windows c'est PE par exemple. Mais le loader fonctionne comment lui exactement ? Car c'est le loader qui prend les instruction dans l'exe et place cela en mémoire puis envoie un Jmp au cpu pour qu'il exécute les instructions du exe n'est-ce pas ? :D
 
Comme le cpu ne comprend que ses instructions, il faut que le loader décortique l'exe et c'est aussi lui qui load par exemple une dll et la décortique à son tour, etc. ? :D

n°1136167
chrisbk
-
Posté le 30-06-2005 à 16:34:24  profilanswer
 

jcrois tu vas trop vite en besogne. Au besoin, fait toi deja ton format d'execute et ensuite code (en C ou autre) le loader qui chargera et executera le code. T'aurais le temps pour penser au reste plus tard)

n°1136198
NullDragon
Posté le 30-06-2005 à 16:46:34  profilanswer
 

Ok :) Mais c'est justement ce que je me demande, comment fonctionne un loader et un format d'exe, est-ce qu'un format d'exe doit contenir des trucs de base qui sont commun à tout les exe ? Mis à part de contenir les instructions :D Ensuite je supposes que le loader doit aller cibler le point d'entrée de l'exe, d'ou la nécessité des main() et winmain() dans les programmes :D Mais est-ce que le passage de la main au cpu se fait uniquement par un Jump ou si c'est plus complexe que ça ?
 
Je me suis toujours demandé pourquoi Microsoft avait décidé de changer le nom main() pour Winmain() à part l'esthétique.  [:chacal_one333]

n°1136208
chrisbk
-
Posté le 30-06-2005 à 16:50:48  profilanswer
 

le prototype de winmain est different de main

n°1136213
NullDragon
Posté le 30-06-2005 à 16:52:28  profilanswer
 

Ah ? Différent en quoi ? il me semble qu'un point d'entrée c'est un point d'entrée :D

n°1136233
theshockwa​ve
I work at a firm named Koslow
Posté le 30-06-2005 à 17:00:34  profilanswer
 

l'exe peut contenir pas mal de choses, des indications sur l'adresse à laquelle sera chargée le programme (pour le PE, et évidemment, l'adresse est exprimée dans l'espace d'adressage du processus qui sera créé) et des adresses pour les symboles à des fins de debug, par exemple. J'ai encore un souvenir assez amer des stabs du format ELF que j'ai pu découvrir il y a quelques mois ... heureusement que j'ai pas trop eu à bosser là-dessus ...
 
Normalement, tu dois pouvoir trouver une description de ces formats assez facilement sur google

n°1136236
theshockwa​ve
I work at a firm named Koslow
Posté le 30-06-2005 à 17:01:37  profilanswer
 

NullDragon a écrit :

Ah ? Différent en quoi ? il me semble qu'un point d'entrée c'est un point d'entrée :D


 
 
le point d'entrée dans ton programme est rarement main ou même winmain.
 
Le vrai point d'entrée se chargera de faire des opérations préalables (notamment le préchargement de certaines DLL) avant de lancer ton main ou ton winmain, selon les cas

n°1136237
chrisbk
-
Posté le 30-06-2005 à 17:02:05  profilanswer
 

NullDragon a écrit :

Ah ? Différent en quoi ? il me semble qu'un point d'entrée c'est un point d'entrée :D


 
ouais, sauf que ton point d'entrée il accepte peut etre des parametres [:el g]

n°1136253
NullDragon
Posté le 30-06-2005 à 17:14:56  profilanswer
 

Ah oui :)
 
Mais un main() aussi accepte des paramètres non ? :D
 
Je suis en train de lire le format PE, c'est très intéressant, ça dit entre autre que le fichier est complètement loadé en mémoire, mais que les sections ne sont pas nécessairement alignées les unes après les autres.
 
Je sens que je vais m'amuser :D
 
Mais dans l'en-tête il y a des signatures pour identifier par exemple sur quelle machine et OS le exe doit tourner. Ces différentes signatures, est-ce qu'il y en a une liste complète quelque part ? Est-ce qu'il y a une norme ISO derière ça ou si c'est Microsoft qui à décidé que ce serait ça ? :D

n°1136264
theshockwa​ve
I work at a firm named Koslow
Posté le 30-06-2005 à 17:25:32  profilanswer
 

je sais que dans l'ELF, on peut savoir si l'exécutable est prévu pour tourner sur un hôte big endian ou little endian, donc j'imagine qu'on doit aussi pouvoir savoir si on doit s'attendre à un proc 64 bits ou non ou ce genre de subtilité ... Cependant, ce n'est pas limitatif à _1_ os ... on peut faire tourner des programmes linux sous BSD, par exemple (si, en activant l'émulation linux dans le kernel [:petrus75] {edit : sous NetBSD, en tout cas :o} )
 
Edit : un acronyme te servira aussi peut-être bientôt : ABI


Message édité par theshockwave le 30-06-2005 à 17:29:57
n°1136279
NullDragon
Posté le 30-06-2005 à 17:39:31  profilanswer
 

ABI ? :)
 
Qu'est-ce que c'est ?  [:chacal_one333]

n°1136286
chrisbk
-
Posté le 30-06-2005 à 17:43:20  profilanswer
 

Helene et les garcons, le miel et les abeilles, tout ca

n°1136358
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 30-06-2005 à 19:31:41  profilanswer
 

NullDragon a écrit :

ABI ? :)
 
Qu'est-ce que c'est ?  [:chacal_one333]


Application Binary Interface
ce sont les conventions d'appel de fonction

n°1136367
NullDragon
Posté le 30-06-2005 à 19:46:44  profilanswer
 

Ok :) Mais concrètement c'est quoi une "convention" d'appel ?  :whistle:

n°1136370
chrisbk
-
Posté le 30-06-2005 à 19:49:00  profilanswer
 

jcrois tu veux griller les etapes la, c'est la base d'un appel de fonction ca

n°1136373
NullDragon
Posté le 30-06-2005 à 19:53:51  profilanswer
 

Non c'est juste que j'aime bien regarder un peu de tout en général, ça m'aide à faire les liens entre tout les éléments :) La base d'un appel de fonction ?
 
Des fonctions qu'on créé soi-même ou existance, sous C par exemple ??
 
Il y a une façon de les appeler ? je croyais qu'il suffisant de donner l'adresse de la fonction, prendre les paramètre dans la pile, exécuter les instructions, mettre le retour dans la pile, jump sur la fonction de retour, prendre la valeur dans la pile s'il y a lieu, etc. :D

n°1136375
chrisbk
-
Posté le 30-06-2005 à 19:55:15  profilanswer
 

NullDragon a écrit :

Non c'est juste que j'aime bien regarder un peu de tout en général, ça m'aide à faire les liens entre tout les éléments :) La base d'un appel de fonction ?
 
Des fonctions qu'on créé soi-même ou existance, sous C par exemple ??
 
Il y a une façon de les appeler ? je croyais qu'il suffisant de donner l'adresse de la fonction, prendre les paramètre dans la pile, exécuter les instructions, mettre le retour dans la pile, jump sur la fonction de retour, prendre la valeur dans la pile s'il y a lieu, etc. :D


 
oué, en gros, enfin, faut savori que IP est pushé sur lors d'un call et le pop+jmp est fait par ret
 
la question c'est  
1/ ou tu passes les parametres d'une fonction
2/ dans quel ordre
3/ que fais tu des registres ALU et de la pile FPU
 
 

n°1136376
chrisbk
-
Posté le 30-06-2005 à 19:55:43  profilanswer
 

en C++ tu peux modifier la convention d'appel. Genre sous VS t'as les mots clés
 
__cdecl, __stdcall __fastcall


Message édité par chrisbk le 30-06-2005 à 19:56:02
n°1136377
NullDragon
Posté le 30-06-2005 à 20:00:00  profilanswer
 

Ah oui j'avais vu cela en C++ j'y ait lu quelques textes sur ça, si j'ai bien compris c'est la façon dont on passe les paramètres dans quel ordre et comment se traite le retour.
 
Ou on les passes, tu veux dire ou mettre les valeurs des variables ? Sur la pile j'imagine :D
 
Qu'est-ce les registres ALU et la pile FPU ? C'est une pile prédifini par le cpu ??
 
Mais tout cela est d'ordre d'un OS ou si c'est "général" dans le sens ou ça dépend du Loader ?

n°1138056
jan0
Posté le 02-07-2005 à 14:28:43  profilanswer
 

pour les conventions d'appels ( et le reste de l'assembleur )
http://www.mentaloverflow.de/robsi [...] ok-pdf.zip
pour le décodage d'opcode
http://pr0g.free.fr/fichiers/opcodedecodingp1.txt
la dedans aussi il doit y avoir des trucs
http://www.intel.com/design/pentiu [...] ex_new.htm
 
bon courage  :hello:

n°1138145
NullDragon
Posté le 02-07-2005 à 17:02:42  profilanswer
 

Merci  :jap:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASM

  Compilateur asm, comment ça fonctionne ?

 

Sujets relatifs
JSP : probleme utilisation jsp:useBeanQuel est le meilleur compilateur microsoft?
Comment créer un compilateur C++ ?Fonction Validation Email qui ne fonctionne pas alors qu'elle devrait
compilateur VBUtilisation d'une librairie avec 2 compilateurs
[Access 2003] certaines propriétés ou méthode ne fonctionne pas !!Compilateur multi-langages
tomcat jsp: comment fonctionne l'encodage URL vers java?Condition elsif ne fonctionne pas comme je le veux.
Plus de sujets relatifs à : Compilateur asm, comment ça fonctionne ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR