Pergunta

Como você pode xorar o valor armazenado no EAX?

O problema está nesta linha:

xor eax, key

EAX contém o endereço do valor que eu quero XOR. Como posso fazer isso? Eu pensei que seria algo parecido com:

xor [eax], key

Mas isso não funciona (erro de sintaxe)

 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
Foi útil?

Solução

Você disse que está fazendo ...

xor eax, key    ; XOR decrypt the word

... mas acho que é um erro de digitação e você está realmente tentando fazer ...

xor [eax], key    ; XOR decrypt the word

A razão pela qual isso não funcionará é que key não é um registro: provavelmente não sei, um sinônimo de algo como [ebp+4].

X86 (não apenas MASM, mas também o NASM: o conjunto de instruções X86) permite operações registradas para registrar e registrar-se a memória e de memória para registrar, mas não a memória para memória.

Então, você precisa carregar a chave em algum registro de reposição, por exemplo:

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

Em um assunto separado, você realmente quer fazer inc eax ou deveria ser add eax,4 ? Quero dizer, você diz "Xor descriptografar a palavra": você quer dizer "palavra", ou "byte" ou "palavra dupla"?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top