为学习ARM汇编写了个逼格很高的脚本

arm.webp

APCS ARM 寄存器命名 详细见: ARM汇编指令(中文版).chm

  • APCS,ARM 过程调用标准(ARM Procedure Call Standard),提供了紧凑的编写例程的一种机制,定义的例程可以与其他例程交织在一起。最显著的一点是对这些例程来自哪里没有明确的限制。它们可以编译自 C、 Pascal、也可以是用汇编语言写成的。
  • APCS 对我们通常称为 R0 到 R14 的寄存器起了不同的名字。使用汇编器预处理器的功能,你可以定义 R0 等名字,但在你修改其他人写的代码的时候,最好还是学习使用 APCS 名字。
  • 为了理解文章,你要了解表格中寄存器意义; 想了解更多请下载文档

寄存器名字 ARM汇编指令(中文版).chm

Reg# APCS 意义
R0 a1 工作寄存器
R1 a2
R2 a3
R3 a4
R4 v1 必须保护
R5 v2
R6 v3
R7 v4
R8 v5
R9 v6
R10 sl 栈限制
R11 fp 桢指针
R12 ip 内部程序调用寄存器
R13 sp 栈指针
R14 lr 连接寄存器
R15 pc 程序计数器

编译C语言代码,反汇编成ARM代码步骤

  • 1.编译C语言源码 a.c
int main()
{
    int i = 5;
    int b = 4;
    int ret = i * b;
    return ret ;
}
  • 2.使用gcc编译器编译 ‘a.c’,同时也可以使用 -S 参数先C源码,抓换成汇编源码 a.s,再使用gcc编译汇编源码也行
gcc a.c
gcc -S a.c
gcc a.s
  • 3.程序编译后文件名是 a.out,使用 objdump 可以把程序反汇编
objdump -d a.out > a.txt
./a.out    # 运行程序
echo $?    # 使用echo显示运行结果
  • 4.VIM 打开多个文件,学习C语言和汇编代码对应语句翻译
vim -O a.txt  a.s  -c /<main>  -c "sp a.c"
# 这行vim命令拆成三行来理解
vim -O a.txt  a.s  # 打开2个文件左右排列
# 在文件 a.txt 执行搜索 '<main>' 函数命令
# 在当前文件分窗口打开 a.c 文件
# 你也可以改成以下语句会有不同的效果
vim -O a.txt  a.s  -c "tabedit a.c"
vim -p a.txt  a.s  a.c

111.png

  • 5.使用VIM打开多文件,使用 :qa! 命令退出,我们也可以把命令绑定快捷键 <F10>
# vim  ~/.vimrc 文件添加快捷键绑定
" Vim不保存退出 按F10
map <F10> :call Exit()<CR>
func! Exit()
    exec "qa!"
endfunc

使用脚本完成以上步骤演示

vc_sh.gif

编译C语言,显示汇编代码脚本: vc.sh

name=$1
if [[ -z "${name}" ]]; then
  read -p ":: 1.请输入C语言文件名称,不要扩展名: "  name
fi

if [[ ! -z "${name}" ]]; then
  echo "当前C语言文件名: ${name}.c"

  echo ":: 2.自动编译和汇编反汇编..."
  gcc ${name}.c
  gcc -S ${name}.c
  objdump -d a.out > ${name}.txt

  echo ":: 3.运行程序,显示返回值"
  ./a.out
  echo $?

  echo ":: 4.VIM 显示源码和汇编码"
  vim -O $name.txt  $name.s  -c /<main>  -c "sp ${name}.c"

  # :sp  name.s    # 插入汇编文件
  # :qa!           # F10 退出
fi

感谢大佬提供工具网站: https://gcc.godbolt.org/

gcc.webp

相关推荐: 控制 WordPress 插件和主题通知

长期以来,插件通知一直是 WordPress 中的一个问题。上周我在 Slack 上看到一个对话,一个开发人员说他认为他们已经失控了,然后发布了这个截图: 如此多的通知您甚至看不到仪表板内容。 有一个管理 Notifications 的核心项目,但在一个有希望…

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论