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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

[fasm] ne peux pas déclarer de sections


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Points : 42
    Points
    42
    Par défaut [fasm] ne peux pas déclarer de sections
    Bonjour,

    J'ai souhaité déclaré dans mon code une section .data pour mon code mais fasm me dit que mon instruction est incorrecte. Pourtant en regardant sur plusieurs sources, la syntaxe est exactement la même du coup je sais pas trop quoi en penser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    format elf executable 3
    entry start
     
    section '.text' readable executable
     
    start:
    mov ebx, 0
    mov eax, 1
    int 0x80
    L'erreur étant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    flat assembler version 1.70.03 (16384 kilobytes memory) 
    exit.asm[4]: section '.text' readable executable 
    error: illegal instruction.
    De plus, étonnament, je n'arrive pas à faire des segments nommés, cad :
    segment .data readable executable
    Fasm me dit que le ".data" est en trop dans la directive.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    Salut

    Pour le premier code, il y a une erreur au niveau du format.
    "Format elf executable 3", ne peut être utilisé qu'avec des segments. C'est pour produire un executable directement compilé par Fasm.
    La macro utilisée pour créer ce format ne permet pas l'ajout de section manuellement.

    Pour des sections, c'est comme ça:
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    format ELF
     
    section '.text' executable
    Ca produira un fichier.obj, où il est necessaire de passer par gcc ou ld pour créer le binaire final.
    Pour ton problème avec ".data", c'est parce qu'il ne faut pas nommer les segments. C'est valable uniquement pour les sections.
    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    segment readable writeable
    Correspond à un ".data" au niveau des droits.
    A toi de mettre les bons droits selon ce que tu veux faire.

    Tu as les exemples dans le répertoire "examples" de Fasm.
    Les répertoires "elfexe" et "elfobj" présentent les deux méthodes différentes.

    Expliqué également ici:
    http://flatassembler.net/docs.php?article=manual#2.4.4

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Points : 42
    Points
    42
    Par défaut
    Merci pour ta réponse !

    par contre, j'ai essayé de le linker avec ld, celui me dit qu'il ne trouve pas le symbole d'entrée _start. Même quand je rajoute l'étiquette _start...

    Comment peut-on faire pour avoir les symboles de débugage ? En fait, au départ je souhaitais regarder comment gdb et objdump désassemble l'éxécutable, mais vu que les segments n'étaient pas nommés je ne pouvais pas faire objdump -S -j <nomDeLaSection> exit.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    Citation Envoyé par Flynet Voir le message
    Merci pour ta réponse !

    par contre, j'ai essayé de le linker avec ld, celui me dit qu'il ne trouve pas le symbole d'entrée _start. Même quand je rajoute l'étiquette _start...

    Comment peut-on faire pour avoir les symboles de débugage ? En fait, au départ je souhaitais regarder comment gdb et objdump désassemble l'éxécutable, mais vu que les segments n'étaient pas nommés je ne pouvais pas faire objdump -S -j <nomDeLaSection> exit.
    Exact pour objdump. Je l'avais justement précisé dans mon post avant de finalement le supprimer. C'est le désavantage de la méthode elf executable.

    Pour ton problème, perso hier j'ai voulu re-tester un truc avec la version obj.
    J'ai fait un gcc code.o -o code
    Même erreur que toi, alors que je n'ai jamais eu d"erreur auparavant. Sans doute une mise à jour qui fait que ça ne fonctionne plus.
    Par contre de mon côté avec ld ça fonctionne parfaitement.
    Test avec gcc pour voir.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Points : 42
    Points
    42
    Par défaut
    Bon pour ld ça semble marcher et j'ai bien ma section .txt ^^ !

    Mais GCC me renvoie plein d'erreurs au moment où il appelle lui même ld qui sont de type "invalid symbol index"

    Y a-t'il une différence notoire au niveau de la structure du programme quand FASM compile et link lui même (format elf executable 3) et quand on le fait manuellement avec ld ?

    Est-il possible d'avoir plusieurs sections ou segments en exécutable ? Si oui, comment est-ce que l'exécution du programme se déroule-t-elle (linéairement) ? Quelle section/segment sera exécutée en premier(e) ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 397
    Points : 424
    Points
    424
    Par défaut
    Citation Envoyé par Flynet Voir le message
    Bon pour ld ça semble marcher et j'ai bien ma section .txt ^^ !

    Mais GCC me renvoie plein d'erreurs au moment où il appelle lui même ld qui sont de type "invalid symbol index"
    Perso avec mon gcc c'est la même erreur que toi que tu avais avec ld, sauf que c'est pas pour "start" mais pour "main". J'ai essayé pleins de trucs différents, rien à faire.

    Citation Envoyé par Flynet Voir le message
    Y a-t'il une différence notoire au niveau de la structure du programme quand FASM compile et link lui même (format elf executable 3) et quand on le fait manuellement avec ld ?
    Carrément.
    La macro fasm crée un elf qui ne comporte pas de section, mais uniquement des segment à section dynamique.
    Après pour plus d'explications, je ne pourrais te les donner, c'est encore assez flou pour moi car je n'ai pas encore pris le temps d'étudier en profondeur le format elf.


    Citation Envoyé par Flynet Voir le message
    Est-il possible d'avoir plusieurs sections ou segments en exécutable ? Si oui, comment est-ce que l'exécution du programme se déroule-t-elle (linéairement) ? Quelle section/segment sera exécutée en premier(e) ?
    Tu veux dire avec la compilation directe par Fasm ?
    Oui. Mais il faudrait modifier la macro Fasm de façon à ce que l'elf executable puisse comporter des sections.
    (/include/elf.inc et import32(ou 64).inc)

    Pour le reste, idem, je ne peux t'en dire plus.
    Il faut que tu vois du côté de la doc.

    [edit:
    Sinon pour l'une ou l'autre méthode, ça commence à l'entry point..
    Donc pour les sections, si ton entry point est dans la section ".text", ça commencera là.]

    Quelques explications ici de part d'un membre actif du forum:
    http://board.flatassembler.net/topic.php?t=8892

    Tu peux aussi voir les différences toi-même via un readelf (c'est ce qu'il utilise d'ailleurs).
    http://fr.wikipedia.org/wiki/Executa...inkable_Format

    C'est vrais que c'est plutôt embêtant pour objdump et sans doute d'autres outils qui refuse de dumper pour cause d'absence de sections. Mais perso, j'utilise "edb debugger" qui est comme Olly sous WIn, mais comme pour Olly, la gui craint.
    L'idéal serait une gui comme pour immunity debugger, sur lequel je passe des heures.
    Donc ça c'est pour voir le programme en fonctionnement, donc pas super pratique, mais si tu veux simplement dumper, perso j'utilise le programme fourni avec Fasm (listing.asm dans "tools"), qui va te dumper le programme lors de la compilation. C'est vraiment excellent.

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ./fasm code.asm -s dump1
    ./listing dump1 dump2
    cat dump2 (ou avec un editeur de texte, peut importe)
    Et pas besoin de créer les fichiers textes de dump à l'avance, ils sont créés par fasm et listing. De plus tu vois précisément ce que chaque ligne de ton code donne comme code compilé, y compris le format elf, les imports, les macros, etc.. C'est parfait, et mieux qu'objdump au final.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Points : 42
    Points
    42
    Par défaut
    Merci je regarderai les ressources quand j'aurai le temps. Et oui j'ai également l'erreur sur le main pour gcc en plus des erreurs que je t'ai dit.

    EDB a l'air excellent bien que je préfère la console à la GUI.

Discussions similaires

  1. Je ne peux pas compiler
    Par Halobox dans le forum C
    Réponses: 8
    Dernier message: 11/12/2005, 10h47
  2. Partition endomagée, je ne peux pas booter dessus !
    Par Metroid73 dans le forum Composants
    Réponses: 3
    Dernier message: 04/11/2005, 09h20
  3. [Firebird] on ne peux pas l'exploiter avec Delphi 2005 ??
    Par Harry dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/04/2005, 12h40
  4. [C#] Pourquoi je ne peux pas sauvegarder le fichier Xml ?
    Par gregoun dans le forum Services Web
    Réponses: 5
    Dernier message: 05/05/2004, 11h00
  5. pourquoi je peux pas parler pgplsql ?
    Par blob.b dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 10/09/2003, 00h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo