تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
ما هو الغرض من XOR الرجيستر مع نفسه ؟ XOR EAX, EAX
#1
Smile 
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 دون استخدام أي وحدة تنفيذ.
أعضاء أعجبوا بهذه المشاركة : the9am3 , johnvb , Newhak , ROZBUD , xdvb_dz , Venox , adhem
#2
أضيف أيضا تستعمل لإرجاع كود الخروج أقصد بذالك exit code فكما نعلم الكود 0 يعني أن البرنامج إشتغل بنجاح ولا توجد أي إستثناء خطأ أقصد بذالك error exception
فكأن ما كتبت في  c  
 return 0

 النظير instruction بال assembly هي
  XOR EAX, EAX
RET
أعضاء أعجبوا بهذه المشاركة : Newhak , ROZBUD , xdvb_dz , dragon874 , vosiyons , Venox
#3
للإضافة
حتى انها اكتر كفائة لأنه xor تحول ل 1 من micro ops بينا mov ف هي معقدة على حسب ال operands ولاكن حتى ادا ستعملت ال mov
سوف تتحول ل xor ف لما توصل ل مرحلةdecoder و ب تحديد عملية ده يسمونها micro-fusion و في نهاية ل
mov eax, 0
و xor eax,eax
سوف يتم تنفيد نفس Uop
أعضاء أعجبوا بهذه المشاركة : Newhak , ROZBUD , xdvb_dz , Venox


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 2 ) ضيف كريم