我正在尝试为 DIY 项目拆卸固件,打开硬件但关闭固件。我的问题是如何正确初始化反汇编器(Hopper Disassembler)。
我试图找出的值是这里显示的值:
据我所知,处理器是STM32F100C8,ARM Cortex-M3,64Kbytes Flash,8Kbytes RAM。BOOT0 引脚被拉低,所以我知道它是从主闪存启动的:
从主闪存引导:主闪存在引导存储空间 (0x0000 0000) 中有别名,但仍可从其原始存储空间 (0x800 0000) 访问。换句话说,可以从地址 0x0000 0000 或 0x800 0000 开始访问闪存内容。
启动顺序如下:
CPU 从地址 0x0000 0000 获取栈顶值,然后从 0x0000 0004 开始从引导存储器开始执行代码
我使用arm-none-eabi-objcopy并发现将 .hex 文件转换为 .bin 文件:
0x0000 0000 | 10050020 (Stack pointer)
0x0000 0004 | 05A90008 (ResetHandler)
我不明白的是内存地址。
堆栈指针太大而无法成为相对偏移量(仅 8K RAM),而太小而无法指向 SRAM(从 0x2000 0000 开始)。
重置处理程序也太大而不能成为相对偏移量(只有 64k 闪存),也太小而不能指向主闪存(从 0x800 0000 开始)。
如何找出正确的基地址和入口点?
PS:DIY项目的原理图和固件可以在这里找到
