问题标签 [dwarf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
6501 浏览

python - 分析 MIPS 二进制文件:是否有用于解析二进制数据的 Python 库?

我正在开发一个实用程序,该实用程序需要将十六进制地址解析为二进制文件中的符号函数名称和源代码行号。该实用程序将在 x86 上的 Linux 上运行,尽管它分析的二进制文件将用于基于 MIPS 的嵌入式系统。MIPS 二进制文件是 ELF 格式,使用 DWARF 作为符号调试信息。

我目前正计划 fork objdump,传入一个十六进制地址列表并解析输出以获取函数名称和源代码行号。我已经编译了一个支持 MIPS 二进制文件的 objdump,它正在工作。

我希望有一个包允许我从 Python 代码中本地查找内容,而无需分叉另一个进程。我在 python.org 上找不到任何提及 libdwarf、libelf 或 libbfd,在 dwarfstd.org 上也找不到任何提及 python。

某处是否有合适的模块可用?

0 投票
2 回答
1117 浏览

java - 在 Java 中:在给定 COFF/ELF/DWARF 可执行文件的情况下,以编程方式确定 C/C++ 变量的地址

这是我时不时遇到的情况:

对于不使用虚拟寻址的嵌入式系统,我有一个从 C 或 C++ 代码编译的可执行文件,其中包含调试信息。它通常采用 COFF 或 ELF/DWARF(我把这两种混淆)格式。

在运行时,在 PC 上,我想确定给定名称的变量的地址。(例如“foo.bar[7].baz”)这允许我在嵌入式系统上读/写变量的值(给定一个超出此问题范围的调试协议)。显然,任何基于堆栈或基于堆的变量都不存在,因为它们没有静态地址。

我之前已经在 C++ 中完成了这项工作,以从 TI 的编译器为他们的 2800 系列 DSP 解析 COFF 文件,这有点痛苦。我想知道那里是否已经有一个 Java 库可以做这种事情,因为我面临着同样的事情与一个或两个其他处理器的可执行文件。


更新:(2009 年 11 月 18 日)一个有希望的线索!

有没有人使用过 Eclipse CDT ELF 解析器?

(参见http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc.isv/reference/api/org/eclipse/cdt/core/model/IBinary.html之一javadoc pgs 的)

TI 的 Code Composer 4(基于 Eclipse)似乎使用了这个,所以如果我能弄清楚文档在哪里,也许我可以用它来解决我的问题。

0 投票
2 回答
2150 浏览

dwarf - 在 Mac OSX 中读取 DWARF 文件

任何人都可以帮我编写一个可以读取 DWARF 文件并给我文件名、行号和函数名详细信息的程序。

0 投票
4 回答
31418 浏览

python - 读取 ELF 文件 DWARF 调试信息的库

有什么好的跨平台库以读取 DWARF 格式的 ELF 文件调试信息的建议吗?我想在 Python 程序中阅读 DWARF 调试信息。

0 投票
1 回答
960 浏览

iphone - Info.plist 文件处理修改可执行文件

我一直在研究一个 iPhone 应用程序,遇到了一个问题,即 dSYM 文件生成对我来说是段错误。

GenerateDSYMFile /Users/kaom/Projects/build/Release-iphoneos/NodeAppGen.app.dSYM /Users/kaom/Projects/build/Release-iphoneos/NodeAppGen.app/NodeAppGen cd /Users/kaom/Projects/Apps/NodeAppGen setenv PATH “/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin”/Developer/usr/bin/dsymutil /Users/ kaom/Projects/build/Release-iphoneos/NodeAppGen.app/NodeAppGen -o /Users/kaom/Projects/build/Release-iphoneos/NodeAppGen.app.dSYM

命令 /Developer/usr/bin/dsymutil 失败,退出代码为 11

我将此错误追溯到应用程序的 Info.plist 文件中的错误。

代替

我有

据我所知,dSYM 文件的生成仅取决于可执行文件,plist 文件不应影响可执行文件。所以我的问题是为什么这会破坏 dSYM 文件的生成?

0 投票
1 回答
565 浏览

c - 使用 ptrace 生成堆栈转储

我正在 *nix 上编译 C++,我想在程序中的任意点生成堆栈转储 a),b) 在任何信号期间,尤其是在 SIGSEGV 期间。

谷歌告诉我 ptrace 可能是这项工作的工具,但我找不到任何可以理解的遍历堆栈的例子。得到返回地址,是的,但是 NEXT 的返回地址呢?那么在那个时候提取函数的符号名呢?与矮人有关吗?

非常感谢,如果你能告诉我从这里去哪里。

0 投票
1 回答
820 浏览

gcc - 实施跨步,侏儒

我正在研究源代码级调试器。以 elf 格式提供的调试信息。如何实现“跨越”?问题出在“Point1”,无论如何我可以等待下一个源代码行(从 .debug_line 表中读取它)。

谢谢

0 投票
1 回答
2273 浏览

gdb - gdb\bfd:获取子变量地址或大小或偏移量

我正在使用 gdb 和 libbfd 从 elf 文件中检索全局变量信息并显示它。我可以从 libbfd 获得以下数据:全局变量名称、地址和大小。我使用 gdb 和 gdb\MI(ptype、whatis、-var-create 和 -var-list-children)检索变量及其子项的类型。

如何从所有孩子的父母那里获得地址\大小\偏移量?

例如

如果这种类型的变量 A 在地址 0x000100 中,我想显示 A.count 在 0x000100 中,大小为 0x1,A.time 在 0x000101 中,大小为 0x1。

编辑:我读过 gdb 可以读取 DWARF 信息,但我不知道如何从 gdb 获取这些信息。

0 投票
2 回答
1427 浏览

debugging - 关于如何编写调试格式转换工具的建议

我正在寻找一种工具,旨在将一种格式的调试符号转换为在 GDB 下兼容的另一种格式。这似乎是一个乏味且可能复杂的项目,所以我不确定如何解决它。

最初,我的目标是将 borland 编译器发出的 Turbo 调试符号表 (TDS) 转换为类似 stabs 或 dwarf 格式的东西(我的研究似乎更喜欢 dwarf)。但理想情况下,我希望将我的工具设计为易于扩展,以便以后也可以转换其他格式。例如 codeview4 甚至可能是 pdb。

我创建这个的主要动机是:

  • 互操作性。如果我可以将外部调试格式转换为 gdb 可以使用的形式,那么源级调试将可以在从 gcc 以外的其他编译器编译的二进制文件上进行。这意味着任何使用 gdb 作为后端的前端调试接口都可以正常工作。
  • 不存在其他工具。我做了一个谷歌搜索类似的工具,我发现最接近的是tds2dbg。但它并不完全符合我的要求。

我目前必须处理的内容:

  • 我已经有一个可以理解 TDS 调试格式的调试钩子 API 。我可以使用它来帮助我从要转换的源格式中获取所需的信息。
  • 对于这个项目的范围,我主要感兴趣的是让它在 win32 环境下工作。我不太关心的其他平台和工具。
  • 我要转换的目标 dwarf 调试格式。这个我真的一点都不熟悉。我以前使用过像 MinGW 这样的 gcc 移植编译器,并使用 gdb 以 dwarf 格式对其进行调试。但我不知道这种格式是如何在 Windows 上实现的。

最后一点是我关心的一点。我正在阅读 dwarf 规范文档,但我发现我很难真正理解和理解它是如何工作的。那里有很多细节,但同时它没有任何关于如何在不原生使用 ELF 的平台上的目标文件和图像文件上实现 dwarf 的细节——即 Windows 使用的 PE-COFF 格式. 该文档也是一个非常枯燥的阅读,长句子让人难以理解,图表和插图很少。我遇到了一个名为libDwarf的 API ,它应该可以将大部分解析工作从解释 dwarf 中解脱出来。问题是我仍在尝试构建它,但我还不知道它会如何工作。

我还没有编写任何代码,因为我不完全理解我需要构建什么。我有一种感觉,由于它的复杂性,最大的挑战将是弄清楚如何与 dwarf 一起工作。谷歌搜索有关 dwarf 如何在 Windows 下工作的信息也没有发现任何有用的信息。例如,没有关于在 PE 可执行映像文件中包含 dwarf 所需的“胶水”代码的信息。矮人部分是如何精确布置的?每个部分是否有任何标题信息?GDB 显然不只是采用“原始”的 dwarf 调试文件并按原样使用它。那么 gdb 期望调试文件采用什么样的格式才能使用它呢?

我的问题是,我怎样才能开始这样的项目?更重要的是,当我不可避免地遇到问题时,我可以向哪里寻求帮助?

0 投票
2 回答
2043 浏览

c++ - 尝试编译 libdwarf,给出未定义的错误

我正在尝试在 Windows 下构建 libdwarf api,但收到以下编译错误。

我搜索了所有头文件和源文件,但据我所知,在任何地方都找不到它们。这些是 unix/linux 特定的定义吗?如果是windows下应该如何解决这些错误呢?

谢谢