-
Sujet
-
Bonjour, voici un programme que j’ai fait un assembleur (vous pouvez le tester ici https://tio.run/#assembly-nasm)
BITS 64 ;il y a pas de trucs pour colorer l'assembleur alors je le mets comme ca \_(*_*)_/ section .text global _start _start: jmp plustard debut: push 0x6f6c6c65 plustard: mov rdx, $-debut mov rdi, 1 mov rax, 1 mov rsi, debut syscall fin: mov rax, 60 mov rdi, 0 syscall
Si l’on lance le programme, on voit apparaitre « hello » alors qu’il n’y a pas cette string dans le .data ! On n’a d’ailleurs rien mis dans la section data.
Comment ai je fait ?
J’ai utilisé ce petit code en python :
" ".join([hex(ord(i))[2:] for i in "hello"])
pour obtenir la string « hello » en bytes. J’ai ensuite utilisé https://defuse.ca/online-x86-assembler.htm#disassembly2 et je lui ai demandé de désassembler la chaine de bytes obtenue ( « 68 65 6c 6c 6f »). Le site a alors renvoyé ce résultat :
Disassembly:0: 68 65 6c 6c 6f push 0x6f6c6c65
j’ai ensuite mis cette instruction dans mon code. Ensuite, j’affiche ce qu’il y a à cet endroit et le tour est joué.
Si vous voulez tester, vous n’avez qu’à récupérer mon code python, changer la chaine de caractère et placer le code obtenu dans ce template :
BITS 64 section .text global _start _start: jmp plustard debut: ;;;;;;;;;;;; ;PLACE YOUR INSTRUCTIONS HERE ;PLACE LES INSTRUCTIONS ICI ;;;;;;;;;;;; plustard: mov rdx, $-debut mov rdi, 1 mov rax, 1 mov rsi, debut syscall fin: mov rax, 60 mov rdi, 0 syscall
Mais je vous invite tout de même à essayer de comprendre par vous même (ca n’est pas très compliqué en plus).
/!\ attention si vous modifiez le code : Le mov rdx, $-debut doit à tout prix se trouver à l’endroit ou je l’ai placé pour qu’il puisse bien calculer la distance entre l’endroit ou il est placé et l’instruction/chaine de caractère = la longueur de la chaine de caractère.
Voilà !
- Vous devez être connecté pour répondre à ce sujet.