Какие инструкции процессора используются чаще всего?

Моя цель - провести сравнительное исследование нескольких архитектур наборов команд.
Как найти наиболее часто используемые инструкции для каждой архитектуры набора инструкций?

Вот шаги, о которых я думаю:

  • Найдите общие ISA для выбранного домена
  • Найдите популярные программы для каждой такой ISA
  • Разобрать инструкцию программы (.code) (какой инструмент?)
  • Собирать статистику по формату команд, коду операции, типу. (какой инструмент?)

Вот очень хорошее исследование статистики машинного кода x86:https://www.strchr.com/x86_machine_code_statistics

Я пробовал выполнить приведенную ниже команду для разборки, но, похоже, она не разбирается должным образом. Дизассемблированный код показывает некоторыеdas инструкции, которые не должны присутствовать в реальном коде.

ndisasm -b32 -a $(which which)

1 ответ

Решение

Вы можете попробовать это, чтобы собрать мнемонику из раздела.text:

objdump --no-show-raw-insn \
        -M intel           \
        -sDj .text $(which *program name*) | # <-- disassemble .text section
             sed -n '/<\.text>/, $ p'      | # <-- skip raw hex
             awk '{$1 = ""; print}'        | # <-- remove offsets
             sed '1d'                        # <-- delete annoying <.text> in first line

После этого вы можете получить только имя мнемоники, добавив awk '{print $1}'к предыдущей команде или изменение данных каким-либо другим образом.

После всего этого добавьте sort | uniq -cк предыдущим шагам. Итак, моя результирующая команда выглядела так:

objdump --no-show-raw-insn \
        -M intel           \
        -sDj .text $(which *program name*) | 
             sed -n '/<\.text>/, $ p'      | 
             awk '{$1 = ""; print}'        |
             sed '1d'                      |
             awk '{print $1}' | sort | uniq -c

Распечатывает частоты каждого мнемоника из текстовой части программы.

Другие вопросы по тегам