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]

ターゲットはAR7CPUです。

4

3 に答える 3

8

うーん、それよりも簡単なようです。-b elf32-tradlittlemipsファイルはELF実行可能ファイルではなく、バイナリであるため、機能しません。したがって、使用する正しいオプションはです-b binary。もう1つのオプションは、-mmipsobjdumpにファイルを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、ソースとインターリーブされたアセンブリを表示します(implies -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 に答える