سؤال

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top