在 IDA Pro 的 RAM 和 ROM 的“内存布局对话框”中,我对 Freescale ARM imx233 μP 使用什么值?

逆向工程 艾达 拆卸 手臂 记忆
2021-07-02 03:36:12

我应该为这个 BIN 文件插入 IDA 的内存地址信息是什么?

目标

反汇编从firmware.sb 中提取的BIN 文件

此 BIN 文件包含低级板初始化、SDRAM 时钟、电源、中断控制器、LCD、duart 等。

我需要传递给 LCD、duart 和其他设备的值,以了解我的主板使用的确切硬件,并了解较早主板的固件是否适用于较晚的主板。

稍后我将使用这些值来创建 linux 驱动程序。(液晶)

参考这个问题

背景信息

板卡初始化顺序:

此 BIN 文件的一部分被加载到片上 RAM (OCRAM) 中,以进行最少的板初始化。执行此代码并将初始化对这个问题最重要的 SDRAM 板的其余部分。该 BIN 文件的更多内容将加载到 SDRAM 中,然后执行并初始化电路板的其余部分。然后这个 BIN 将加载并将控制权传递给操作系统。

基本上是一个引导加载程序。

这是一个使用我的自定义 u-boot 和内核的简单示例。为简洁起见,过度简化并删除了信息。实际的BIN 文件信息。

LOAD    addr=0x00001000 len=0x00001ef4
CALL    addr=0x00001000 arg=0x00000000
LOAD    addr=0x40002000 len=0x000368ec
LOAD    addr=0x40600000 len=0x002ed3c8
LOAD    addr=0x40a00000 len=0x00002b1e
CALL    addr=0x40002000 arg=0x00000000

这是该 μP内存映射的一部分

OCRAM 0x00000000 - 0x00007FFF 32KB
SDRAM 0x40000000 - 0x5FFFFFFF 512MB
Peripherals 0x80000000 - 0xBFFFFFFF

外设示例

CLKCTRL 0x80040000 - 0x80041FFF
DBGUART 0x80070000 - 0x80071FFF

μP 是飞思卡尔 mx23 或 imx233。

这块板子有 16MB SDRAM 0x40000000 - 0x01000000

在“ARM 架构选项”对话框中,我设置了:

基本架构为ARMv5TEJ

VFP 指令为NONE

Thumb 指令作为Thumb


在“反汇编内存组织”对话框中,我不确定要设置什么。

RAM 部分是我的 SDRAM,0x40000000 - 0x01000000?

ROM 部分是我的 OCRAM,0x00000000 - 0x00007FFF?

Input 文件加载地址、文件偏移量、加载大小呢?

加载大小是我的 SDRAM 的 16MB 吗?

外设地址去哪里了?

1个回答

我将简要介绍一下:

RAM 部分是我的 SDRAM,0x40000000 - 0x01000000?

是的,这是正确的。但 AFAIK 不太重要。IDA 将根据此输入为不同的代码部分创建不同的段,但会处理输入的任何值。

ROM 部分是我的 OCRAM,0x00000000 - 0x00007FFF?

是的,这又是正确的,但再次AFAIK,这不是太重要。

Input 文件加载地址、文件偏移量、加载大小呢?

对于执行的低级代码,尤其是引导加载程序,加载地址应在芯片的数据表中指定。

加载大小是我的 SDRAM 的 16MB 吗?

是的。IDA 将为您添加 RAM 地址空间作为附加段。

外设地址去哪里了?

IDA 不明确支持外设,您需要在 RAM 定义中包含这些外设,或者在加载文件后手动创建不同的段。您需要通过为不同的外围设备添加不同的段或通过创建和命名变量/结构来手动指定在每个地址公开的外围设备。