Bash – 如何计算指令数量?

我有一些* .s汇编文件。 我想要统计它们包含的指令数量。 例如,要计算所有的MUL指令,我需要:

cat *.s | grep -P 't'"mul" | wc -l

这给了我所有的指令复合数。

我想有这样的输出

mul: 893 add: 12054 sub: 2356 ...

问题是没有目标平台支持的指令表。 每个目标平台都有不同的指令集。 支持的指令必须从现有的程序集文件中推导出来。 我可以在没有Perl / Python代工的情况下在Bash中完成吗?

如何使用预处理器在Linux上识别64位版本?

在32位机器上创build一个64位Debian软件包

在Windows 7中安装py-bcrypt时编译器错误

由CreateFile()函数创build的文本文件不显示

在Windows操作系统的Code :: Blocks编辑器中对fork()的未定义引用

无法在Windows上运行buildr

如何从一个Visual C#项目构build两个不同的应用程序?

Windows API的CreateFile()中的OPEN_ALWAYS和CREATE_ALWAYS之间的区别

Glibc需要多长时间来编译?

C编译器如何发现-lm指向文件libm.a?

你可以像这样得到所有的东西:

grep -hP '^[ t]+[az]*' *.s | sed 's/^[ t]+([az]*).*/1/' | sort | uniq -c

编辑:我改变了这个与SiegeX提供的例子。

输出

1 call 6 mov 1 push 1 ret 2 syscall 2 xor

假设你的指令是通过使用空格(tab是OK)从其他代码缩进的,那么这个awk 1-liner将起作用:

awk '/^[[:space:]]+/{a[$1]++}END{for(op in a){print op,a[op]}}' /path/to/*.s

输入

$ cat asm.s section .text global _start,write write: mov al,1 ;write syscall syscall ret _start: mov rax,0x0a68732f6e69622f push rax xor rax,rax mov rsi,rsp mov rdi,1 mov rdx,8 call write exit: ; just exit not a function xor rax,rax mov rax,60 syscall

产量

$ awk '/^[[:space:]]+/{a[$1]++}END{for(op in a){print op,a[op]}}' ./*.s push 1 xor 2 ret 1 mov 6 syscall 2 call 1

Bash 4没有任何外部工具:

declare -A c;while IFS=$'n' read -rt;do [[ ! $t =~ ^[[:space:]] ]] && continue;w=($t);((c[${w[0]}]++));done<asm.s;for op in ${!c[@]};do echo $op ${c[$op]};done

为了完成多个文件,将while循环包装for f in *.s循环中的while循环中: done < "$f"或者done这样的done : done < <(cat *.s)而不是for f 。

计算每行的第一个单词而不考虑缩进:

declare -A c;while read -ra t;do [[ $t ]]&&((c[${t[0]}]++));done<asm.s;for op in ${!c[@]};do echo $op ${c[$op]};done

不过,这比其他答案还要长。

只是为了它,SiegeX的Perl awk答案

perl -n '/^s+(w+)/&&$a{$1}++;END{print map{"$_ $a{$_}n"}keys%a}' ./*.s

因为“我能做的任何事情都能以更接近线条噪音的方式去做”( – :

grep -Eo' w +'/source.file | uniq -c

相关文章

本篇内容主要讲解“gitee如何上传代码”,感兴趣的朋友不妨来...
这篇“从gitee上下的代码如何用”文章的知识点大部分人都不太...
这篇文章主要介绍“gitee如何下载仓库里的项目”,在日常操作...
本篇内容主要讲解“怎么在Gitee上更新代码”,感兴趣的朋友不...
本文小编为大家详细介绍“怎么将工程托管到gitee”,内容详细...
这篇文章主要介绍了gitee中图片大小如何调整的相关知识,内容...