الفريق العربي للهندسة العكسية

نسخة كاملة : ما هو الغرض من XOR الرجيستر مع نفسه ؟ XOR EAX, EAX
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .

R333T

Salam


أقصد هكذا 
XOR EAX, EAX
إنه أكثر كفاءة.

 كود التشغيل أقصر من 
MOV EAX, 0
ب 2 bytes أي word

 ، ويتعرف المعالج على الحالة الخاصة ويعاملها على أنها 

MOV EAX, 0

سيحتوي MOV EAX, 0 على بايت فارغ (null) في assembled bytes ، بينما XOR EAX, EAX لا يحتوي على بايت فارغ.
أقصد هنا 

'0\'
أو
x00\

يعد هذا أمرًا بالغ الأهمية للعديد من عمليات الاستغلال نظرًا لأن المصطلح الشائع في كود C يقرأ حتى يكون لديك بايت فارغ.

عادةً ما يتم تخزين String variables كمصفوفات من الأحرف ، منتهية ببايت فارغ.


لا يمكننا دفع PUSH أو نقل MOV قيمة 0 لأن ذلك سيؤدي تلقائيًا إلى إنشاء بايت فارغ (x00\) والذي سيوقف shellcode. وبدلاً من ذلك ، سننشئ null في EAX عن طريق إجراء XOR مع نفسها ثم دفع تلك القيمة إلى stack.


ختام  nice

في architectures الحديثة ، سيكون XOR أسرع لأن السجل مصفر في rename stage دون استخدام أي وحدة تنفيذ.

R333T

أضيف أيضا تستعمل لإرجاع كود الخروج أقصد بذالك exit code فكما نعلم الكود 0 يعني أن البرنامج إشتغل بنجاح ولا توجد أي إستثناء خطأ أقصد بذالك error exception
فكأن ما كتبت في  c  
 return 0

 النظير instruction بال assembly هي
  XOR EAX, EAX
RET
للإضافة
حتى انها اكتر كفائة لأنه xor تحول ل 1 من micro ops بينا mov ف هي معقدة على حسب ال operands ولاكن حتى ادا ستعملت ال mov
سوف تتحول ل xor ف لما توصل ل مرحلةdecoder و ب تحديد عملية ده يسمونها micro-fusion و في نهاية ل
mov eax, 0
و xor eax,eax
سوف يتم تنفيد نفس Uop