1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2016
    Messages : 34
    Points : 19
    Points
    19

    Par défaut STRDUP en asm 64 bits intel compile avec NASM

    Bonjour, je suis en train de recoder strdup pour mes cours en ASM

    J'ai un problème étrange, j'ai beau avoir défini malloc en extern je n'arrive pas a comprendre pourquoi des que j'appelle cette fonction je segfault...

    Voici mon code
    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
    18
    19
    20
    21
    22
    23
    section .text
    	global _ft_strdup
    	extern _ft_strlen
    	extern _malloc
    	extern _ft_memcpy
     
    _ft_strdup:
    	call _ft_strlen             ;rax = len de str
    	mov r8, rdi                ;r8 = str = source
    	inc rax                      ;rax++
    	mov r9, rax		;longueur de la dest '\0'compris
    	mov rdi, rax		;pour envoyer la longueur a malloc
    ;	call _malloc		;rax = ptr de dest
    ;	cmp rax, 0			;malloc failled
    ;	jle _error_malloc
    ;	mov rdi, rax		;retour de malloc param 1 a ft_memcpy
    ;	mov rsi, r8		;deplace str dans le param 2 de ft_memcpy
    ;	mov rdx, r9		;len a copier param 3 de ft_memcpy
    ;	call _ft_memcpy	;appel de ft_memcpy
    	ret
    _error_malloc:
    	xor rax, rax ;retourne NULL
    	ret
    Si je décommande la ligne `call _malloc` je segfault ... Je ne comprends vraiment pas pourquoi ...

    Avez-vous une idée svp

    Pour infos, toutes les fonctions qui commence par `ft_` sont les mêmes que celle de la libc

    ps: Ce code n'a pas été teste, il est peut-être faux plus loin, merci de ne pas trop me spoil mes erreurs je débute en asm

    edit:
    j'ajoute le retour de gdb, ca peut peut etre vous aider
    Program received signal SIGSEGV, Segmentation fault.
    0x00007fff849612da in stack_not_16_byte_aligned_error () from /usr/lib/system/libdyld.dylib

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    7 508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 7 508
    Points : 16 153
    Points
    16 153

    Par défaut

    gdb t'explique le prob.

    Tu fais appel à une adresse non alignée sur 16 bits.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. Compilation avec les outils d'Intel
    Par Kaluza dans le forum Langage
    Réponses: 5
    Dernier message: 28/05/2011, 22h11
  2. Compilation avec mingw en 64 bits
    Par uriotcea dans le forum Qt
    Réponses: 7
    Dernier message: 02/06/2010, 21h55
  3. Réponses: 3
    Dernier message: 13/02/2006, 10h17
  4. [16 bits] Compilation avec TASM
    Par SaladinDev dans le forum Assembleur
    Réponses: 9
    Dernier message: 24/10/2005, 18h35
  5. Compilation avec un Makefile
    Par Mau dans le forum GTK+
    Réponses: 3
    Dernier message: 28/02/2003, 12h30

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