无法为 linux 内核映像执行 objdump
can't do objdump for linux kernel image
对于 arm 的 N1 SDP(N1 芯片的系统设计平台),在我按照 Getting Started
的指示构建软件后,我有一个输出文件 linux/out/n1sdp/arch/arm64/boot/Image
。
我看到当我将文件作为内核传递给 qemu-system-aarch64 时,linux 启动开始并且 运行 某个阶段。所以它显然是 arm64 代码。在十六进制数据中看到的文件是这样开始的,..
00000000: 4d5a 0091 ff3f 4914 0000 0800 0000 0000 MZ...?I.........
00000010: 0040 9b01 0000 0000 0a00 0000 0000 0000 .@..............
00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000030: 0000 0000 0000 0000 4152 4d64 4000 0000 ........ARMd@...
00000040: 5045 0000 64aa 0200 0000 0000 0000 0000 PE..d...........
00000050: 0000 0000 a000 0602 0b02 0214 0060 3001 .............`0.
00000060: 00d0 6a00 0000 0000 7850 2501 0010 0000 ..j.....xP%.....
00000070: 0000 0000 0000 0000 0010 0000 0002 0000 ................
00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000090: 0040 9b01 0010 0000 0000 0000 0a00 0000 .@..............
000000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000c0: 0000 0000 0600 0000 0000 0000 0000 0000 ................
000000d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000f0: 0000 0000 0000 0000 2e74 6578 7400 0000 .........text...
00000100: 0060 3001 0010 0000 0060 3001 0010 0000 .`0......`0.....
00000110: 0000 0000 0000 0000 0000 0000 2000 0060 ............ ..`
00000120: 2e64 6174 6100 0000 00d0 6a00 0070 3001 .data.....j..p0.
00000130: 00da 6100 0070 3001 0000 0000 0000 0000 ..a..p0.........
00000140: 0000 0000 4000 00c0 1f20 03d5 1f20 03d5 ....@.... ... ..
00000150: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000160: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000170: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000180: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000190: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
000001a0: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
000001b0: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
000001c0: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
000001d0: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
000001e0: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
000001f0: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000200: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000210: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000220: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000230: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000240: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
从第一个模式可以看出是linux的start.S代码(前两个字节是无意义的跳转指令,使魔术模式“MZ”,我学习了这个之前)。这就是问题所在。我想我以前做过这个,但是当我试图反汇编它时,我得到如下错误。
ckim@chan-ubuntu:~/N1SDP/arm-reference-platforms$
aarch64-none-elf-objdump -d linux/out/n1sdp/arch/arm64/boot/Image
aarch64-none-elf-objdump: linux/out/n1sdp/arch/arm64/boot/Image: file
format not recognized
正确的反汇编命令是什么?
ADD:我尝试使用网站的服务 (https://onlinedisassembler.com/odaweb/) 进行反汇编,它正确地反汇编了它。我可以看到标记 MZ 和分支指令。所以我认为应该可以用 aarch-none-eabi-objdump 反汇编它。:
查看评论中的帮助。
反汇编图像文件的正确方法是:
aarch64-none-elf-objdump -b binary -D Image -m aarch64
对于 arm 的 N1 SDP(N1 芯片的系统设计平台),在我按照 Getting Started
的指示构建软件后,我有一个输出文件 linux/out/n1sdp/arch/arm64/boot/Image
。
我看到当我将文件作为内核传递给 qemu-system-aarch64 时,linux 启动开始并且 运行 某个阶段。所以它显然是 arm64 代码。在十六进制数据中看到的文件是这样开始的,..
00000000: 4d5a 0091 ff3f 4914 0000 0800 0000 0000 MZ...?I.........
00000010: 0040 9b01 0000 0000 0a00 0000 0000 0000 .@..............
00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000030: 0000 0000 0000 0000 4152 4d64 4000 0000 ........ARMd@...
00000040: 5045 0000 64aa 0200 0000 0000 0000 0000 PE..d...........
00000050: 0000 0000 a000 0602 0b02 0214 0060 3001 .............`0.
00000060: 00d0 6a00 0000 0000 7850 2501 0010 0000 ..j.....xP%.....
00000070: 0000 0000 0000 0000 0010 0000 0002 0000 ................
00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000090: 0040 9b01 0010 0000 0000 0000 0a00 0000 .@..............
000000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000c0: 0000 0000 0600 0000 0000 0000 0000 0000 ................
000000d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000f0: 0000 0000 0000 0000 2e74 6578 7400 0000 .........text...
00000100: 0060 3001 0010 0000 0060 3001 0010 0000 .`0......`0.....
00000110: 0000 0000 0000 0000 0000 0000 2000 0060 ............ ..`
00000120: 2e64 6174 6100 0000 00d0 6a00 0070 3001 .data.....j..p0.
00000130: 00da 6100 0070 3001 0000 0000 0000 0000 ..a..p0.........
00000140: 0000 0000 4000 00c0 1f20 03d5 1f20 03d5 ....@.... ... ..
00000150: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000160: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000170: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000180: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000190: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
000001a0: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
000001b0: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
000001c0: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
000001d0: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
000001e0: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
000001f0: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000200: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000210: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000220: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000230: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
00000240: 1f20 03d5 1f20 03d5 1f20 03d5 1f20 03d5 . ... ... ... ..
从第一个模式可以看出是linux的start.S代码(前两个字节是无意义的跳转指令,使魔术模式“MZ”,我学习了这个之前)。这就是问题所在。我想我以前做过这个,但是当我试图反汇编它时,我得到如下错误。
ckim@chan-ubuntu:~/N1SDP/arm-reference-platforms$ aarch64-none-elf-objdump -d linux/out/n1sdp/arch/arm64/boot/Image aarch64-none-elf-objdump: linux/out/n1sdp/arch/arm64/boot/Image: file format not recognized
正确的反汇编命令是什么?
ADD:我尝试使用网站的服务 (https://onlinedisassembler.com/odaweb/) 进行反汇编,它正确地反汇编了它。我可以看到标记 MZ 和分支指令。所以我认为应该可以用 aarch-none-eabi-objdump 反汇编它。:
查看评论中的帮助。
反汇编图像文件的正确方法是:
aarch64-none-elf-objdump -b binary -D Image -m aarch64