+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Membre chevronné Avatar de edfed
    être humain
    Inscrit en
    décembre 2007
    Messages
    471
    Détails du profil
    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : décembre 2007
    Messages : 471
    Points : 628
    Points
    628

    Par défaut ecrire une page html avec fasm

    bonjour, vous qui êtes désireux de coder en assembleur quoi qu'il arrive, j'ai une bonne nouvelle pour vous.

    à force de jouer avec le compilo fasm et ses multiples facettes de la prog bas niveau, il est apparu nettement qu'il est très facile de construire des macros destinées à compiler un peu tout et n'importe quoi, en utilisant la syntaxe légère de fasm.

    et au final, ça m'a donné l'occasion de tester une théorie selon laquelle il est possible d'écrire du html avec fasm, de sorte à enlever cette satanée syntaxe html qui à le don d'être très fatigante à lire et à écrire.

    concrètement, ça donne du code qui à cette tête:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    include 'mhtml.inc'
     
            header  '-FOOL-','EDFED0'
            center
            § '<h1>fool, the edfeds website.</h1>'
            db '<embed src="http://fool.asm4u.net/asmx86/le%20reste/xfiles-s3e6-20m20s.mp3" autostart=true loop=false hidden=true></embed>'
            § '<span style="color: #201088"><FONT SIZE=1>'
            link '#kaya',img 'http://fool.asm4u.net/kaya-icon-80.png'
            link '#fool',img 'http://fool.asm4u.net/fool-icon-80.png'
            link '#pic',img 'http://fool.asm4u.net/pic-icon-80.png'
            empty
     
            § 'Hello world, welcome in my site, it is a very simple site writen with fasm using macros'
            § 'here, you can read and download some stuff about some of my passions'
            § ''
            § 'then, click and enjoy the first version of my website'
            empty
     
            anchor 'kaya',img 'http://fool.asm4u.net/kaya-icon-80.png'
            link 'http://fool.asm4u.net/draw/', db 'click here to see draw folder'
            file 'kaya.inc'
            empty
     
            anchor 'fool',img 'http://fool.asm4u.net/fool-icon-80.png'
            file 'fool.inc'
            empty
     
            anchor 'pic',img 'http://fool.asm4u.net/pic-icon-80.png'
            file 'pic14.inc'
            empty
     
            link 'http://fool.asm4u.net/index.html',img 'http://fool.asm4u.net/fool-icon-80.png'
            § 'return to HOME'
            footer
    bon, rien de bien transcendant, mais ça marche, et le résultat est intéressant, ça donne cet embryon (plein de w3c errors) fonctionnel de mon site.

    http://fool.asm4u.net

    l'utilisation des directives include, file, db, etc... permet de manipuler des octets sans difficultés, c'est en quoi fasm permet de compiler tout et n'importe quoi avec la même syntaxe que lors de l'écrire de code asm.

    les expressions numériques, combinées à des directives, permettent de générer des octets de manière mathématique, logique, prédéfinie, etc.

    l'utilisation de la directive file permet d'inclure des fichiers binaire dans le fichier final, sans traitement aucun. du pur flat assembler, et ça permet de composer des briques html, de les agencer, de les manipuler.

    l'utilisation de la directive include permet de manipuler des blocs de macros et de directives, de sorte à avoir des codes toujours plus comprimés. en partant d'une suite d'includes, de macros et de file, il est possible de générer n'importe quel type de compilation.


    les macros sont là pour aider à l'écriture, ça permet de simplifier encore la syntaxe en limitant les paramètres, en les factorisant, en manipulant des file et des includes avec une seule macro.

    voici le fichier macro "mhtml.inc', à include à la première ligne de tout fichier source.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
            format binary as 'html'
            org 0
    crlf    equ 10,13
    macro   header title,color
    {
    db '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">',crlf
    db '<HTML>',crlf
    db '<HEAD>',crlf
    db '  <TITLE>',title,'</TITLE>',crlf
    db ' </HEAD>',crlf
    db ' <BODY bgcolor="',color,'">',crlf
    }
    macro   footer
    {
    db '</BODY></HTML>',0
    }
    macro   § text
    {
    db '<br>'
    db text
    }
    macro img i
    {
    db '<IMG SRC="',i,'" ALT="',i,'">'
    }
    macro link l,t
    {
    db '<a href="',l,'">'
    t
    db '</a>'
    }
    macro anchor l,t
    {
    db '<a name="',l,'">'
    t
    db '</a>'
    }
    macro center
    {
    db '<center>'
    }
    macro empty
    {
    § ''
    § ''
    § ''
    § ''
    § ''
    § ''
    § ''
    § ''
    § ''
    }
    vu le fonctionnement de fasm, fermement lié aux services du système de fichiers, il est surement avantageux d'inventer une extension nouvelle, juste pour signifier un code source du type macro html. disons qu'une extension du style ".hsm" pourrait convenir, ou tout simplement, utiliser l'extension ".asm", mais uniquement dans un dossier dédié aux source html compilés par fasm.

    le fait d'utiliser la directive file permet de composer en html pur des blocs, comme par exemple le bloc 'pic14.inc', qui est un fragment de fichier html, un bout de page qui peut être mis n'importe où dans le corps du document.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    <FONT SIZE=4>
    <H1>-PIC14-</H1>
    <br>
    <br>
    </FONT>
    <FONT SIZE=1>
    pic14 is an include file,some macro files, and lets you compile code in binary.
    <br>
    PIC14 means 14 bits instruction set, the instruction set of PIC12fxx and pic16fxx series.
    <br>
    for PIC18fxx series, instruction set is in 16 bits, then, need an other macro, that will be named PIC16. :) to be continued
    <br>
    i test it on a minimal circuit board, with a pic 12f 675, i choose this chip because of:
    <br>
    only 8 pins
    <br>
    low price
    <br>
    analog conversion
    <br>
    ease to program
    <br>
    pic family that share the same instuction set and internals.
    <br>
    <br>
    <br>
    <A HREF="http://fool.asm4u.net/pic14bit.zip">click here to download the PIC macro project</A>
    <br>
    this file contains:
    <br>
    <br>
    </span>
    <span style="color: #202020">
    pic14.inc ;macros to compile pic14 instructions set
    <br>
    blinkled.asm ;test code for the connection diagram below
    <br>
    RCD.png ;JDM compatible programmer connection diagram, to use with ICPROG or compatible
    <br>
    sprint.zip ;tool to draw PCB, RCD programmer is "sprint/macro/interface/ICSP.lay"
    <br>
    pic12f675.pdf ;datasheet for the Pic 12f675 device
    </span>
    <span style="color: #008800">
    <br>
    <br>
    <br>
    to flash a PIC with blinkled.pic:
    <br>
    <br>
    </span>
    <span style="color: #202020">
    open icprog
    <br>
    select pic 12f675 device
    <br>
    open blinkled.pic, the first word in program memory should be 2804
    <br>
    reverse byte order >> YES
    <br>
    connect RCD programmer, if not still done.
    <br>
    program all
    <br>
    wait a little (approximately 10 seconds), power down and up, or reset
    <br>
    the led blinks, the microcontroler Hello world.
    <br>
    <br>
    </span>
    <span style="color: #880000">
    <br>
    if the device don't program, check icprog setings.
    <br>
    vcc control enable for JDM
    <br>
    verify during programming
    <br>
    com1
    <br>
    direct I/O
    <br>
    delay 4
    <br>
    <img src="http://fool.asm4u.net/RCD.png" alt="rcd programmer">
    <br>
    </span>
    <span style="color: #DD2000">
    <b>
    if the device don't program, check that the device is readable, if it don't read at all, check your connections.
    </b>
    </FONT>
    au final, je pense qu'il sera possible de coder de très beaux site, à la main, avec un code source assez petit et sympa à éditer.
    pour l'instant, cette solution (loin d'être parfaite) me convient parfaitement. il sera nécessaire par la suite de gérer la création dynamique de pages, le compilo fasm étant assez rapide pour être exécuté en tant que script cgi ou batch s'il est chargé en mémoire en tant que dll.

    j'espère que cette petite démo vous à donné envie d'approfondir le sujet, de jouer avec et, pourquoi pas, aider à augmenter cette contribution avec des macros plus abouties et des tests de viabilité.

    vous aurez toutefois besoin d'un niveau non négligeable en écriture de macros, et une bonne compréhension de ce que sont les octets, les fichiers, le code html et la compilation. sans quoi vous aurez du mal à cerner en quoi c'est intéressant.

    bonne journée à bientôt pour une suite...


  2. #2
    Membre confirmé Avatar de golden boy
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2010
    Messages : 120
    Points : 216
    Points
    216

    Par défaut

    Voilà qui est intéressant, l'écriture d'une page Web en assembleur m'avait toujours un peu intrigué (même si ici c'est aussi beaucoup de macros).
    Pour ce qui est de la génération de pages dynamiques tel qu'on le ferait avec un langage "classique" comme PHP, là je serais plus curieux de voir comment s'y prendre, tu comptes faire un espèce de "framework Web" en assembleur/macro FASM ?

    Je ne pense pas contribuer (je ne connais pas FASM et j'utilise très rarement les macros), mais je vais suivre la chose

  3. #3
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    1 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 1 447
    Points : 1 970
    Points
    1 970

    Par défaut

    Bonjour,

    Tu peux toujours générer dynamiquement une page HTML avec du code assembleur grâce à CGI (qui permet aussi d'exécuter des scripts Perl, etc...).

    Cependant, créer des pages dynamiques avec du code assembleur (ou en C) est dangereux car une mauvaise gestion de la mémoire rend un programme vulnérable et permet de prendre le contrôle du serveur l'hébergeant (via buffer overflow + injection de shellcode par exemple).

    Cependant, si t'es un warrior, pourquoi pas?
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais,il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plûtot des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  4. #4
    Membre chevronné Avatar de edfed
    être humain
    Inscrit en
    décembre 2007
    Messages
    471
    Détails du profil
    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : décembre 2007
    Messages : 471
    Points : 628
    Points
    628

    Par défaut

    cgi peut lancer tout type d'exécutable je crois bien.

    donc, un batch peut être lancé par cgi pour générer des pages dynamiquement.
    si dans ce batch, on intègre une commande de compilation avec fasm (tasm, masm, nasm...etc), on pourrait générer une page html, en utilisant les protections du compilateur.

    ce qui rendrait difficile toute tentative de hacking par n'importe quel moyen que ce soit, car un assembleur possède une très bonne gestion d'erreur, et n'accepte que les codes sources valides à 100%, il est là pour gérer tout ce qui sort du cadre strict du code source.
    ce code ne pourra pas être dangereux pour le serveur
    mais pour le client, il pourrait être très dangereux, donc, c'est surtout le client ou toute machine réceptrice qui devra faire gaffe à ce qu'elle demande.
    car un compilo peut détecter des erreurs du type buffer overflow (not enough memory), des file not found (en cas de reccursion d'includes), dans tout les cas la mémoire sature, ou le code contient une erreur, et fasm répond par un message d'erreur et stoppe net.

    les compilo asm sont faits pour traduire le code source en binaire, cette opération est très simple, et demande pas grand chose, le fait qu'un compilo demande beaucoup de dev est du à la gestion des erreurs.

    je pense que l'on pourrait, en optimisant fasm pour le faire, implémenter fasm en tant que commande msdos de base, de sorte qu'il soit exécutable très rapidement depuis un batch (toujours en mémoire). le script quand à lui peut etre composé par une petite appli maison qui formatera la requête, comme ça, fasm reçoit un code source (requete.asm) fiable et protégé par des macros (include "serveur.inc") en première ligne de la source, tout le code qui suit serait donc dépendant de ce fichier.

    le danger serait si un hacker arrive à modifier le batch. et ça, ça dépend d'autre chose je crois, du style apache.

    enfin, voilà pour les théories de noob, la pratique, ça vient plus tard, beaucoup plus tard car il faut d'abord aborder et maitriser CGI, apache, tcp-ip, ieee802.3, et tout le bazar. de quoi s'occuper au moins un an ou deux.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •