XORing à l'adresse stockée dans EAX
Question
Comment pouvez-vous XOR de la valeur stockée dans EAX?
Le problème, c'est à cette ligne:
xor eax, key
EAX contient l'adresse de la valeur que je veux XOR.Comment puis-je accomplir?J'ai pensé que ce serait quelque chose le long des lignes de:
xor [eax], key
mais cela ne fonctionne pas (erreur de syntaxe)
decrypt proc startAddress:DWORD , sizeOfSegment:DWORD , key:DWORD
xor ecx, ecx ; clear the ecx register for the counter
mov eax, startAddress ; copy the start address to eax
.while ecx < sizeOfSegment ; loop through the code
xor eax, key ; XOR decrypt the word
inc eax
inc ecx
.endw
ret
decrypt endp
La solution
Vous avez dit que vous êtes en train de faire ...
xor eax, key ; XOR decrypt the word
...mais je suppose que c'est une faute de frappe et que vous êtes en train d'essayer de faire ...
xor [eax], key ; XOR decrypt the word
La raison pourquoi cela ne fonctionnera pas, c'est que key
n'est-ce pas un registre:c'est probablement, je ne sais pas, un synonyme de quelque chose comme [ebp+4]
.
x86 (et pas seulement de MASM, mais msna trop:le jeu d'instructions x86) permet de registre à registre et le registre de la mémoire et de la mémoire-pour-inscrivez-vous opérandes, mais pas de mémoire à mémoire.
Donc, vous devez charger la clé dans un peu de registre, par exemple:
mov eax, startAddress
mov ebx, key ; move key into a register, which can be XORed with [eax]
.while ecx < sizeOfSegment
xor [eax], ebx
Dans une affaire distincte, avez-vous vraiment envie de le faire inc eax
ou devrait-il être add eax,4
?Je veux dire, vous dites "XOR décrypter la parole":voulez-vous dire "mot", ou "byte", ou "double-parole"?