-
Sujet
-
Bonjour,
on va voir la fonction ReadFile pour récupérer l’input de l’utilisateur en assembleur x64 sur windows.
Voilà le code :
extern GetStdHandle extern WriteFile extern ExitProcess extern ReadFile %define STD_OUTPUT_HANDLE (-11) %define STD_INPUT_HANDLE (-10) section .data ask_str db "type something : " ask_size equ ($ - ask_str) chars dd 0 section .bss output_handle resq 1 input_handle resq 1 message resb 32 read resb 32 section .text global main main: ;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 ;récupère l'input standart mov ecx, STD_INPUT_HANDLE call GetStdHandle mov [input_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 sub rsp, 48 mov rcx, [input_handle] ;On met le handle pour le stdin mov rdx, message ;On met la variable qui recevra ce que l'utilisateur a écrit mov r8d, 32 ;Le nombre de caractères qui sera recu mov r9, chars ;Ici, la fonction mettra dans la var le nombre de caractère lu mov QWORD[rsp +32], 0 call ReadFile add rsp, 48 ;Ecrit le message sub rsp, 48 mov rcx, [output_handle] mov rdx, message mov r8d, 32 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
on récupère l’input standart et l’output standart. On écrit le message « type something », on récupère 32 charactères de l’utilisateur qu’on va ensuite afficher avant d’enfin quitter.
Voici la documentation pour la fonction ReadFile : https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-readfile
pour WriteFile : https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-writefile
pour GetStdHandle : https://docs.microsoft.com/en-us/windows/console/getstdhandle
Voilà 🙂
- Vous devez être connecté pour répondre à ce sujet.