XORing في عنوان المخزنة في 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
المحلول
قلت تفعله ...
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 فك تشفير كلمة":تعني "كلمة" أو "بايت" أو "انقر نقرا مزدوجا بكلمة" ؟