Какова цель кода операции NOP? - PullRequest
79 голосов
/ 24 октября 2008

Я прохожу MSIL и замечаю, что есть много nop инструкций. В статье MSDN говорится, что они не предпринимают никаких действий и используются для заполнения пространства, если исправлен код операции. Они используются гораздо чаще в отладочных сборках, чем в сборках релизов. Я знаю, что такого рода операторы используются на языках ассемблера, чтобы убедиться, что код операции помещается на границе слова, но зачем это нужно в MSIL?

Ответы [ 19 ]

3 голосов
/ 24 октября 2008

Одним из классических способов их использования является то, что ваш отладчик всегда может связать строку исходного кода с инструкцией IL.

2 голосов
/ 25 октября 2008

Я также видел NOP в коде, который модифицирует себя, чтобы запутать то, что он делает в качестве заполнителя (очень старая защита от копирования).

2 голосов
/ 02 февраля 2009

Несколько неортодоксальное использование NOP-Slides , используемое в эксплойтах переполнения буфера.

2 голосов
/ 24 октября 2008

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

1 голос
/ 25 октября 2008

Я использовал NOP для автоматической регулировки задержки, накопленной после входа в ISR. Очень удобно прибивать время до смерти.

1 голос
/ 24 октября 2008

Они позволяют компоновщику заменить более длинную инструкцию (обычно прыжок в длину) на более короткую (короткую скачку). NOP занимает дополнительное место - код не может быть перемещен, так как он остановит другие переходы. Это происходит во время компоновки, поэтому компилятор не может знать, подходит ли длинный или короткий переход.

По крайней мере, это одно из их традиционных применений.

1 голос
/ 24 октября 2008

Это не ответ на ваш конкретный вопрос, но в старые времена вы могли использовать NOP, чтобы заполнить интервал задержки ветвления , если вам не удавалось заполнить его другим способом. полезная инструкция.

1 голос
/ 25 октября 2008

Первой сборкой, которую я выучил, была SPARC, поэтому я знаком со слотом задержки перехода, если вы не можете заполнить его другой инструкцией, обычно инструкцией, которую вы собирались поместить над инструкцией ветвления, или увеличить счетчик в циклах , вы используете NOP.

Я не знаком с взломом, но я думаю, что обычно перезаписывают стек с помощью NOP, поэтому вам не нужно точно вычислять, где начинается ваша вредоносная функция.

1 голос
/ 24 октября 2008

Согласовывают ли компиляторы .NET выходные данные MSIL? Я полагаю, что это может быть полезно для ускорения доступа к IL ... Кроме того, я понимаю, что он разработан для переносимости, и на некоторых других аппаратных платформах требуется согласованный доступ.

...