最近我发现二进制文件中的一些部分对我来说很奇怪,我想问一下这是不是常见的编译器会做的事情,是否有办法撤消它。
(二进制文件来自原始闪存转储)
几个例子:
In Binary File:
4C 65 76 FF 65 6C 3D 30 28 4F 46 46 FF 29 2C 31 28 45 52 52 29 FF 2C 32 28 43 4D 44 29 2C FD 33 1C 41 50 52 4F 43 29
Levÿel=0(OFFÿ),1(ERR)ÿ,2(CMD),ý3.APROC)
What it actually should look like:
Level=0(OFF),1(ERR),2(CMD),3(....PROC)
Bin:
45 D2 60 67 65 6E 63 79 DA 50 FF 6F 70 20 54 65 73 74 20 33 4F 4E
EÒ`gencyÚPÿop Test 3ON
Actual:
Emergency Loop Test ON
Bin:
53 FF 65 72 76 69 63 65 20 55 FF 6E 61 76 61 69 6C 61 62 E3 6C 65
Sÿervice Uÿnavailabãle
Actual:
Service Unavailable
提前致谢。
编辑:
你怎么知道它应该是什么样子的?
因为当电路板运行时,它会在 GUI 中显示完全相同的字符串。
你能区分你的转储和磁盘上找到的二进制文件吗?
由于这个图像是从闪存中提取的,我会说它实际上是这样存储的。
你能用十六进制字节更新你的问题以帮助调查吗?
当然。
你知道使用的编译器吗?
不,我不知道用的是什么编译器。它必须是嵌入式系统的东西,因为它在 mcu 上运行。
你能提供一些环境信息吗?(操作系统、架构、编译器...)
运行某种 RENESAS 处理器的嵌入式系统板(确切型号未知)
更新:
每 8 个字节有某种指示符。在我的情况下,主要是 FF (ÿ) 表示接下来的 8 个字节没有被编码/压缩。如果字节类似于 FD (ý),在 Binary(MSB) 中为 10111111,则表示第二个字节已编码。
例子:
Levÿel=0(OFFÿ),1(ERR)ÿ,2(CMD),ý3.APROC)
678 12345678 12345678 12345678 12.345678
含义 (APROC) 实际上不是 (APROC) 而是更像 (....PROC)