0%

从ARM理解当前计算机的局限性

2020年5月6日 上午11:53

首先说说ARM编程的一个思路改变:

  • 我们常见的上下级封装的接口调用系统,在这种系统下,我们上层调用是不关心下层是如何实现的,你调用完成功能就完了
  • 而ARM编程,由于接触到计算机的底层知识,无法有效的保持这种完美的抽象封装。所以,就导致了我们需要从cpu、内存的角度去反推上层的汇编、c如何编写,如何烧入代码,烧到哪里
    • 如何烧代码 + 代码逻辑功能 + 硬件内存地址=》三者耦合在一起

详细说说ARM的逆向思路

  1. 首先,我们应该尽可能的使用相对地址,因为这样可以让代码逻辑功能与硬件内存解耦,做到无论代码你烧到内存的那个位置都可以正确的执行。
  2. 但是,有些情况必须使用绝对地址才可完成的情况
    1. 相对地址不确定:比如说我就要使用内存中指定位置的数据,这个限制往往是ARM板硬件上的规定,也可以理解成限制。
    2. 相对地址太长
  3. 既然我们必须使用绝对地址,那么我们需要小心什么、做到什么才可以让程序正确的执行,也就是对反向限制方面:
    1. 链接地址要指定为内存中的地址(绝对地址)
    2. 烧的时候,要按链接地址烧入(绝对地址=链接地址)
    3. 已近烧入的代码,在执行拷贝代码动作的时候,也需要使用绝对地址(内存中的地址)
  4. 如果不满足这样天然的反向限制,程序就会出错。