标签: objdump

如何处理“DWARF 错误:.debug_info 部分大于其文件大小!”?

寻找在我的二进制文件(准确地说.so)中查看特定函数的生成汇编程序的方法,就像我在Compiler Explorer上看到类似的那样,我发现了How to disassemble one single function using objdump? 并根据那里的答案(以及我的进一步搜索)我最终使用了以下命令:

objdump --wide --no-address --no-show-raw-insn [--demangle] --disassemble="<symbol>" -- "<binary>"
Run Code Online (Sandbox Code Playgroud)

<symbol>我发现使用的地方:

objdump --syms [--demangle] -- "<binary>" | grep <function>
Run Code Online (Sandbox Code Playgroud)

其中,the 又<function>是我感兴趣的 C++ 函数名称。当然,the<symbol>是一个损坏的名称。(为了完整起见,我得到了两个结果 - 一个是预期的结果,另一个是带.cold后缀的结果,由“主结果”使用。)


结果已经很扎实了。然而,浏览objdump选项后我看到了有希望的选项:

  • -C/ --demangle,
  • -l/ --line-numbers,
  • -S/ --source

但是,我无法让他们工作......

INITIAL:第一个 ( -C/ --demangle) 导致根本不打印任何反汇编代码。如果没有它,在该Disassembly of section .text:行之后我会有一行带有符号的行,后跟反汇编。使用此选项时,不会显示符号和反汇编,而是Disassembly of section .fini: …

elf debug-symbols objdump disassembly dwarf

13
推荐指数
1
解决办法
7851
查看次数

使用objdump进行ARM体系结构:反汇编到ARM

我有一个目标文件,我试图反汇编它.我用的时候:

objdump -d example.o
Run Code Online (Sandbox Code Playgroud)

我在代码中得到一个文件格式的程序集elf64-x86-64.

我想把它拆成ARM,我该怎么做呢?

linux arm objdump disassembly

12
推荐指数
4
解决办法
5万
查看次数

nm和objdump之间的差异

查看手册,objdumpnm具有重叠功能.

你什么时候使用每一个?每个命令的最初目的是什么?

objdump binutils nm

12
推荐指数
1
解决办法
6790
查看次数

Linux Mach-O反汇编程序

是否有任何Linux程序可以反汇编OSX通用x86/x86_64脂肪Mach-O二进制文件,如objdump?GNU binutils的objdump支持ELF和Windows PE文件,但不支持Mach-O.

linux mach-o objdump disassembly

12
推荐指数
2
解决办法
1万
查看次数

为什么objdump不显示.bss,.shstratab,.symtab和.strtab部分?

我目前正在C中执行自己的objdump实现.

对于我的-s选项,我必须显示ELF文件部分的全部内容.

我做得很好,但我显示的部分比"真正的"objdump更多.

实际上,它不会输出.bss,.shstrtab,.symtab和.strtab部分.

我正在环顾Shdr结构上的sh_flags值,但我找不到任何逻辑......

为什么objdump -s没有显示这些部分?

c elf objdump

12
推荐指数
1
解决办法
3296
查看次数

elf文件中各节的虚拟和物理地址

objdump如何计算精灵部分的物理地址(LMA)?据我所知,elf节头只包含节[1]的虚拟地址(VMA).

通常,VMA和LMA是相同的.但对于初始化数据段(.data),VMA是变量的RAM位置,LMA是初始值所在的ROM位置.Crt0负责在调用main()之前将初始值复制到RAM中.例如:

$ objdump -h my.elf
Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0003c3d0  00080000  00080000  00010000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  5 .data         000008d0  40000000  000d08d4  00060000  2**3
                  CONTENTS, ALLOC, LOAD, DATA
Run Code Online (Sandbox Code Playgroud)

-Tom

[1] http://www.ouah.org/RevEng/x430.htm

linker elf objdump

11
推荐指数
3
解决办法
1万
查看次数

Apples GCC在哪里/如何将DWARF存储在可执行文件中

Apple GCC在哪里/如何将DWARF存储在可执行文件中?

我编译了一个二进制文件gcc -gdwarf-2(Apples GCC).但是,既没有objdump -gobjdump -h没有向我显示任何调试信息.

libbfd也找不到任何调试信息.(我在binutils-mailinglist上问过这个问题.)

然而,我能够通过dsymutil(进入dSYM)提取调试信息.libbfd也可以读取那些调试信息.

macos gcc objdump dwarf dsymutil

11
推荐指数
1
解决办法
5462
查看次数

目标文件的objdump输出中的标志

在某些目标文件上有objdump的输出:

$ objdump -h main.o

main.o:     file format elf32-i386

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000000b  00000000  00000000  00000034  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00000000  00000000  00000040  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00000000  00000000  00000040  2**2
                  ALLOC
  3 .note.GNU-stack 00000000  00000000  00000000  00000040  2**0
                  CONTENTS, READONLY, CODE
Run Code Online (Sandbox Code Playgroud)

这些标志CONTENTS,ALLOC,LOAD等是什么意思?

linux elf objdump

11
推荐指数
2
解决办法
7095
查看次数

如何将objdump结果发送到文件?

我想在Windows XP中的可执行文件上运行objdump,并希望观察细节.但是,我无法找到在文本文件中输出结果的选项 - 因为控制台中的输出显示被切断(我也尝试使用选项-o或/ out来指定ooutfilename,但似乎不存在)

c c++ windows objdump

10
推荐指数
1
解决办法
1万
查看次数

Segfault:objdump和gdb之间的反汇编是不同的

[深呼吸.]我们有一个使用WxMotif 2.6.3弹出窗口的应用程序(GUI库不是 - 而不是 - 我的选择).它在32位ix86系统上运行良好.我的任务是将其转换为64位应用程序.它始终是错误的.我在RHEL 6上,所以我使用gcc 4.4.7编译.在咬牙切齿之后,问题显而易见:在wxFrame :: DoCreate中,m_mainWidget被设置(正确); 在wxFrame :: GetMainWidget中,它作为空指针返回.空指针导致崩溃.使用gdb,设置m_mainWidget的指令是

mov    %rax,0x1e0(%rdx) # $rdx = 0x68b2f0
Run Code Online (Sandbox Code Playgroud)

而获取m_mainWidget的代码是

mov    0x1f0(%rax),%rax # $rax = 0x68b2f0
Run Code Online (Sandbox Code Playgroud)

在gdb中,我可以检查内存并看到0x68b4d0处的指针是正确的.为什么偏移不正确?

为了使事情更加混乱,当我使用objdump来反汇编libwx_motifd_core-2.6.so.0.3.1时,"get"程序集是

  mov    0x1e0(%rax),%rax
Run Code Online (Sandbox Code Playgroud)

在objdump中,get和set都使用0x1e0作为偏移量.到底是怎么回事?

我在这里上传了一些相关信息: GitHub

我已经包含了一个小程序,可以在我的系统上复制问题.

进一步研究,我在wxFrame :: DoCreate的反汇编中看到,进一步使用m_mainWidget使用0x1e0作为偏移量检索值(反汇编是在我使用-O0的编译中,所以代码必须返回内存每一次)."Just for Fun",我向wxFrame添加了一个新的成员变量 - m_myMainWidget - 并在设置m_mainWidget后立即设置它.然后我让wxFrame :: GetMainWidget()返回本地值(m_myMainWidget).你不知道吗:崩溃仍然发生,当我从gdb中反汇编时,GetMainWidget包含相同的+16偏移量.(偏移不在那里我使用objdump进行反汇编.)

c++ assembly gdb objdump

10
推荐指数
1
解决办法
584
查看次数

标签 统计

objdump ×10

elf ×4

disassembly ×3

linux ×3

c ×2

c++ ×2

dwarf ×2

arm ×1

assembly ×1

binutils ×1

debug-symbols ×1

dsymutil ×1

gcc ×1

gdb ×1

linker ×1

mach-o ×1

macos ×1

nm ×1

windows ×1