Page 2 sur 2

Publié : jeu. 19/févr./2009 19:24
par Anonyme
En parlant de compilateur de FRED, y'a un moyen de lui faire creer une DLL ou un exe sans entrer dans l'IDE.
Oui , tu utilises le compilo en ligne de commande ( ex : moebius )


@Denis , toi qui est un maitre , que dis-je , un dieu des dieux en prog :D , Pour la compilation d'un code source ( hors analyse syntaxique & lexicale , yeu maitrise)
Quelle connaissance faut-il avoir pour créer un petit compilateur ?

Un compilateur doit il être créer en fonction de la marque du processeur ( intel / amd x86 x64 , etc.. ) car chaque proc doit avoir son propre jeu d'instructions , ou ont-ils un standard en commun ?

Publié : jeu. 19/févr./2009 20:01
par Anonyme2
Cpl.Bator a écrit : @Denis , toi qui est un maitre , que dis-je , un dieu des dieux en prog :D , Pour la compilation d'un code source ( hors analyse syntaxique & lexicale , yeu maitrise)
Quelle connaissance faut-il avoir pour créer un petit compilateur ?

Un compilateur doit il être créer en fonction de la marque du processeur ( intel / amd x86 x64 , etc.. ) car chaque proc doit avoir son propre jeu d'instructions , ou ont-ils un standard en commun ?
Heu, tu ne te trompes pas de gars :?:

Je suis juste un amateur, ce que je connais c'est surtout dans les bouquins que je l'ai appris et sur le tas et les forums.

Je n'ai pas la prétention de savoir faire un compilateur mais j'ai écris il y a plus de 15 ans (peut-être plus) un compilateur en Pascal qui transformait un code Pascal en code assembleur pour le pour le processeur 8 bit 6809 de Motorola.

J'ai acheté un bouquin à l'époque qui a été ma bible et qui m'a donné des maux de tête mais comme je suis opiniâtre, le résultat était pas trop mal.
(La programmation par syntaxe, des grammaires à la compilation aux éditions Dunod, de B Groc et M. Bouhier).

Il faut connaitre ou apprendre l'analyse ou les analyses lexicales et syntaxiques.
Les processeurs que tu cites en 32 bits on un jeu d'instructions qui a une forte base commune. Pour le 64 bits, je ne connais pas, je n'ai pas encore de machine 64 bits et c'est pas encore dans mon budget :cry:

Après, la traduction directe en code machine est difficilement faisable (le code machine n'est pas l'assembleur, ce sont les valeurs hexadécimale que le processeur va interpréter, il ne connait pas l'assembleur ce brave microprocesseur).

Le bouquin que j'ai dit que habituellement, pour des contraintes algorithmiques, un compilateur produit du code objet, qui n'est pas directement exécutable. Il doit pour cela subir une dernière transformation...
La nécessité de produire du code objet non directement exécutable est essentiellement dûe aux instructions dont les opérandes sont des adresses. En effet, dans un grand nombre de cas, au moment de la production de l'instruction, on ne connaît pas l'adresse à mettre en opérande.
A la place, on produit une instruction contenant une adresse dites non résolue. La résolution de l'adresse sera effectuée par le chargeur ou l'éditeur de liens.

Le sujet est vaste et Fred pourrais te donner des références de bouquins ou de sites, je me souviens qu'il avait abordé ce sujet sur un forum mais je ne souviens plus trop ou.

A+

Publié : jeu. 19/févr./2009 20:17
par Anonyme
Heu, tu ne te trompes pas de gars :?:
Bah , y a qu'a regardé les dix premiers post ASM , 9 sont les tiens... :D

Publié : jeu. 19/févr./2009 21:17
par Anonyme
Bon , la réponses à toutes ces question sembles être ici :

http://www.pearson.fr/livre/?GCOI=27440100715350

Publié : jeu. 19/févr./2009 21:53
par cha0s
en informatique théorique on nous apprend d'abords les automates et leurs langages ensuite on switch sur la théorie des langages avec les grammaires qui sont juste une évolution des automates.

http://scott.univ-lehavre.fr/~ponty/Ens ... slides.pdf

Publié : jeu. 19/févr./2009 23:30
par Kwai chang caine
Cpl.Bator a écrit :
En parlant de compilateur de FRED, y'a un moyen de lui faire creer une DLL ou un exe sans entrer dans l'IDE.
Oui , tu utilises le compilo en ligne de commande ( ex : moebius )
Merci de l'info CPL 8)
Je viens d'essayer et ça marche l'enfer :D

Publié : ven. 20/févr./2009 15:45
par Ollivier
@Cpl

Tiens pour te mettre dans le bain :

Une zone de test dans le code ci-dessous et un désassemblage décrit comme suit, à l'exécution du code: 4 colonnes sont affichées:

- 1) Adresses d'instruction
- 2) Code machine instruction
- 3) Libellé instruction (Nom)
- 4) Extension instruction

Je pense que tu dois voir les difficultés apparaître entre le code machine et son interprétation. L'inversion de l'ordre des octets, le calcul relatif (Cf: instruction CALL, l'adresse est relative, il faudra donc la calculer pour chaque ligne exprimant un saut, etc...)

Code : Tout sélectionner

;__________________________________________________________
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
; Exemple d'utilisation du désassembleur
; >> Fournit le code machine d'une séquence d'instruction
; PB V4.30
;__________________________________________________________
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  DisableDebugger
  

;__________________________________________________________
Structure AsmOp
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯   
   Adr.L     ; Adresse de l'opération
   AdrS.S    ; Texte hexa de l'adresse

   SizeOp.L  ; Taille de l'instruction en octets
   CodeOpS.S ; Texte hexa représentant le code opératoire

   Op.S      ; Texte représentant l'opération
;__________________________________________________________
EndStructure
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯   
  

Global NewList Op.AsmOp()
    
   If ExamineAssembly(?Code_Start, ?Code_End)
      While NextInstruction()
    
         AddElement(Op() )
      
         Op()\Adr = InstructionAddress()
         Op()\AdrS = "0x" + RSet(Hex(Op()\Adr), 8, "0")
         Op()\AdrS = Left(Op()\AdrS, 6) + ":" + Right(Op()\AdrS, 4)

         Op()\Op = UCase(InstructionString() )
         Op()\Op = ReplaceString(Op()\Op, "0X", "0x")
         OpL.L = Len(StringField(Op()\Op, 1, " ") )
         Op()\Op = LSet(Left(Op()\Op, OpL), 8, " ") + Right(Op()\Op, Len(Op()\Op) - OpL)

      Wend

      For i = 1 To ListSize(Op() )
         If i < ListSize(Op() )
            SelectElement(Op(), i)
            Final = Op()\Adr
         Else
            Final = ?Code_End
         EndIf
         SelectElement(Op(), i - 1)
         Start = Op()\Adr
         Op()\SizeOp = Final - Start
         Op()\CodeOpS = ""
         For j = Start To Final - 1
            Op()\CodeOpS + RSet(Hex(PeekB(j), 0), 2, "0")
         Next
      Next
      
   EndIf
  
   OpenConsole()
      ForEach Op()
         Lin.S = ""
         Lin = Op()\AdrS + " " + RSet(Op()\CodeOpS, 32, " ") + "    " + Op()\Op
         PrintN(Lin)   
      Next
   Input()
   CloseConsole()
   End

;__________________________________________________________
Code_Start: ; /!\ ZONE DE TEST /!\
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯   
    a = (Random(100) * 5) + 2000
    a + 1
;__________________________________________________________
Code_End:
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯   

Publié : ven. 20/févr./2009 22:32
par Anonyme
Merci Olivier.
je vais me documenté à ce sujet en achetant le bouquin. :)

Cls , tu me dois 80 boules :D

Publié : sam. 21/févr./2009 15:34
par Cls
Cpl.Bator a écrit :Cls , tu me dois 80 boules :D
:D Ça va me couter cher cette histoire !

Quand j'aurais un peu de temps, je continuerai mon exploration des exécutables et du format PE. Je posterai ici les codes intéressants ;)

Publié : sam. 21/févr./2009 17:02
par Anonyme2
Un lien sur les ressources des fichiers Win32 (EXE, DLL, OCX, CPL, ICL, tous au format PE)

http://www.skynet.ie/~caolan/publink/wi ... resfmt.txt

Publié : dim. 22/févr./2009 16:51
par Cls
Merci Denis :)

Publié : sam. 28/févr./2009 2:23
par Ollivier
Cpl.Bator a écrit :Ollivier , t'a l'air calé en langage machine non ?

http://www.lirmm.fr/~ferber/Compilation/compil1.doc
@Cpl.Bator

Pourquoi m'as-tu posté ce lien?

Re:

Publié : ven. 09/oct./2009 10:50
par Cls
Cpl.Bator a écrit :Merci Olivier.
je vais me documenté à ce sujet en achetant le bouquin. :)

Cls , tu me dois 80 boules :D
Alors des news ? :D

Je vais me remettre au boulot à ce sujet pour mon post sur le listing des fonctions d'un programme.