2009-10-09 22 views
1

Comment pouvez-vous XOR la ​​valeur stockée dans EAX?XORaison à l'adresse stockée dans EAX

Le problème est à cette ligne:

xor eax, key 

EAX contient l'adresse de la valeur que je veux XOR. Comment puis-je accomplir cela? Je pensais que ce serait quelque chose le long des lignes de:

xor [eax], key 

mais cela ne fonctionne pas (erreur de syntaxe)

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

Je ne t'aiderai pas beaucoup (et n'hésite pas à me gifler), mais ça marchera dans le nasment. Nasm est génial. –

Répondre

8

Vous avez dit que vous faites ...

xor eax, key ; XOR decrypt the word 

... mais je suppose que c'est une faute de frappe et que vous essayez de le faire ...

xor [eax], key ; XOR decrypt the word 

La raison pour laquelle cela ne fonctionne pas, c'est que key n'est pas un registre: c'est probablement, je ne sais pas, un synonyme de quelque chose comme [ebp+4]. (Non seulement MASM, mais nasm aussi: le jeu d'instructions x86) permet les opérandes de registre à registre et de registre à mémoire et de mémoire à registre, mais pas de mémoire à mémoire.

Donc, vous devez charger clé dans un certain registre de rechange, .: par exemple

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

Sur une question distincte, voulez-vous vraiment faire inc eax ou faut-il add eax,4? Je veux dire, vous dites "XOR décrypter le mot": voulez-vous dire "mot", ou "octet", ou "double mot"?

+0

Oh, vous avez raison. D'oh. –