من در اظهار نظر در یکی از پرونده های هدر هسته لینوکس ، کمی گیج شده ام /x86/include/asm/nops.huesit1186109]. این بیان می کند که
<...> دستورالعمل های زیر در حالت 64 بیتی نیست ، برای حالت 64 بیتی به جای nop K8 یا P6 استفاده کنید
Movl٪ esi ،٪ esi
leal 0x00 (٪ esi) ،٪ esi
<...>
من حدس می زنم كه نویسنده به جای دستورالعمل های مونتاژ ، دستورالعمل های دستگاه (به ترتیب '89 F6' و '8D 76 00') را در آنجا ضمنی قرار داده باشد. از شرح LEA
در دفترچه راهنمای Intel Software Developer Vol 2A چنین بر می آید که دستورالعمل دوم ( lea 0x00 (٪ rsi) ،٪ esi
) همان کار قبلی را انجام می دهد ، mov٪ esi،٪ esi
.
بنابراین این س reducesال کاهش می یابد که آیا mov٪ esi،٪ esi
در واقع ممنوعیت x86-64 است.
mov
پرچم ها را تغییر نمی دهد. این نوع mov
حافظه را نیز تغییر نمی دهد. به نظر می رسد ، اگر چیزی علاوه بر ٪ rip
تغییر دهد ، باید ثبت های عمومی باشد. اما من هیچ سرنخی ندارم که چگونه می تواند محتوای ٪ rsi
یا هر چیز دیگری را تغییر دهد. اگر نیمه پایینی یک ثبت نام عمومی را دستکاری کنید ، نیمه بالایی نباید تغییر کند؟