2009-10-09 3 views
1

EAX에 저장된 값을 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

많은 도움이되지는 않겠지 만 (나에게 푹 빠져 있어도 안심할 수는 있겠지만),하지만 그건 멍청한 행동입니다. 근심은 최고입니다. –

답변

8

당신은 당신이하고있는 것을 작동하지 않습니다

xor eax, key ; XOR decrypt the word 

...하지만 나는 오타라고 생각하고 실제로하려고하는 것입니다 ...

xor [eax], key ; XOR decrypt the word 

그것이 작동하지 않는 이유는 key이 레지스터가 아니라는 것입니다. [ebp+4]과 같은 동의어 일 것입니다.

x86 (MASM뿐 아니라 nasm : x86 명령어 세트)은 레지스터 대 레지스터와 레지스터 대 메모리 및 메모리 대 레지스터 피연산자를 허용하지만 메모리 대 메모리는 허용하지 않습니다.

그래서, 당신은 당신이 정말로 inc eax을 수행 할 작업하거나 add eax,4을해야한다, 별도의 문제에 대한 몇 가지 여분의 레지스터, 예컨대 :

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

에 키를로드 할 필요가? 내 말은, "XOR은 단어의 암호를 해독합니다"라고 말하면 : "단어"또는 "바이트"또는 "이중 단어"를 의미합니까?

+0

아, 네 말이 맞아. 오. –

관련 문제