如何对存储在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
答案 0 :(得分: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解密这个词”:你的意思是“字”,“字节”,还是“双字”?