Bonjour,

Je recode un strlen en asm qui est utilisé par la suite dans une librairie, j'utilise ensuite celle ci pour un code en c . Malheuresement, mon strlen segfault ...
Le problème est peut etre lié à la compilation, mais je poste quand meme le code asm au cas ou .
Voici chaque étape :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
nasm -o strlen.o strlen.S -f elf64                                // compilation 
gcc -shared -o libasm.so strlen.o                                // génération de la lib pour le c 
gcc -L/home/.../ect/.../dir/ -Wall -o test main.c -lasm          //  compilation de mon .c   ----> "me donne /usr/sbin/ld: attention: type et taille du symbole dynamique «strl» ne sont pas définis" (strl est le nom de ma funct asm) 
./test                                                           // j'execute le test de manière classique 
et lorsque j'execute segfault :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 Process terminating with default action of signal 11 (SIGSEGV): dumping core
 Bad permissions for mapped region at address 0x601030
code ASM:

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
[BITS 64]
 
	global strl
	section .text
 
strl:
	push rbp
	mov rbp, rsp
 
        mov rdi, 0
looop:	
	cmp BYTE [rdi + rcx], 0
	je fin
	inc rcx
	jmp looop
 
fin:	
	mov rax, rcx
	mov rsp, rbp
	pop rbp
 
	ret
code c :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
int main()
{
  printf("%d", strl("zzzzzz"));
  return (0);
}
Merci pour votre aide !

Bonne journée