XORing по адресу, хранящемуся в EAX - PullRequest
1 голос
/ 09 октября 2009

Как вы можете XOR значение, хранящееся в EAX?

Проблема в этой строке:

xor eax, key

EAX содержит адрес значения, которое я хочу XOR. Как я могу сделать это? Я думал, что это будет что-то вроде:

xor [eax], key

но это не работает (синтаксическая ошибка)

 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

1 Ответ

8 голосов
/ 09 октября 2009

Вы сказали, что делаете ...

xor eax, key    ; XOR decrypt the word

... но я предполагаю, что это опечатка, и вы на самом деле пытаетесь это сделать ...

xor [eax], key    ; XOR decrypt the word

Причина, по которой это не сработает, заключается в том, что key не является регистром: это, вероятно, я не знаю, синоним чего-то вроде [ebp+4].

x86 (не только MASM, но и nasm: набор команд x86) позволяет операнды регистр-регистр и регистр-в-память и память-регистр, но не память-в-память.

Итак, вам нужно загрузить ключ в какой-нибудь запасной регистр, например ::

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

По другому вопросу, вы действительно хотите сделать inc eax или это должно быть add eax,4? Я имею в виду, вы говорите «XOR расшифровать слово»: вы имеете в виду «слово», или «байт», или «двойное слово»?

...