2012-03-28 280 views
3

How do I disassemble raw x86 code?類似,但是對於MIPS體系結構:如何拆分原始MIPS代碼與objdump?我要檢查在vmlinux的圖像的指令,但是這樣做,我現在必須:如何反彙編原始MIPS代碼?

: > 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

嗯,看來比這更容易。 -b elf32-tradlittlemips不起作用,因爲該文件不是ELF可執行文件,而是二進制文件。所以,正確的選項是-b binary。另一個選項-mmips使objdump將文件識別爲MIPS的二進制文件。由於目標機器是小端,我還必須添加-EL以使輸出匹配x.o的輸出。

-mmips只包含基本指令集。 AR7擁有一個MIPS32處理器,而不僅僅是mips的has more instructions。要解碼這些較新的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看完之後:

0

???出了什麼問題只是:

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

問題有那麼-D diassembles所有部分,代碼或不是?然後使用-d。或-S以顯示與源交錯的組件(意味着-d)。

或者怎麼樣從GCC得到彙編代碼:

mipsel-linux-gnu-gcc -S x.c 
+0

vmlinux不包含任何部分,它僅包含說明。問題是,我沒有安裝gcc和objcopy工具,只能在虛擬機中安裝。既然有辦法讓objdump跳過x86中的gcc/objcopy路徑,我想知道在mips上是否有可能? – Lekensteyn 2012-03-28 21:53:10

+0

我明白了;你的目標文件'x.o'只是一個虛擬的,而你正在從'vmlinux'中取出部分。這很奇怪;我一直可以在'vmlinux'上運行'objdump',用於各種體系結構:MIPS,ARM,...如果你用''調用''mipsel-linux-gnu-objdump',吐出什麼東西? d vmlinux',沒有那些其他參數?另外:'文件vmlinux'。 – Kaz 2012-03-28 21:59:46

+0

文件產生'vmlinux:data' – Lekensteyn 2012-03-28 22:23:42