2014-03-13 22 views
3

我在項目中使用了一些第三方庫。 該項目是一個MIPS(isa32r2)內核的嵌入式系統。 最近我們在第三方庫(libusb.a)中發現了一個bug,但由於時間的關係,沒有技術支持了。 所以我嘗試拆解libarary。反彙編MIPS架構(isa32r2)的庫的起點是什麼?

 

$ mips-sde-elf-ar -x libusb.a 
$ mips-sde-elf-objdump.exe -Ds -mmips:isa32r2 -EL usbhost_func.o > usbhost_func.s 

文件usbhost_func.s我能得到這樣一些信息:

 

    Disassembly of section .text.usbhost_init: 

    00000000 : 
     0: 27bdffd8 addiu sp,sp,-40 
     4: 3c020000 lui v0,0x0 

.text.usbhost_init看起來像usbhost_init()的完整拆卸功能。 但有一些其他的信息在這裏想:

 

    Disassembly of section .pdr: 

    00000000 : 
     0: 00000000 nop 
     4: 40000000 mfc0 zero,c0_index 
     8: fffffffc sdc3 $31,-4(ra) 
     ...  why here is ... 
     14: 00000008 jr zero 
     18: 0000001e 0x1e 
     1c: 0000001f 0x1f 
     20: 00000000 nop 


    Disassembly of section .gnu.attributes: 

    00000000 : 
     0: 00000f41 0xf41 
     4: 756e6700 jalx 5b99c00 
     8: 00070100 sll zero,a3,0x4 
     c: 03040000 0x3040000 

所以我的問題是:

  1. 什麼的secton的意思是像部分.pdr
  2. 爲什麼有一些...setion .pdr
  3. 反彙編mips庫的過程如何?
    任何提示和信息welcome.Tks。

回答

3
  1. objdump -D將嘗試deassemble所有部分,而不是其中包括有效的指令部分,你應該使用objdump -d

  2. .pdr是一個調試信息部分,可能不包括有效的指令。

  3. 對於靜態庫(.a文件),您應該將這些庫中的目標文件提取出ar x libfoo.a,然後嘗試對通過objdump -d得到的那些目標文件進行反彙編。

+0

經過谷歌搜索,我發現這個[使用由「GAS生成的.pdr」部分](http://www.sourceware.org/ml/gdb-patches/2002-06/msg00175.htm) 'ECOFF調試信息(mdebug)包含了PDR的概念。除此之外,MIPS使用 這些功能來解除功能。現在我們可以通過 從mdebug或代碼檢查中獲取它們。但是當前的GNU binutils 會發出「.pdr」部分,而不是使用舊的「.mdebug」樣式調試信息。**。pdr ** settion是一個調試信息區段。謝謝@leeduhem –

+0

@ ssd-tek如果這個答案滿足你的問題,你應該把它標記爲「接受」:) –