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
È stato utile?

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"

?
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top