我目前正在通过尝试反转损坏的打印机来学习 ARM 组装。我从板载 NAND 闪存中检索了固件,现在我正在尝试理解它。
但是,我一开始就卡住了:中断表。根据我在网上阅读的文档,中断表是一个包含将直接内存地址加载到 PC 的指令(最常见的是 LDR PC 指令)的表。中断表是这些指令的序列,所有指令都直接相邻(这可能不是技术上最正确的解释,但这就是我的理解,如果我错了,请纠正我)。在下表中,这些说明将是:e5 9f f0 18我认为这是一条ldr pc, [pc, #24]说明。
在我检索的固件中,每两个向量之后,就有一个值为 的字节89。我不知道它为什么在那里以及它做什么。我在网上找不到任何显示类似内容的内容(或者我正在寻找错误的内容)。这个字节的功能是什么?
根据我的理解,地址 0x8e0 将被加载到 PC 中,CPU 将从那里运行,但是,这意味着忽略四个89字节。如果应该考虑字节,那么 CPU 将跳转到9f f0 18 89,但这不在二进制文件中。
我相信 CPU 是 big endian,可能是 Armv7,但它是未知的 Marvel 芯片,所以我不能 100% 确定。
这是中断表的十六进制转储:
00000000 e5 9f f0 18 e5 9f f0 18 89 e5 9f f0 18 e5 9f f0 |................|
00000010 18 89 e5 9f f0 18 e5 9f f0 18 89 e5 9f f0 18 e5 |................|
00000020 9f f0 18 89 00 00 08 e0 00 00 00 04 ac 00 00 00 |................|
00000030 08 00 00 00 0c db 00 00 00 10 00 00 00 14 db 00 |................|
为什么有四个89字节,我是否假设 CPU 会跳转到0x8e0正确的位置?