AMD64 - инструкция по сборке nopw?

В этом выводе компилятора я пытаюсь понять, как машина- Кодирование кода инструкции nopw работает:

00000000004004d0 
: 4004d0: eb fe jmp 4004d0
4004d2: 66 66 66 66 66 2e 0f nopw %cs:0x0(%rax,%rax,1) 4004d9: 1f 84 00 00 00 00 00

На http://john.freml.in/amd64-nopl есть обсуждение по поводу "nopw". Кто-нибудь может объяснить значение 4004d2-4004e0? Из списка опкодов кажется, что 66 .. коды - это многобайтовые расширения. Я чувствую, что, вероятно, смогу получить здесь лучший ответ, чем если бы я не пытался в течение нескольких часов просматривать список кодов операций.


Этот вывод asm взят из следующего (безумного) кода на языке C, который оптимизируется до простой бесконечный цикл:

long i = 0;

main() {
    recurse();
}

recurse() {
    i++;
    recurse();
}

При компиляции с gcc -O2 компилятор распознает бесконечную рекурсию и превращает ее в бесконечный цикл; он делает это настолько хорошо, что фактически выполняет цикл в main () без вызова функции recurse () . Примечание редактора


: функции заполнения с помощью NOP не являются t специфичен для бесконечных циклов. Вот набор функций с диапазоном длин NOP, в проводнике компилятора Godbolt.

20
задан Peter Cordes 23 July 2016 в 02:24
поделиться