我正在尝试反转在运行时为内核实现加密的自定义 u-boot(静止内核也在闪存中加密)。我大概可以要求IoT供应商提供u-boot的修改代码,但我想从这个经验中学到一些东西。
我收集的一些信息:
- SOC 数据表(带内存布局)
- Ram 从 0x8000_0000 (2 GB) 开始
- BOOTROM 在 0x0400_0000 (64K)
- 0x0401_0000 处的 BOOTRAM (64K)
- 从 0x0000_0000 到 0x03FF_FFFF (64 Mb) 的可重映射区域
- 字符串的U型BOOT.BIN文件返回:
bootcmd=kload 0x82000000; bootm 0x82000000
- CPU 是 Arm Cortex A7(SOC 也有 A17,但不是“默认”的)
IDA 向我询问了反汇编内存组织;我尝试了几件事但没有成功。我认为这是我搞砸了一些东西的部分,后来当我尝试重建中断向量表以稍后开始定义函数时,我可以找到正确的地址。
在这种情况下,根据我掌握的信息,我应该选择哪个地址?
例如,如果我选择0x8000_0000
用作加载地址并将一些变量重新定义为双字(任何中断向量表条目都是双字),这就是我得到的:
我得到一些无法使用的东西(我无法跳转到这些地址);我需要了解如何在早期阶段设置 IDA。
任何帮助,尤其是一些理论,表示赞赏:)