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 :

[linux x64, NASM] erreur segfault sur tout les appels syscall


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut [linux x64, NASM] erreur segfault sur tout les appels syscall
    Bonjour,

    j'essai de me mettre a l'assembleur pour processeur (j'en avais deja fait dans le temps pour des microcontroleur) mais je bloque sur chaque appel syscall que je tente de faire.

    voici le code que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    section .data
    	message: db 'hello, world!',0
     
    section .text
    	global _start
     
    _start:
    	mov     rax, 4
    	mov     rdi, 1
    	mov     rsi, message
    	mov     rdx, 14
    	syscall
     
    	mov     rax, 1
    	xor     rdi, rdi
    	syscall
    je le compile et l'execute ensuite avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    nasm -f elf64 -o test.o test.asm
    ld -s -o test test.o
    ./test
    l'execution me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    hello, world!Erreur de segmentation
    Quelqu'un aurait une idée ?
    Systèmes d'Informations Géographiques
    - Projets : Unlicense.science - Apache.SIS

    Pour un monde sans BigBrother IxQuick ni censure RSF et Les moutons

  2. #2
    Membre actif 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 : 230
    Points
    230
    Par défaut
    Bonjour,

    ça donne quoi en mettant 60 dans RAX pour le exit ? (cf. le fichier unistd_64.h qui indique que 60 est le numéro correspondant à exit).

  3. #3
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    Ca ne produit plus d'erreur, mais le message ne s'affiche pas non plus.
    Systèmes d'Informations Géographiques
    - Projets : Unlicense.science - Apache.SIS

    Pour un monde sans BigBrother IxQuick ni censure RSF et Les moutons

  4. #4
    Membre actif 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 : 230
    Points
    230
    Par défaut
    En regardant unistd_64.h, je me suis rendu compte que le sys_write était 1 et non pas 4 (comme j'en ai l'habitude en 32 bits), en mettant 1 dans RAX pour l'écriture ça devrait marcher

  5. #5
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    Ha parfait, ca marche cette fois.
    Il n'y a vraiment aucune relation entre les syscall 32 et 64 ...

    tu parle du fichier unistd_64.h (celui ci je suppose : /usr/include/asm/unistd_64.h).

    sais tu ou je pourrais avoir plus de details sur chacun des syscall ?
    une doc explicative, type de parametres ...etc...
    Systèmes d'Informations Géographiques
    - Projets : Unlicense.science - Apache.SIS

    Pour un monde sans BigBrother IxQuick ni censure RSF et Les moutons

  6. #6
    Membre actif 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 : 230
    Points
    230
    Par défaut
    Pour connaître la fonction de chaque syscall, je me sers du man2, et pour connaître leur numéro attribué, je me sers en effet du fichier /usr/include/asm/unistd_xx.h « like a boss »

    Les ressources sur le net son malheureusement toujours encore très axées sur le 32 bits...

  7. #7
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    Citation Envoyé par golden boy Voir le message
    Les ressources sur le net son malheureusement toujours encore très axées sur le 32 bits...
    Je l'ai appris a mes depends ces derniers jours. il n'y a plus grand chose de commun entre les deux.
    - les numeros de syscall changes
    - les registres a utiliser changes (un ebx ne devient pas logiquement un rbx)
    - l'appel au syscall change 'int 80h' → 'syscall'

    pas facile de se faire la main dans ses conditions.

    merci pour ton aide.
    Systèmes d'Informations Géographiques
    - Projets : Unlicense.science - Apache.SIS

    Pour un monde sans BigBrother IxQuick ni censure RSF et Les moutons

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] erreur reccurente sur tout les "unset"
    Par nebil dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/07/2010, 21h11
  2. Arret sur toutes les erreurs dans visual studio .net
    Par ramzio dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/05/2009, 12h50
  3. replace() qui s'applique sur toutes les occurences
    Par Oluha dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/03/2005, 11h27
  4. Réponses: 9
    Dernier message: 07/05/2003, 12h57

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