7

类似于如何反汇编原始 x86 代码?,但是对于 MIPS 架构:我如何反汇编原始 MIPS 代码objdump?我想检查 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。

4

3 回答 3

8

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

-mmips仅包括基本指令集。AR7 有一个 MIPS32 处理器,它具有比 mips更多的指令。要解码这些较新的 MIPS32 指令,请使用-mmips:isa32. 可用的 ISA 列表可以用 列出objdump -i -m

最终命令变为:

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

于 2012-03-28T22:23:14.760 回答
0

???只是有什么问题:

mipsel-linux-gnu-gcc -c -o x.o x.c
mipsel-linux-gnu-objdump -D x.o

是否-D分解所有部分,代码的问题?那就用-d吧。或-S显示与源交错的程序集(暗示-d)。

或者如何从 gcc 获取汇编代码:

mipsel-linux-gnu-gcc -S x.c
于 2012-03-28T21:49:51.163 回答
-1

使用在线反汇编程序 ODA:

http://www.onlinedisassembler.com

于 2013-08-02T00:14:21.200 回答