Hello World!
Après avoir passé un temps considérable à pratiquer du C, je me suis maintenant plongé dans l'assembleur !
J'ai lu pas mal de tutos concernant les bases (sys de numeration, cpu, registes...), après cela quand le moment de la pratique est arrivé j'ai remarquer que tous les tutos que je suivais étaient sur Linux (même ceux en anglais) !
Par exemple ce code :
L'équivalent en C :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 section .data section .text global _start _start: mov eax, 1 mov ebx, 1 int 80h
Normalement, quand je lance le programme et qu'après j'affiche la valeur de return avec echo %errorlevel% ça donne 0.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int main() { return 0; }
Mais avec l'assembleur ça donne une autre valeur à chaque fois (presque) et pas 0.
Pourtant j'ai bien assemblé :
J'ai même essayé avec avec une structure de code 64 bits :nasm -f win32 main.asm -o main.o
ld -m i386 -o main.exe main.o
Et aucun résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 section .text global _start _start: mov rax, 60 ; syscall number for exit mov rdi, 0 ; exit status syscall
Mais j'ai installé Ubuntu grâce au WSL (Windows Subsystem for Linux), quand j'affiche la valeur de retour avec echo $? ça ne marche qu'avec la structure de code 64 bits et ça n'exécute pas le 32 bits avec l'erreur "-bash: ./main: cannot execute binary file: Exec format error"
Du coup je cherche de l'aide pour Windows ou bien avec la WSL, pour m'aider à comprendre pourquoi ça n'exécute pas des exécutables 32 bits alors que mon processeur est 64 bits, merci.
Partager