我正在尝试为ARM Cortex M3编写仿真器。我如何读取二进制文件然后解码它?

问题描述:

我试着写模拟器的ARM Cortex M3。我如何读取二进制文件然后解码它?我想使用二进制文件作为我的模拟器的资源。我使用Atmel Studio创建了一个项目,并对其进行了编译。现在,我有一个.hex文件。我也可以用hex2bin将这个文件转换成二进制文件。之后,如何使用该二进制文件获取和解码指令?我正在使用C/C++开发Visual Studio。我正在尝试为ARM Cortex M3编写仿真器。我如何读取二进制文件然后解码它?

+0

我怕你必须启动你的C /从一些C++的旅途多容易得多。经过2 - 3年的积极编程,你可以开始这个项目。 BTW绝对毫无意义的任务。 –

+0

考虑到它的M3,我认为你需要找到中断向量表的位置,因为它应该具有所有根函数的地址,例如启动代码或中断处理程序。我不确定表格的位置是否标准化,因此您需要阅读设备/编译器手册以了解详细信息。 – user694733

+0

已经已经完成这件事我自己,不止一次,它实际上是在许多方面一个很好的任务。但是,如果你不知道如何使用fopen(),fread(),fclose(),那么你没有准备好任何编程项目,更不用说这个。有一个可能的文件格式plethera,所有记录,包括只是一个原始的内存映像,挑选一两个或三个,做你的研究,制作或找到一个十六进制编辑器/转储程序(例如hexdump)并查看该文件。读取arm文档虽然不错,但是执行指令解码比读取二进制文件要困难。 –

首先,需要提到的是为处理器编写仿真器不是一件容易的事,其他已经花费很多时间在上面,例如你可以看看QEmu。其中一个项目是currenlty使用的Qemu模拟一个基于Cortex-M3主板,该ZephyrProject

一个中间步骤,可以使用一个工具,它已经明白/解码十六进制或者二进制文件,并Radare是那些一种工具之一。有了它,你会abvle拆卸许多ELF文件,并从它(你会再有效仿;)获得的说明)。如果你仍然真的想要/需要进行仿真,并开始阅读和理解十六进制或二进制文件,首先要做的就是研究Intel Hex文件格式(是的,甚至ARM是使用这种英特尔格式;))。 你可以找到the official specification heretechnical support website of ARM

玩得开心;)