Pregunta

¿Cómo se puede XOR el valor almacenado en EAX?

El problema está en esta línea:

xor eax, key

EAX contiene la dirección del valor que quiero XOR. ¿Cómo puedo lograr esto? Yo sin embargo sería algo a lo largo de las líneas de:

xor [eax], key

pero eso no funciona (error de sintaxis)

 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
¿Fue útil?

Solución

Usted ha dicho que estás haciendo ...

xor eax, key    ; XOR decrypt the word

... pero supongo que es un error y en realidad se está tratando de hacer ...

xor [eax], key    ; XOR decrypt the word

La razón por la que no va a funcionar es que no se key un registro: es probable que sea, no sé, un sinónimo de algo así como [ebp+4]

.

86 (no sólo MASM, pero nasm también: el conjunto de instrucciones x86). Permite registrar a registro y de registro a la memoria y la memoria a registro operandos, pero no de memoria a la memoria

Por lo tanto, es necesario cargar la clave en algún registro de repuesto, por ejemplo:.

  mov eax, startAddress
  mov ebx, key ; move key into a register, which can be XORed with [eax]
  .while ecx < sizeOfSegment
  xor [eax], ebx

En otro orden de cosas, es lo que realmente quiere hacer inc eax o debe ser add eax,4? Es decir, se dice "XOR descifrar la palabra": Qué quiere decir "palabra" o "byte", o "doble palabra"

?
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top