哪些处理器指令最常用?
Which processor instructions are used most commonly?
我的objective是比较研究几个指令集架构
对于每个指令集架构,如何找到最常用的指令?
这是我想到的步骤:
- 查找所选域的通用 ISA
- 为每个这样的 ISA 查找流行的程序
- 反汇编程序指令(.code)(哪个工具?)
- 收集有关指令格式、操作码、类型的统计信息。 (哪个工具?)
这里有一篇关于 x86 机器码统计的非常好的研究:
https://www.strchr.com/x86_machine_code_statistics
我试过下面的反汇编命令,但似乎不能正确反汇编。反汇编代码显示了一些 das
指令,这些指令不应出现在实际代码中。
ndisasm -b32 -a $(which which)
你可以试试这个,从 .text 部分收集助记符:
objdump --no-show-raw-insn \
-M intel \
-sDj .text $(which *program name*) | # <-- disassemble .text section
sed -n '/<\.text>/, $ p' | # <-- skip raw hex
awk '{ = ""; print}' | # <-- remove offsets
sed '1d' # <-- delete annoying <.text> in first line
之后你可以只得到助记词名称,追加awk '{print }'
之前的命令,或以某种方式改变数据。
完成所有这些后,将 sort | uniq -c
添加到前面的步骤。
所以我得到的命令看起来像:
objdump --no-show-raw-insn \
-M intel \
-sDj .text $(which *program name*) |
sed -n '/<\.text>/, $ p' |
awk '{ = ""; print}' |
sed '1d' |
awk '{print }' | sort | uniq -c
从程序的文本部分打印出每个助记符的频率
我的objective是比较研究几个指令集架构
对于每个指令集架构,如何找到最常用的指令?
这是我想到的步骤:
- 查找所选域的通用 ISA
- 为每个这样的 ISA 查找流行的程序
- 反汇编程序指令(.code)(哪个工具?)
- 收集有关指令格式、操作码、类型的统计信息。 (哪个工具?)
这里有一篇关于 x86 机器码统计的非常好的研究: https://www.strchr.com/x86_machine_code_statistics
我试过下面的反汇编命令,但似乎不能正确反汇编。反汇编代码显示了一些 das
指令,这些指令不应出现在实际代码中。
ndisasm -b32 -a $(which which)
你可以试试这个,从 .text 部分收集助记符:
objdump --no-show-raw-insn \
-M intel \
-sDj .text $(which *program name*) | # <-- disassemble .text section
sed -n '/<\.text>/, $ p' | # <-- skip raw hex
awk '{ = ""; print}' | # <-- remove offsets
sed '1d' # <-- delete annoying <.text> in first line
之后你可以只得到助记词名称,追加awk '{print }'
之前的命令,或以某种方式改变数据。
完成所有这些后,将 sort | uniq -c
添加到前面的步骤。
所以我得到的命令看起来像:
objdump --no-show-raw-insn \
-M intel \
-sDj .text $(which *program name*) |
sed -n '/<\.text>/, $ p' |
awk '{ = ""; print}' |
sed '1d' |
awk '{print }' | sort | uniq -c
从程序的文本部分打印出每个助记符的频率