AVR 哈佛架构中的内存映射

逆向工程 艾达 静态分析 闪光 只读存储器
2021-06-25 15:00:48

在此视频中https://youtu.be/D0VKuZuuvW8?t=259

您可以看到闪存地址介于 0x0 到 0x3fff 之间。数据存储器(Io 寄存器和 SRAM)在 0x0 到 0x8ff 之间。

所以在视频中他问这怎么能过得去?他回答说 AVR 使用了哈佛架构,以及不同地址中的数据和代码(不像 x86)

我不明白答案。

在 ida 中,我如何解析这个二进制文件?ram的地址是什么,rom的地址是什么?(我必须在加载 avr 的二进制文件时输入它)。

在 0x0 中有 32 个寄存器(数据)或闪存中的代码?

1个回答

所以在视频中他问这怎么能过得去?他回答说 AVR 使用了哈佛架构,以及不同地址中的数据和代码(不像 x86)

使用不同的方法来访问每个。

简单来说,只有指令和嵌入指令流中的任何操作数才能从程序存储器中读取。任何“存储器访问”代码会去到数据存储器。

当然,严格的边界并不真正适用于工作计算机。所以有一个特殊的指令来低效地从程序存储器中读取数据。也是一个高度受限的用于将数据写入程序存储器的程序,该程序只能从位于引导加载程序区域中的代码运行。

简而言之,它之所以有效,是因为访问内存对每种类型的内存使用完全不同的机制。

在 ida 中,我如何解析这个二进制文件?ram的地址是什么,rom的地址是什么?(我必须在加载 avr 的二进制文件时输入它)。

您加载的二进制或十六进制文件可能只会进入程序存储器。一些引导加载程序可能能够将某些内容转储到数据 RAM 中,但是您需要一些带外命令来告诉他们将数据放在那里,或者必须发明一些私有约定,将特定范围的地址放入HEX 文件是数据与程序存储器的简写。这可能没有完成,因为实际上没有必要将数据预加载到数据存储器中——相反,您与正在运行的程序交谈并与其交换数据。

调试器(用于虚拟或仿真硬件)当然可以典型地允许你改变存储器的内容而程序已暂停。