1

Есть ли надежный и простой способ установить, использует ли exe или dll конкретный расширенный набор команд (например, SSE4.1)?

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

1 ответ1

3

Это возможно сделать, только запустив программу и наблюдая, какие фактические инструкции отправляются в ЦП. Это можно сделать, например, на виртуальной машине VMware, которая позволяет выполнять отладку на уровне команд ЦП с хоста. Для этой цели есть даже плагин Visual Studio. Обычный старый отладчик будет работать, если у вас хватит терпения пошагово пройти код на уровне инструкций; однако отладчик не позволит вам разбить определенный код операции или диапазон кода операции.

Программы могут выдавать собственные инструкции, которые должны выполняться во время выполнения, которые не включены в разделы кода исполняемого файла. Если бы не такое поведение, интерпретируемые языки, такие как Java, .NET и JavaScript, были бы ужасно медленными. Позволяя писать код во время выполнения, высокоуровневые языки сценариев могут быть скомпилированы в собственный код и динамически сохранены в ОЗУ, в то же время настраивая код для наиболее быстрого выполнения в реальных случаях использования приложения (например, если определенная ветвь никогда не используется , удалите эту ветку из собственного кода). Это называется JIT-компиляцией.

Даже некоторые нативные программы делают что-то похожее на JIT-компиляцию, в том смысле, что необработанный код в двоичном файле на диске может быть совместим вплоть до 486, но программа будет динамически определять, на каком процессоре она работает, и генерировать код для запустить на этом процессоре или использовать некоторый код из раздела "data" двоичного файла в качестве исполняемого кода.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .