-
Sujet
-
Bonjour,
tout d’abord voilà un programme en x64 sur windows
extern GetStdHandle extern WriteFile extern ExitProcess %define STD_OUTPUT_HANDLE (-11) section .data hello_str db "Hello World", 13, 10 hello_size equ ($ - hello_str) section .bss output_handle resq 1 section .text global _start _start: ;Aligne la pile and rsp, 0xFFFF_FFFF_FFFF_FFF0 mov rbp, rsp ;Récupère l'output standart mov ecx, STD_OUTPUT_HANDLE call GetStdHandle mov [output_handle], rax ;Affiche le message sub rsp, 48 mov rcx, [output_handle] mov rdx, hello_str mov r8d, hello_size mov r9, 0 mov QWORD [rsp + 32], 0 call WriteFile ;Détruit l'espace de pile alloué pour les paramètres de la fonction add rsp, 48 ;Quitte xor rcx, rcx call ExitProcess
l’assembleur sur windows c’est pas forcément ce qu’il y a de plus élégant je trouve mais c’est plutôt simple.
Pour la compilation :
nasm -fwin64 helloWindows.asmgolink /entry _start /console helloWindows.obj C:\Windows\System32\kernel32.dll(_start est pris par défaut comme étant le point d’entrée mais des fois j’ai juste envie de mettre main et du coup j’aime bien laisser l’option pour pouvoir me souvenir comment faire au besoin)Pour télécharger golink : http://www.godevtool.com/ (et faites Ctrl+F, tapez golink et vous le trouverez facilement 😉 )Pour savoir comment utiliser les fonctions, utilisez la documentation de microsoft sur les fonctions et essayez de les utiliser en C avant de le refaire en assembleur.Pour appeler les fonctions, les paramètres doivent être (dans l’odre) : rcx, rdx, r8, r9 et le reste doit etre mis sur la stack. Certaines fonctions nécessitent qu’on leur laissent 32 octets sur la pile pour fonctionner (c’est le cas pour WriteFile dans cet exemple).Voilà voilà.. je vous laisse chercher sur internet pour la suite. Vous avez toutes les clés pour avancer. 🙂
- Vous devez être connecté pour répondre à ce sujet.