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
Si je décommande la ligne `call _malloc` je segfault ... Je ne comprends vraiment pas pourquoi ...
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
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
Partager