蘭雅sRGB 个人笔记 https://262235.xyz
提供编程和电脑应用视频教程,工具和源代码
C, C++, Python Programming, Source Code, Video

旧Hexo博客 | Github | IP定位WebAPI | Docker Hub
编程中文文档 | 网盘分享 | 中文Linux命令

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

arm.webp

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

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

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

    Reg#APCS意义
    R0a1工作寄存器
    R1a2...
    R2a3...
    R3a4...
    R4v1必须保护
    R5v2...
    R6v3...
    R7v4...
    R8v5...
    R9v6...
    R10sl栈限制
    R11fp桢指针
    R12ip内部程序调用寄存器
    R13sp栈指针
    R14lr连接寄存器
    R15pc程序计数器

编译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! 命令退出,我们也可以把命令绑定快捷键

    # 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

本原创文章自由转载,转载请注明本博来源及网址 | 当前页面:兰雅sRGB个人笔记 » 为学习ARM汇编写了个逼格很高的脚本