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 :
et lorsque j'execute segfault :
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
code ASM:
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 c :
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
Merci pour votre aide !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int main() { printf("%d", strl("zzzzzz")); return (0); }
Bonne journée![]()
Partager