IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Petit challenge : coder sans compilateur
Ou comment générer du code machine à la main

Le , par Scheb

12PARTAGES

0  0 
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^^

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Obsidian
Modérateur https://www.developpez.com
Le 21/07/2009 à 19:45
C'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.
0  0 
Avatar de Scheb
Membre du Club https://www.developpez.com
Le 22/07/2009 à 18:22
trè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 : Sélectionner tout
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
mmmh ça m'interesse beaucoup, j'aimerai savoir comment faire (bien sûr je sais que cela ne sert pas mais bon, c'est interessant)

(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
Il existe un moyen de lire et ecrire de l'hexadecimal ?

Merci beaucoups pour les infos
0  0 
Avatar de
https://www.developpez.com
Le 09/08/2009 à 16:38
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-coding

Il existe un moyen de lire et ecrire de l'hexadecimal ?
Tu utilise un éditeur hexadécimal... Y en a des pas mal sur Internet, en cherchant un peu...

Sinon, ce que peut être très enrichissant, c'est faire un petit compilo toi-même...
0  0 
Avatar de Scheb
Membre du Club https://www.developpez.com
Le 10/08/2009 à 10:12
merci beaucoups, je vais voir ça de suite
0  0 
Avatar de
https://www.developpez.com
Le 11/08/2009 à 11:02
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 suicide
0  0 
Avatar de jabbounet
Membre expert https://www.developpez.com
Le 11/08/2009 à 11:08
Citation Envoyé par Lord BlackFox Voir le message
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 suicide
Parfois 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.
0  0 
Avatar de
https://www.developpez.com
Le 14/08/2009 à 8:43
et tu code directement en hexa?
Pourquoi ne pas utiliser l'asm alors?
0  0 
Avatar de Scheb
Membre du Club https://www.developpez.com
Le 17/08/2009 à 13:30
Citation Envoyé par Lord BlackFox Voir le message
laisse tomber l'idée de coder
oui 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'étais
0  0