Який розширений набір інструкцій використовує додаток?


1

Чи існує якийсь надійний і простий спосіб встановити, чи використовує exe або dll певний розширений набір інструкцій (наприклад, SSE4.1)?

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

Відповіді:


3

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

Програми можуть випромінювати власні інструкції, що виконуються під час виконання, які не входять у розділи коду виконуваного файлу. Якби не така поведінка, інтерпретовані мови, такі як Java, .NET та JavaScript, були б жахливо повільними. Дозволяючи писати код під час виконання, мови сценаріїв високого рівня можна компілювати в нативний код і зберігати в оперативній пам’яті динамічно, одночасно налаштовуючи код на швидкий запуск у фактичних випадках використання додатків (наприклад, якщо певна гілка ніколи не береться , видаліть цю гілку з нативного коду). Це називається компіляцією JIT.

Навіть деякі вітчизняні програми роблять щось подібне до компіляції JIT, тому що необроблений код у двійковому на диску може бути сумісним аж до 486, але програма динамічно визначатиме, на якому процесорі працює, і або генерує код для запустити на цьому процесорі або використовувати якийсь код, що знаходиться у розділі "дані" двійкового файлу як виконуваного коду.

Ось чому традиційний налагоджувач подібний gdbне дозволить вам перерватися на певний опкод або інструкцію по збірці. Напівавтоматичне рішення цієї проблеми, ймовірно, передбачає певний тип віртуальної машини, оскільки гіпервізор може точно визначити, за яким кодом працює гіперпровізований гість, і забезпечити це як вихід до програми або користувальницького інтерфейсу на хості.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.