2

我的目标是对一些指令集架构进行比较研究。
对于每种指令集架构,我如何才能找到最常用的指令?

这是我正在考虑的步骤:

  • 查找所选域的常见 ISA
  • 查找每个此类 ISA 的流行程序
  • 反汇编程序指令(.code)(哪个工具?)
  • 收集指令格式、操作码、类型的统计信息。(哪个工具?)

这是关于 x86 机器码统计的很好的研究: https ://www.strchr.com/x86_machine_code_statistics

我尝试过以下命令进行反汇编,但似乎无法正确反汇编。反汇编代码显示了一些das指令,这些指令不应该出现在实际代码中。

ndisasm -b32 -a $(which which)
4

1 回答 1

3

你可以试试这个,从 .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

从程序的文本部分打印出每个助记符的频率

于 2020-02-20T18:43:30.067 回答