Какие инструкции процессора используются чаще всего?
Моя цель - провести сравнительное исследование нескольких архитектур наборов команд.
Как найти наиболее часто используемые инструкции для каждой архитектуры набора инструкций?
Вот шаги, о которых я думаю:
- Найдите общие 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
Распечатывает частоты каждого мнемоника из текстовой части программы.