1

EAX に保存されている値をどのように XOR できますか?

問題は次の行にあります。

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
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 に答える