Bonjour,
j'ai essayé de réaliser un rot13 en asm, c'est à dire une rotation de 13 lettres dans l'alphabet. (a + 13, b+13, m = m, n -13, o - 13 ...).
Dans une première partie je l'ai codé (et cela fonctionne), de manière peut optimiser et pour comprendre comment cela fonctionne.
je met le pointeur de ma chaine qui est dans .data dans esi, mais je suis obligé de créer une chaine de meme longueur dans .data et la mettre dans edi. Voici le code pour comprendre :
Ce programme affichera : ebgngvba
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 %macro write 2 mov al, 4 mov bl, 1 mov ecx, %1 mov dl, %2 int 0x80 %endmacro section .text global _start: _start: mov esi, chaine mov edi, chainerot rot13: mov al, [esi] cmp al, 0x0 je .finish cmp al, 0x4D ;M jng .upper cmp al, 0x5A ;Z jng .lower cmp al, 0x6D ;m jng .upper cmp al, 0x7A ;z jng .lower .lower: sub al, 0xD jmp .clean .upper: add al, 0xD .clean mov [edi], al inc esi inc edi jmp rot13 .finish: write chainerot,9 mov al, 1 int 0x80 section .data chaine db "rotation",0 chainerot db " ",0
J'aimerais savoir comment peut-on faire pour réaliser ce programme sans passer par un chainerot db " ",0 dans .data :S et inc esi, inc edi. J'ai entendu qu'on pouvait utiliser lodsb et stosb pour placer la valeur contenu dans le registre eax dans edi et qui automatise l'incrémentation ? Comment adapter ce programme en utilisant cette opération et sans passer par une déclaration dans .data ?
En gros ce que j'aimerais faire : donner une chaine dans .data et pouvoir afficher son rot13.
Merci beaucoup !
Partager