我在一台小端 Linux 机器上,希望查看大端 Linux 机器上 cpio 存档的规范十六进制转储。
有人可以在大端 Linux 上运行这些命令并发布输出吗:
echo TESTING > /tmp/test
cpio -o <<< "/tmp/test" > /tmp/test.cpio
hexdump -C /tmp/test.cpio
如果您好奇,我需要这个,因为 libmagic 执行以下操作来确定 cpio 存档类型:
# same byteorder machine
0 short 070707
26 string >\0 cpio archive
# opposite byteorder machine
0 short 0143561 byte-swapped cpio archive
我想看看 libmagic 是否有原因不检查相反字节序机器的存档的第 26 个字节。
在我的小端机器上该命令的输出:
1 block
00000000 c7 71 1b 00 57 01 a4 81 e8 03 e8 03 01 00 00 00 |.q..W...........|
00000010 ff 65 ce a4 0a 00 00 00 08 00 2f 74 6d 70 2f 74 |.e......../tmp/t|
00000020 65 73 74 00 54 45 53 54 49 4e 47 0a c7 71 00 00 |est.TESTING..q..|
00000030 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 |................|
00000040 0b 00 00 00 00 00 54 52 41 49 4c 45 52 21 21 21 |......TRAILER!!!|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000200
答案1
我找到了一个示例 big-endian cpio 存档(它已在 libmagic 文件中注释):
# https://sembiance.com/fileFormatSamples/archive/cpio/skeleton2.cpio
路径条目从与小端存档相同的位置(第 26 个字节)开始。所以回答我自己的问题:
不,没有理由不是检查字节交换 cpio 存档的第 26 个字节。