Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 拆解MIPS体系结构(isa32r2)和#x27;谁的图书馆?_C_Gcc_Mips - Fatal编程技术网

C 拆解MIPS体系结构(isa32r2)和#x27;谁的图书馆?

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

我在项目中使用了一些第三方库。 本项目是一个以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 所以我的问题是:

  • 像section.pdr一样,section是什么意思
  • 为什么会有一些。。。在setion.pdr中
  • 反汇编mips库的srart点是什么?
    欢迎提供任何提示和信息
  • objdump-D
    将尝试取消组装所有节,而不是包含有效指令的节,您应该使用
    objdump-D

  • .pdr
    是调试信息部分,可能不包含有效的指令

  • 对于静态库(.a文件),您应该通过
    ar x libfoo.a
    提取这些库中的目标文件,并尝试通过
    objdump-d
    解除对这些目标文件的组装


  • 在谷歌搜索之后,我发现这个
    ECOFF调试信息(mdebug)包含了PDR的概念。MIPS使用这些函数通过函数展开。现在,我们可以从mdebug或代码检查中获得它们。但是当前的GNU binutils发出“.pdr”部分,而不是使用旧的“.mdebug”样式的调试信息。
    。pdr设置是一个调试信息部分。谢谢@leeduhem