XORing en la dirección almacenada en EAX
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
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"