所以在视频中他问这怎么能过得去?他回答说 AVR 使用了哈佛架构,以及不同地址中的数据和代码(不像 x86)
使用不同的方法来访问每个。
简单来说,只有指令和嵌入指令流中的任何操作数才能从程序存储器中读取。任何“存储器访问”的代码会去到数据存储器。
当然,严格的边界并不真正适用于工作计算机。所以有一个特殊的指令来低效地从程序存储器中读取数据。也是一个高度受限的用于将数据写入程序存储器的程序,该程序只能从位于引导加载程序区域中的代码运行。
简而言之,它之所以有效,是因为访问内存对每种类型的内存使用完全不同的机制。
在 ida 中,我如何解析这个二进制文件?ram的地址是什么,rom的地址是什么?(我必须在加载 avr 的二进制文件时输入它)。
您加载的二进制或十六进制文件可能只会进入程序存储器。一些引导加载程序可能能够将某些内容转储到数据 RAM 中,但是您需要一些带外命令来告诉他们将数据放在那里,或者必须发明一些私有约定,将特定范围的地址放入HEX 文件是数据与程序存储器的简写。这可能没有完成,因为实际上没有必要将数据预加载到数据存储器中——相反,您与正在运行的程序交谈并与其交换数据。
甲调试器(用于虚拟或仿真硬件)当然可以典型地允许你改变存储器的内容而程序已暂停。