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... :aie:
Voici mon code
Code:
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 ... :calim2: 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 :mrgreen:
edit:
j'ajoute le retour de gdb, ca peut peut etre vous aider :)
Citation:
Program received signal SIGSEGV, Segmentation fault.
0x00007fff849612da in stack_not_16_byte_aligned_error () from /usr/lib/system/libdyld.dylib