Xoring no endereço armazenado no EAX
Pergunta
Como você pode xorar o valor armazenado no EAX?
O problema está nesta linha:
xor eax, key
EAX contém o endereço do valor que eu quero XOR. Como posso fazer isso? Eu pensei que seria algo parecido com:
xor [eax], key
Mas isso não funciona (erro de sintaxe)
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
Solução
Você disse que está fazendo ...
xor eax, key ; XOR decrypt the word
... mas acho que é um erro de digitação e você está realmente tentando fazer ...
xor [eax], key ; XOR decrypt the word
A razão pela qual isso não funcionará é que key
não é um registro: provavelmente não sei, um sinônimo de algo como [ebp+4]
.
X86 (não apenas MASM, mas também o NASM: o conjunto de instruções X86) permite operações registradas para registrar e registrar-se a memória e de memória para registrar, mas não a memória para memória.
Então, você precisa carregar a chave em algum registro de reposição, por exemplo:
mov eax, startAddress
mov ebx, key ; move key into a register, which can be XORed with [eax]
.while ecx < sizeOfSegment
xor [eax], ebx
Em um assunto separado, você realmente quer fazer inc eax
ou deveria ser add eax,4
? Quero dizer, você diz "Xor descriptografar a palavra": você quer dizer "palavra", ou "byte" ou "palavra dupla"?