Partage

[Bêta ON] [Hexadécimal] Programmer en (très) bas niveau, facile !

Dans la catégorie "Autres langages" par Sbirematqui

Le 31 juillet 2011 à 13:10:13

Lire le tutoriel
Tuto ouvert aux bêta-tests
Réservé aux membres

Publicité
Le 31 juillet 2011 à 13:10:13
Le 31 juillet 2011 à 13:10:14

Cours écris il y a longtemps et à reprendre... si ça vaut la peine.

C'est pour ça qu'il est là, pour recevoir des commentaires, des messages d'encouragements//de découragements. :)
Le 31 juillet 2011 à 16:05:07

Déjà, je commence par douter de l'intérêt d'un tel document. En effet, l'ASM n'étant qu'un ensemble de mnémoniques permettant la textualisation d'un code natif à la base seulement constitué de nombres, autant écrire mov eax, ebx plutôt que 421EE7 ou que sais-je.
Mais il s'agit là d'un avis personnel pouvant être discuté.

Citation

Programme en C/C++ et autres (Type Word 2007 ou Jeu vidéo) --> Haut niveau = Les instructions ne sont pas compréhensible directement par le processeur, c'est à ce niveau qu'il y a distinction entre un programme qui marche sur un système d'exploitation et pas un autre (Sur Windows mais pas Linux, par ecemple). On a ici 2 couches.


Classifier le C et le C++ dans les langages de haut niveau est une hérésie. Je veux bien que le code natif soit à un niveau significativement plus bas, mais n'enlève pas à ces langages l'un de leurs attributs principaux.

Citation

Ainsi, c'est là qu'on voit pourquoi le très bas niveau est beaucoup plus efficace que les langages de haut niveau, qui font des détours et qui perdent énormément en performance...


Si tu catégorises toujours le C dans les langages de haut niveau, sache que de nos jours, les compilateurs sont souvent capables de produire un code de bien meilleure qualité qu'un humain.
Le seul domaine dans lequel s'illustre la performance de l'ASM est celui des instructions types SIMD, les compilateurs n'étant pas en mesure d'en tirer pleinement profit dans certains scénarios.

Citation

Et le programme lui-même, le code "processeur", qui a été compilé et convertit en instructions plus simple à comprendre (pour une machine, bien sûr ), et ça ressemble à ça :
"¾6ÊG#=›‡D̃ÀܤŸÌÒFIåÁRŒJËÄØj"


Je trouve ça volontairement mystificateur et pas pertinent d'exposer du code natif sous forme ASCII.

Citation

[...] le fabricant (Intel, Athlon, Pentium...etc) [...]


Athlon et Pentium sont des gammes de microprocesseurs fabriqués respectivement par AMD et Intel, pas des fabricants ;)

Sinon, question, dans ton TP "Hello, World !", tu comptes faire écrire un exécutable complet à partir de rien ?

PS : il y a une grosse faute de conjugaison dans ta signature, seras-tu capable de la trouver et de la corriger ? :)
Le 31 juillet 2011 à 17:00:40

Personnellement, (Attention : je n'engage pas mon avis de validateur en disant cela, c'est juste un avis personnel), le sujet me parait être recevable sous certaines conditions. En effet, c'est bien beau de bosser avec des mnémoniques, mais l'ASM cache des détails concernant le processeur qui seront surement vus dans ton cours. Ton tutoriel permettra sûrement d'aborder les notions d'endiannes, d'opcode, de modes d'adressages, voire nettement pire : de self-modifying code, qui ne sont pas vues dans le cours d'ASM (ou alors d'une manière différente et beaucoup plus succinte). Si tu fais cela correctement, ton tutoriel pourrait avoir une plus-value comparé au cours d'ASM.

Mais je pense que tu devrais contacter un autre validateur pour lui demander si le tutoriel pourrait être accepté, on ne sait jamais.

Je pense aussi qu'il faudrait modifier quelques informations dans ton premier chapitre, qui semble contenir pas mal de trolls et d'erreurs. Je serais carrément d'avis de le supprimer, histoire d'éviter des polémiques sur la notion de bas/haut niveau.
Le 31 juillet 2011 à 17:09:01

Citation : Kyron

Déjà, je commence par douter de l'intérêt d'un tel document. En effet, l'ASM n'étant qu'un ensemble de mnémoniques permettant la textualisation d'un code natif à la base seulement constitué de nombres, autant écrire mov eax, ebx plutôt que 421EE7 ou que sais-je.
Mais il s'agit là d'un avis personnel pouvant être discuté.



Là, je ne contexte pas, le tutoriel est d'un intérêt très peu réduit... mais je l'avais écrit après une expérience personnelle, celle de démonter mes programmes à l'éditeur hexadécimal. Démonter du C ne m'aida pas beaucoup, mais en étudiant les éxécutables crachés par FASM (flat assembly, pour moi le seul par lequel commençer) j'ai petit à petit compris tout ce que les nombreux tutoriels sur l'assembleur disponibles sur l'internet : comment réfléchis un ordinateur.

Vu d'aujourd'hui, ça me semble maintenant un peu absurde, mais j'ai passé ce truc un bêta test pour répondre aux personnes qui se posaient la question : "Est-ce que je peux directement écrire un programme au clavier ?"

C'est oui, et c'est à faire en hexadécimal.

Citation : Kyron

Citation

Programme en C/C++ et autres (Type Word 2007 ou Jeu vidéo) --> Haut niveau = Les instructions ne sont pas compréhensible directement par le processeur, c'est à ce niveau qu'il y a distinction entre un programme qui marche sur un système d'exploitation et pas un autre (Sur Windows mais pas Linux, par exemple). On a ici 2 couches.


Classifier le C et le C++ dans les langages de haut niveau est une hérésie. Je veux bien que le code natif soit à un niveau significativement plus bas, mais n'enlève pas à ces langages l'un de leurs attributs principaux.



Cette notion de haut et de bas est devenue très relative... En effet, à l'époque, le C était une avancée et difficile de trouver plus haut, le fortan et l'assembleur se tapant dans les mains en bas. Mais désormais, maintenant avec des monstres d'altitude tels que le python ou même pire, le java, le C nous semble terriblement bas.

Mais le C reste tout de même assez élevé. J'ai voulu nuancer cette notion de niveau en introduisant ces "couches", ç-a-d le nombre de fonctions qui sont "traversées"... Bref, c'est à reformuler, même le validateur n'avais pas compris à l'époque. :)

Citation : Kyron

Citation

Ainsi, c'est là qu'on voit pourquoi le très bas niveau est beaucoup plus efficace que les langages de haut niveau, qui font des détours et qui perdent énormément en performance...


Si tu catégorises toujours le C dans les langages de haut niveau, sache que de nos jours, les compilateurs sont souvent capables de produire un code de bien meilleure qualité qu'un humain.
Le seul domaine dans lequel s'illustre la performance de l'ASM est celui des instructions types SIMD, les compilateurs n'étant pas en mesure d'en tirer pleinement profit dans certains scénarios.



Oui, un code bien plus propre car moins ficelleux, sans goto. J'ai nuançé mon point de vue, le langage en lui-même offre beaucoup plus de possibilités, mais son utilisation requiert une grande expertise qu'on remplaçe aujourd'hui par l'exactitude des compilateurs...

Citation : Kyron

Citation

Et le programme lui-même, le code "processeur", qui a été compilé et convertit en instructions plus simple à comprendre (pour une machine, bien sûr ), et ça ressemble à ça :
"¾6ÊG#=›‡D̃ÀܤŸÌÒFIåÁRŒJËÄØj"


Je trouve ça volontairement mystificateur et pas pertinent d'exposer du code natif sous forme ASCII.



Noté.

Citation : Kyron

Citation

[...] le fabricant (Intel, Athlon, Pentium...etc) [...]


Athlon et Pentium sont des gammes de microprocesseurs fabriqués respectivement par AMD et Intel, pas des fabricants ;)

Sinon, question, dans ton TP "Hello, World !", tu comptes faire écrire un exécutable complet à partir de rien ?



Noté pour la confusion, et oui, mais pour un DOSbox. (Format .COM)

Citation : Kyron

PS : il y a une grosse faute de conjugaison dans ta signature, seras-tu capable de la trouver et de la corriger ? :)


Noté.

P.S. : Voici ce qu'on pourrait appeller l'héritier de ce truc sur l'hexadécimal
Le 30 novembre 2011 à 23:21:25

je m'intéresse assez aux langages bas niveau et aux désassembleurs et j'ai trouvé ce début de cours très intéressant et instructif.
tu comptes toujours écrire la suite sur les interruptions ?
sinon tu veux pas nous en toucher deux mots vite fait ? ;)
Le 1 décembre 2011 à 1:28:08

Citation : Mewtow

voire nettement pire : de self-modifying code


Sur une architecture Harvard avec des caches, ça me semble contre productif.

(Oui c'est mon message pour suivre ce qu'il adviendra de ce tuto. Ah, si seulement les PC tournaient sur ARM, ce cours serait bien plus simple)
Mon métier, c'est de faire fonctionner un dual-core 1GHz, GPU 23Mtri/s, 840Mpix/s, ethernet, USB, 1Go de flash et 128ko de RAM.
Le 2 décembre 2011 à 18:34:52

Ah, il a fallu quelqu'un pour déterrer mon tutoriel. ^^'

Bon... En clair, je vais faire simple : Actuellement, non, je ne finirais pas ce tutoriel. J'ai effectivement un cahier des charges bien chargé pour ce tutoriel, avec des idées innovantes et un gros projet de réécriture de la partie déjà existente... toussa...

Mais je suis au beau milieu de mes études, je ne me sens pas de dégager une quantité considérable de temps pour la documentation qu'il me faut sur le sujet, plus le temps d'écriture... ^^
Le 2 décembre 2011 à 19:48:45

Tu peux demander à chercher un repreneur pour ce tutoriel : il y a une option exprès pour ça dans l'interface du menu d'édition du tutoriel. Ça serait mieux que de jeter ton travail.
Le 15 décembre 2011 à 15:56:19

Je voudrai juste dire que le C et le C++ sont des language de 3ème génératuin la première génération étant le code binaire (le langage machine)

la 2ème génération c'est l'assembleur

la 3ème générationregroupe le C++, le C, l'ALGOL, le delphi, le java.

La 4ème génération regroupe des languages comme Access, le WLanguage, 4D, Linotte etc

et il existe même une 5ème génération de language qui est plutôt de la programmation par contrainte voir de la prog. logique
To 0 or to 1 this is the geek question
Le 3 juin 2012 à 20:05:19

Petit soucis avec la création du fichier Testeur.com(premier du nom) sous win7 64bits :s Et je trouve pas trop bien pourquoi...
The version of this file is not compatible with the version of Windows you're running. Check your computer's system informations to see wheather you need an x86 or x64 version of the program, and then contact the software publisher.

Le publisher c'est moi et j'ai beau me contacter, je sais pas comment sortir de EditHexa 8.3 un programme x64 au lieu de x86. D'autant que normalement, windows7 64bits gère les deux...

Installez un 64bits qu'ils disaient...j'aurais mieux fait de rester en 32bits ouais...j'avais que 64 cou*** et pas 128...

Edit: en gros...je pense avoir compris que le 64bits en hexa ce sera pour bien plus tard...donc je lance sous 32b et tampis(vive virtualbox)

Et en passant, elle est tordue la question sur les doigts au bout du premier chapitre sur les registres. Le piège étant bien de compter les doigts de pieds avec et non de compter en hexa(ce qui tombe sous le sens, dans un cours sur l'hexa ^^ )

...5 jours de boulot -> 5 chapitres compréhendus...

Si quelqu'un veut reprendre ce tuto, il aura au moins un lecteur vraiment zéro pour le beta test :)

Pitié, que quelqu'un le continue ou me donne une addresse ou apprendre le reste...trop envie de savoir... :'( (qui à dit mazo? :-° )
Omniarchos, simplement...

[Bêta ON] [Hexadécimal] Programmer en (très) bas niveau, facile !

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown