视频更新(代码分析8之单步调试ARM64启动汇编与重定位)

怀抱观古今,寝食展戏谑。这篇文章主要讲述视频更新:代码分析8之单步调试ARM64启动汇编与重定位相关的知识,希望能为你提供帮助。
今天更新的视频节目,讲另外一个有趣的话题,如何用gdb来调试ARM64的启动汇编代码,可能大家都想尝试去单步调试启动汇编代码,但是又苦苦不知道怎么搞。在上一期节目中,我们和大家详细分析了ARM64启动汇编代码,还有在启动汇编代码里面做了哪些内存映射。有不少小伙伴看了那一期视频,都觉得不错,有不少小伙伴给笨叔提出了批评,觉得笨叔讲的太啰嗦,代码讲的过细,听的有点晕晕的。没有办法,众口难调。世间上难得有一个fae可以苦口婆心地和你讲Linux 5.0和ARM64,对吧。这样的fae去哪里找呢?



录制视频是一种兴趣爱好
笨叔录制视频是一种兴趣爱好。我们的奔跑吧的视频,和别家视频不一样,我们只收了很少的钱,但是呢,我们录制了很多视频,我们现在第一季已经录制好的视频就超过40小时。后面还会免费给大家来录制基于Linux 5.0内核的内存管理代码分析视频。对的,您没有听错,后面录的Linux 5.0源代码分析视频是不再收费的。这是全球第一家也是唯一一家Linux 5.0源代码手把手分析的视频。可能有的读者会问了,笨叔,你们录这么多视频,收费这么低,这是为啥。其实很简单,我们不靠卖视频生活,我们都有正当的工作,可能很多小伙伴都知道了,笨叔在上海一家小公司当小fae,另外笨叔业余时间也在研究巴菲特,所以,我们不靠卖视频赚钱。我们录视频纯粹是为了兴趣爱好。有的小伙伴说了,竟然录视频不是为了赚钱,那为什么不免费?我们知道,一旦免费,就很少有朋友真的认真去看视频了,而且不但很少人看,还有一些喷子来喷,所以,有喷子来喷的话,我们也要设置门槛,欢迎来喷,但是你先付999。所以,我们设置一定门槛,给真正有需要的朋友来观看。如果你觉得笨叔录的视频对你工作有帮助,你也不在乎那点小钱,对吧。我们也真诚呼吁一下,正在看这个视频的小伙伴,可以帮忙推荐一下。


代码分析8  - 单步调试ARM64启动汇编和重定位
按照惯例,我们先上这一期节目中面试常见的必考题。
1. 什么是加载地址?什么是运行地址?什么是链接地址?
2. 什么是位置无关的汇编指令,什么是位置有关的汇编指令?
3. 什么是重定位?
4. 在实际项目开发中,为什么要刻意设置加载地址,运行地址以及链接地址不一样呢?
5. 在U-boot启动时重定位是如何实现的?
6. 在内核启动时内核映像重定位是如何实现的?





在这期视频节目之前,我们先做一小实验,我们在上一期节目中讲过的几个汇编函数里设置断点,看看gdb会停留在哪个断点里。







启动GDB来调试之后,我们发现断点只停留在断点8上,即__primary_switched函数,该函数是在__enable_mmu函数之后,也就是说GDB只能调试启动MMU之后的代码,这是为什么呢?
另外,从System.map文件中可以查询到stext和__primary_switched函数的地址都是在内核态的虚拟地址空间里。
好了,我们这一期节目,就和大家来好好聊聊这个话题。


要弄明白上面的疑问,我们首先要知道下面几个重要概念。

  • 加载地址:指代码存储的物理地址。比如ARM64处理器上电复位启动是从0x0地址开始取第一条指令的(假设异常向量表存放在0x0地址处),所以通常这个地方存放异常向量表的处理函数。
  • 运行地址:是指程序运行时的地址。
  • 链接地址:指在编译链接时指定的地址,编程人员设想将来程序要运行的地址。程序中所有标号的地址在链接后便确定了,不管程序在哪运行都不会改变。使用aarch64-linux-gnu-objdump工具进行反汇编查看的就是链接地址。


    上面三个地址,什么时候会一样,什么时候又会不一样呢?





笨叔在这一期视频中,会告诉你重定位的秘密,还有教你怎么单步调试Linux 5.0内核的ARM64的启动汇编代码。

有兴趣的小伙伴可以订阅奔跑吧旗舰篇视频节目,点击“阅读原文”订阅哟!
蓝色奔跑吧第二版已经交稿
笨叔历时1年新修订的蓝色奔跑吧已经交稿,第二版会新增很多新内容,而且大部分内容是重新重构的,第二版完全基于Linux5.0 + ARM64/x86_64来编写的。书稿在3月初已经交稿,请大家耐心等待。想看Linux 5.0的代码讲解,可以订阅旗舰篇视频课程,笨叔会在视频里详细和大家分析5.0代码的实现。
  1. 第二版详细目录请登录“奔跑吧linux社区”微信公众号,输入“奔跑吧第二版”索取。
  2. 全新的一套奔跑卷题目,有兴趣同学可以登录“奔跑吧linux社区”微信公众号,输入“奔跑卷”索取。


本书预计2020年盛夏出版,到时候笨叔约大家吃西瓜,看奔跑吧!

【视频更新(代码分析8之单步调试ARM64启动汇编与重定位)】

    推荐阅读