1

你怎么能 XOR 存储在 EAX 中的值?

问题出在这一行:

xor eax, key

EAX 包含我想要异或的值的地址。我怎样才能做到这一点?我认为这将是类似的东西:

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
4

1 回答 1

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 解密单词”:您的意思是“单词”、“字节”还是“双字”?

于 2009-10-09T01:25:14.700 回答