gpt4 book ai didi

linux - 如何反汇编原始 MIPS 代码?

转载 作者:IT王子 更新时间:2023-10-29 01:17:48 28 4
gpt4 key购买 nike

类似于How do I disassemble raw x86 code? ,但是对于 MIPS 架构:如何使用 objdump 反汇编原始 MIPS 代码?我想查看 vmlinux 镜像中的说明,但现在我必须这样做:

: > x.c
mipsel-linux-gnu-gcc -c -o x.o x.c
mipsel-linux-gnu-objcopy --add-section raw=vmlinux x.o
mipsel-linux-gnu-objcopy --remove-section .comment x.o
mipsel-linux-gnu-objdump -D x.o | less

有没有更简单的方法呢?我尝试了以下无济于事:

mipsel-linux-gnu-objdump -b elf32-tradlittlemips -mmips -Mgpr-names=O32,cp0-names=mips1,cp0-names=mips1,hwr-names=mips1,reg-names=mips1 -D vmlinux | less

它只是吐出:

mipsel-linux-gnu-objdump: vmlinux: File format not recognized

如果有帮助,这里是一些命令的输出:

$ file x.o
x.o: ELF 32-bit LSB relocatable, MIPS, MIPS-I version 1 (SYSV), with unknown capability 0xf41 = 0x756e6700, with unknown capability 0x70100 = 0x1040000, not stripped
$ mipsel-linux-gnu-objdump -p x.o

x.o: file format elf32-tradlittlemips
private flags = 1006: [abi=O32] [mips1] [not 32bitmode] [PIC] [CPIC]

目标是 AR7 CPU。

最佳答案

嗯,这似乎比那更容易。 -b elf32-tradlittlemips 不起作用,因为该文件不是 ELF 可执行文件,而是二进制文件。因此,要使用的正确选项是 -b binary。另一个选项 -mmips 使 objdump 将该文件识别为 MIPS 的二进制文件。由于目标机器是小端,我还必须添加 -EL 以使输出与 x.o 的输出相匹配。

-mmips 只包含基本指令集。 AR7 有一个 MIPS32 处理器,has more instructions不仅仅是mips。要解码这些较新的 MIPS32 指令,请使用 -mmips:isa32。可以使用 objdump -i -m 列出可用的 ISA 列表。

最终命令变为:

mipsel-linux-gnu-objdump -b binary -mmips:isa32 -EL -D vmlinux

这将显示像 $3 这样的寄存器而不是它们的名字。为了调整它,我使用了 mipsel-linux-gnu-objdump --help 中提到的下一个附加选项:

-Mgpr-names=32,cp0-names=mips32,cp0-names=mips32,hwr-names=mips32,reg-names=mips32

看完后我选择了mips32:

关于linux - 如何反汇编原始 MIPS 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9916130/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com