XOR presso l'indirizzo memorizzato in EAX
Domanda
Come si può XOR il valore memorizzato in EAX?
Il problema è in questa linea:
xor eax, key
EAX contiene l'indirizzo del valore voglio XOR. Come posso fare questo? Ho pensato che sarebbe stato qualcosa sulla falsariga di:
xor [eax], key
, ma che non funziona (errore di sintassi)
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
Soluzione
Hai detto che stai facendo ...
xor eax, key ; XOR decrypt the word
... ma credo che sia un errore di battitura e si sta effettivamente cercando di fare ...
xor [eax], key ; XOR decrypt the word
Il motivo per cui questo sistema non funziona è che key
non è un registro: è probabilmente, non lo so, un sinonimo di qualcosa come [ebp+4]
86 (non solo MASM, ma nasm troppo: il set di istruzioni x86). Permette registro a registro e registro a memoria e la memoria a registro operandi, ma non da memoria a memoria
Quindi, è necessario caricare chiave in qualche registro di riserva, per esempio:.
mov eax, startAddress
mov ebx, key ; move key into a register, which can be XORed with [eax]
.while ecx < sizeOfSegment
xor [eax], ebx
Su una questione separata, si vuole veramente fare inc eax
o dovrebbe essere add eax,4
? Voglio dire, si dice "XOR decifrare la parola": cosa significa "parola", o "byte", o "doppia parola"