我有一个小端 32 位 ARM 二进制文件,它是为运行嵌入式 Linux 的 CPU 编译的。我想弄清楚二进制中的特定字节是什么意思。我的二进制文件的前几个字节的示例十六进制视图是:
03 00 00 00 82 2C 00 00 50 01 00 00 C0 01 00 00
1A 00 00 00 2B 00 00 00 80 00 00 00 00 00 00 00
24 26 00 00 08 00 00 00 04 10 00 00 30 29 00 00
FC FF 07 00 00 00 00 00 F7 27 13 00 FF 03 00 00
01 00 00 00 74 2C 00 00 00 00 00 00 00 00 00 00
我有兴趣在第 4 行找到带有值的字节的用途。0x13特定数字似乎随着二进制文件大小的增加而增加,但我似乎无法找到文件大小与此数字之间的确切相关性。我已经尝试了通常的嫌疑人(块数,文件大小,例如 KB 等),但没有任何东西与我在该字节偏移量中观察到的数字完全匹配。
在 IDA 中反汇编二进制文件会为该部分呈现以下汇编代码:
ROM:00000000 AREA ROM, CODE, READWRITE, ALIGN=0
ROM:00000000 CODE32
ROM:00000000 DCD 3, 0x2C82, 0x150, 0x1C0, 0x1A, 0x2B, 0x80, 0
ROM:00000020 DCD off_2624
ROM:00000024 DCD 8, 0x1004, 0x2930, 0x7FFFC, 0
ROM:00000038 DCD 0x1327F7, 0x3FF, 1, 0x2C74, 0, 0
其中感兴趣的数量出现在最后一行中为DCD 0x1327F7。该数字不会出现在代码的其他任何地方,该地址也不会在其余代码的任何地方引用。相邻的字节(这里0x27F7在一个看似“随机”的方式)的变化(这是可能的可能,我只是还没有想出他们的目的又)。不管怎样,我只对这个0x13领域感兴趣。
ARM 二进制文件的第一个字节的内容是否有约定?关于该字节的用途或文件大小是否确实存在相关性的任何想法?
PS出于差异分析的目的,我添加了另一个文件的初始字节。这里我感兴趣的数字0x03在第 4 行。感兴趣的偏移量总是相同的。第一个文件是 11928 字节,而这个文件是 2850 字节。
0300 0000 9608 0000 5001 0000 0701 0000
0a00 0000 1300 0000 8000 0000 0000 0000
6404 0000 0800 0000 0410 0000 9006 0000
fcff 0700 0000 0000 087d 0300 ff03 0000
0100 0000 8808 0000 0000 0000 0000 0000