《编译系统-自底向上研究方法》用clion调试汇编器gas源码 - 弦外之音

/ 0评 / 0

Linux 环境的的汇编器是 gas,也叫做 as,实际上 汇编器 as 的调试环境搭建,跟之前的 链接器的调试环境搭建非常类似的,因为 asld 的代码都在 binutils 项目里面。阅读本文需要参考之前的 《编译系统-自底向上研究方法》用clion调试链接器ld源码

先讲一下 汇编器 as 这个命令怎么使用,main.s 的代码如下:

    .file   "main.c"
    .text
    .globl  array
    .data
    .align 8
    .type   array, @object
    .size   array, 12
array:
    .long   7
    .long   5
    .long   1
    .text
    .globl  main
    .type   main, @function
main:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    subq    $16, %rsp
    movl    $3, %esi
    leaq    array(%rip), %rdi
    call    sum@PLT
    movl    %eax, -4(%rbp)
    movl    $8, %eax
    movl    -4(%rbp), %eax
    movl    %ebx, %eax
    movl    %eax, -4(%rbp)
    leave
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size   main, .-main
    .ident  "GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0"
    .section    .note.GNU-stack,"",@progbits

可以用以下命令 将 ASII 码转成 二进制指令。

as -o main-new.o main.s


下面开始搭建 clion 的 as 调试环境,还是要下载 binutils 的源码自己编译出来 as 命令,这样才有符号表 源码调试。一些操作步奏请看 《编译系统-自底向上研究方法》用clion调试链接器ld源码

下面开始操作。

第一步:直接添加一个 Make Application,如下图:

注意上面我圈出来的内容,要按照自己的环境调整。因为我知道他生成的 as 命令路径是 gas/as-new

第二步:点击右上角的运行按钮,可以正确生成 main-new.o 文件就没问题了。

第三步:在 as.c 文件的 main 函数入口打个断点,开始断点调试。

至此, 汇编器 gas 的调试环境已经搭建成功了。

汇编器的内容,本书就讲解完毕了,汇编器的内部逻辑,如何扫描文本字符串,如何解析,读者断点调试一下就知道了。断点调试是一个非常重要的技能,市面上的编译书籍,很多概念思路会看得云里雾里,但是如果你把一个调试环境搭建起来,一步一步调试,就很容易看懂那些经典书籍在讲什么。


由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1,QQ:2338195090。

发表回复

您的电子邮箱地址不会被公开。