繁体   English   中英

无法为 linux kernel 图像执行 objdump

[英]can't do objdump for linux kernel image

对于 arm 的 N1 SDP(N1 芯片的系统设计平台),在我按照Getting Started构建软件后,我有一个 output 文件linux/out/n1sdp/arch/arm64/boot/Image 我看到当我将文件作为 kernel 传递给 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:文件格式无法识别

什么是正确的反汇编命令?

添加:我尝试使用 web 站点的服务( https://onlinedisassembler.com/odaweb/ )进行反汇编,并正确反汇编它。 我可以看到标记 MZ 和分支指令。 所以我认为应该可以用 aarch-none-eabi-objdump 反汇编它:
在此处输入图像描述

请参阅评论中的帮助。
反汇编图像文件的正确方法是:

aarch64-none-elf-objdump -b 二进制 -D 图像 -m aarch64

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM