Petit challenge : coder sans compilateur
Ou comment générer du code machine à la main
Le 2009-07-21 19:31:23, par Scheb, Membre du Club
Voila une petite question pour une sorte de challenge, comment compiler sans compilo? ou peut etre comment coder en binaire?^^
Je sais ça sert completement a rien c'est juste pour savoir
l'assembleur est très proche du langage machine, est il donc possible de traduire les fonctionnalités directement en binaire (et realiser un .exe pour autre pour le lire) ?
ou un alternative qui donnerai le même effet
vila vilou juste pour savoir^^
Je sais ça sert completement a rien c'est juste pour savoir
l'assembleur est très proche du langage machine, est il donc possible de traduire les fonctionnalités directement en binaire (et realiser un .exe pour autre pour le lire) ?
ou un alternative qui donnerai le même effet
vila vilou juste pour savoir^^
-
ObsidianModérateurC'est effectivement possible, en effectuant le travail du compilateur à la main. Il va sans dire que cela devient vite très fastidieux, mais ça s'est fait à une époque. Moi-même, j'ai programmé mon premier PIC en écrivant le programme sur papier, en l'assemblant à la main avec la liste des codes à côté, et en transposant le tout dans un fichier hexadécimal avant de l'envoyer au programmateur.
À chaque micro-processeur correspond sa table des instructions, lequelles sont déclinées dans toutes les versions possibles en fonction des modes d'adressage. Tu n'as qu'à relever (parfois calculer) les bonnes valeur et les aligner les unes après les autres.
Ça, c'est dans le principe. Après, pour faire un programme qui s'épanouisse pleinement au sein d'un système d'exploitation moderne, il faut qu'il puisse interagir avec et connaître à un moment t tous les points d'entrées relève de la gageure. Ensuite, le format *.exe sous Windows est assez compliqué en lui-même. C'est en soi un travail à temps plein que de vouloir le définir à la main, presque autant que la compilation proprement dite.
Cela dit, les programmes *.COM étaient faits, eux, pour être une image stricte, monolithique et sans aucune structure d'un petit programme. Ils se prêtaient assez bien à ce genre d'exercice. En convertissant les codes hexadécimaux obtenus en codes ASCII, on arrivait à créer un programme exécutable avec le bloc-notes.
Par exemple, pour faire facilement un programme qui se contentait de ressortir, on pouvait utiliser l'instruction « INT 20h » sur PC. Une fois assemblé, on obtenait CD 20. Traduit en décimal, ça faisait 205 32. Après avoir ouvert un bloc-notes, 205 s'obtenait avec Alt+2+0+5, et 32, c'était l'espace, tout simplement. Une fois saisi ces deux caractères, on sauvait le tout sous « prog.com » et on avait un exécutable en bonne et due forme.le 21/07/2009 à 19:45 -
SchebMembre du Clubtrès sympa tout ça!
donc voici pour voir si j'ai bien compris, voici un code tout bete tirer d'un site pris au hasard qui affiche un Z avec des couleurs;
J'ouvre un fichier bloc note et je traduit ceci en decimal à l'aide de l'ASCII, de la technique "alt+"Code : 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21.model small ;faut il trouver des valeurs decimal pour ceci où on laisse ? .stack 100h ; par exemple ceci donnerai: .stack 256 ? .486 .data .code main proc mov ax,@data mov ds,ax ; donc ici faut que je trouve la correspondance adequoite? d'ailleur je ne sais pas où trouver ça.... mov ah,09h mov bh,0 mov cx,1 mov al,'Z' mov bl,11111001b int 10h mov ax,04C00h int 21h main endp end main
)
(aussi il est donc impossible de coder directement en binaire ? puisque sur un bloc note on ne peut qu'ecrire en decimal)transposant le tout dans un fichier hexadécimal
Merci beaucoups pour les infosle 22/07/2009 à 18:22 -
Pour le format des instructions sur les processeur x86 en 32bits et la traduction asm/machine: http://en.wikibooks.org/wiki/X86_Ass...age_Conversion
Sinon, pour les format des fichiers exécutables Windowb, regarde du côté des "PE File"; il y avait une traduction d'une série de tutoriels sur ce format qui était pas mal fait du tout, une petite recherche sur Googel devrait t'aider
Pour le format des exécutables sous Linux, il faut regarder du côté elf. Là aussi y a moyen de trouver la doc....
À partir de là, tu ouvres ton éditeur hexa préféré, et tu fais du hard-codingIl existe un moyen de lire et ecrire de l'hexadecimal ?
Sinon, ce que peut être très enrichissant, c'est faire un petit compilo toi-même...le 09/08/2009 à 16:38 -
SchebMembre du Clubmerci beaucoups, je vais voir ça de suitele 10/08/2009 à 10:12
-
Mais franchement, laisse tomber l'idée de coder, déjà rien que pour coder en hexa avec les formats elf ou pe, tu vas vraiment t'amuser... C'est du suicidele 11/08/2009 à 11:02
-
jabbounetMembre expertParfois tu n'a pas le choix, c'est en général quand tu écrit un driver pour une carte et tu le mixe avec un langage de plus haut niveau pour ce qui n'est pas spécifique à ta carte.le 11/08/2009 à 11:08
-
et tu code directement en hexa?
Pourquoi ne pas utiliser l'asm alors?le 14/08/2009 à 8:43 -
SchebMembre du Cluboui ne t'inquiete pas, mon but n'étais pas de coder, mais surtout de comprendre
Donc c'est bon, grâve à vous j'ai compris que c'étais possible mais surtout comment ça l'étaisle 17/08/2009 à 13:30