对存储在EAX中的地址进行异或

时间:2009-10-09 01:07:35

标签: assembly x86 masm 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 个答案:

答案 0 :(得分:8)

你说你在做......

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解密这个词”:你的意思是“字”,“字节”,还是“双字”?