我该如何反汇编MIPS代码?

7
如何反编译原始x86代码?类似,但这次是关于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。

如果您不坚持使用objdump,请参考Mips反汇编器-逆向工程Stack Exchange - user202729
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


注:该内容涉及it技术相关内容。

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

vmlinux不包含任何节(section),它只包含指令。问题是,我没有安装gcc和objcopy工具,只有在虚拟机中。由于在x86上有一种方法可以让objdump跳过gcc/objcopy路径,所以我想知道在mips上是否也可能? - Lekensteyn
我明白了,你的目标文件 x.o 只是一个虚拟文件,而你正在从 vmlinux 中提取部分。这很奇怪;我一直能够在各种架构上运行 objdump 来查看 vmlinux 的内容:MIPS、ARM 等等。如果你只使用 -d vmlinux 调用 mipsel-linux-gnu-objdump,它会输出什么?另外:file vmlinux - Kaz

-1

ODA限制上传文件大小最多只能达到256KB。此外,它的Web界面也不是很直观。 - fxgreen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接