C 拆解MIPS体系结构(isa32r2)和#x27;谁的图书馆?
我在项目中使用了一些第三方库。 本项目是一个以MIPS(isa32r2)为核心的嵌入式系统。 最近,我们在第三方库(libusb.a)中发现了一个bug,但是由于时间的原因,现在已经没有技术支持了。 所以我试着拆开图书馆 $ mips-sde-elf-ar -x libusb.a $ mips-sde-elf-objdump.exe -Ds -mmips:isa32r2 -EL usbhost_func.o > usbhost_func.s $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: 00000000 : 0:27bdffd8附加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 pdr部分的拆卸: 00000000 : 0:00000000无 4:40000000 mfc0零,c0_指数 8:FFFFF C sdc3$31,-4(ra) ... 为什么这里是。。。 14:00000008 jr零 18:0000001e 0x1e 1c:0000001f 0x1f 20:00000000无 节gnu.attributes的反汇编: 00000000 : 0:00000f41 0xf41 4:756e6700 jalx 5b99c00 8:00070100 sll零位,a3,0x4 c:03040000 0x3040000 所以我的问题是:C 拆解MIPS体系结构(isa32r2)和#x27;谁的图书馆?,c,gcc,mips,C,Gcc,Mips,我在项目中使用了一些第三方库。 本项目是一个以MIPS(isa32r2)为核心的嵌入式系统。 最近,我们在第三方库(libusb.a)中发现了一个bug,但是由于时间的原因,现在已经没有技术支持了。 所以我试着拆开图书馆 $ mips-sde-elf-ar -x libusb.a $ mips-sde-elf-objdump.exe -Ds -mmips:isa32r2 -EL usbhost_func.o > usbhost_func.s $mips sde elf ar-x libusb.a
欢迎提供任何提示和信息
objdump-D
将尝试取消组装所有节,而不是包含有效指令的节,您应该使用objdump-D
.pdr
是调试信息部分,可能不包含有效的指令ar x libfoo.a
提取这些库中的目标文件,并尝试通过objdump-d
解除对这些目标文件的组装在谷歌搜索之后,我发现这个
ECOFF调试信息(mdebug)包含了PDR的概念。MIPS使用这些函数通过函数展开。现在,我们可以从mdebug或代码检查中获得它们。但是当前的GNU binutils发出“.pdr”部分,而不是使用旧的“.mdebug”样式的调试信息。
。pdr设置是一个调试信息部分。谢谢@leeduhem