问题标签 [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.
windows - 在 Windows 上使用 pahole(来自 dwarves 包)
有没有办法在 Windows 系统上轻松配置/安装 dwarves Linux 软件包/工具?我需要在将在 Windows 系统上运行的自动化脚本中使用 pahole 命令。
我对 Linux 系统不太熟悉,但我能够让 pahole 命令在运行 Ubuntu Linux 的系统上运行。我不确定如何将这个包从 Linux 移植到 Windows。
提前感谢您的任何建议。
windows - 使用 VC++ Express 2010 编译 libdwarf 无法运行演示应用程序
我能够通过一些警告编译libdwarf
并成功。libelf
我还成功编译了simplereader
演示应用程序,但未能处理 elf 文件。它总是失败:
在库下的input.clibelf
中。
我正在使用最新的 2012libdwarf
源代码和libelf
来自http://directory.fsf.org/wiki/Libelf
有什么建议我可以解决它吗?如果有人做过这个移植并愿意分享他/她的工作,将不胜感激。
谢谢你。
c - 任何有经验的 DWARF 解析器/用户?需要获取一个DIE的属性类型偏移量
所以我正在尝试使用 libdwarf 解析程序的 DWARF 文件(为此我必须坚持使用 C),我正在尝试从每个 DIE 中专门获取 DW_AT_type 标记。它们中的大多数(我不确定是否全部)都是偏移量,我试图找到任何有用的函数来获取这些标签的值。
例子:
<2><286>
DW_AT_type <156>
我在这里想要的是该特定 DIE 的 type 属性的 156 偏移值。
你们知道API是否提供了任何功能来做到这一点?
注意:我必须坚持使用 C,所以请不要推荐任何 python 库或解析 dwarfdumped 文件。我只是在寻找一个特定的功能,但最近几天一直在尝试,但在文档中找不到任何功能。
calling-convention - 从 DWARF 信息中获取调用约定
我正在尝试从 DWARF 信息中获取有关调用约定的信息。更具体地说,我想获取哪些寄存器/堆栈位置用于将参数传递给函数。我的问题是,在某些情况下,我从 DWARF 转储中得到了某种错误的信息。我正在使用的示例是以下“C 代码”:
我使用以下命令编译此示例:
现在,当我使用以下命令获取 dwarf 转储时:
我收到有关此功能的以下信息:
查看 DW_AT_location 条目,它与框架基础有一些偏移。这意味着它们是内存参数,但实际调用约定“fastcall”强制将它们传递到寄存器中。通过查看生成的目标文件的反汇编,我可以看到它们从寄存器复制到函数入口点的堆栈位置。有没有办法从 dwarf 转储中知道 - 或使用任何其他方式 - 最初在调用时传递参数的位置?
谢谢,
c++ - 在 DWARF 信息中,DW_OP 寄存器的确切含义是什么?
我正在尝试解析DWARF
信息,然后使用该信息使用 pin 工具从程序中获取局部变量。这有点像在类固醇上使用pin
as GDB
。但是,我很难理解它们对局部变量和分配的寄存器的含义。
例如,
我知道,为了从变量 mts 中获取数据,我必须在某个寄存器中添加 44,我的问题是我不知道他们在谈论哪个寄存器。我该如何解释这个?我在网上找不到任何东西。
另一个例子是DW_OP_fbreg
,DW_OP_breg5
等等。
x86
任何人都知道他们在上下文中谈论哪些寄存器?他们在谈论ebp还是esp?谢谢。
c++ - 我是在使用仪表例程(pin)得到错误的 ebp,还是我在这里遗漏了什么?
所以这是交易。我正在使用 pin 工具和我附加到的进程中的 dwarf 信息来开发调试器。Pin 是一个框架,可让您为已经运行的进程创建检测工具,我附加到该进程,然后从中解析 DWARF 信息。
显然,pin 让我可以在我附加到程序的精确时刻抓住寄存器。我能够得到ebp
,esp
和eip
. 但是堆栈中的信息与 DWARF 信息中的信息不匹配。
例如:
Pin 告诉我ebp
:bfe0abe8
我假设这是寄存器的实际地址,而不是其中的值。
如果我去堆栈,我有这个:
还有很多,我不知道堆栈的底部实际上是什么,所以我只展示了一点。
如果我转到 DWARF 信息,这是堆栈顶部当前所在的函数,并且 ebp 应该指向:
我知道这一点,因为我在堆栈上看到的局部变量在这个函数内部。这些局部变量是:
我知道根据 DWARF(以及这个:如何使用 GDB 查看存储在堆栈上的变量),此函数中的 ebp 应该是当前的 ebp + 8(因为我正在使用 DWORD 应该是 +2)。然后我应该将 -24 减去 8,使其成为 ebp-16(实际上是 ebp-4)。在纸上这应该可以工作,但是在进入堆栈时我遇到了很多问题:
- 我什至没有在堆栈顶部附近看到该引脚返回给我的当前 ebp 的地址。
- 假设这
bfe0abb9
是当前的 ebp 并且该引脚实际上返回的是寄存器的值,而不是地址,如果我从该寄存器中减去 4,我将不会得到 tib 的值,因为根据我对堆栈的理解,我会上升而不是下降。即使我在尝试获取 jos (ebp-28+8 = ebp -20 = ebp -5
) 时会失败,但我绝对不会得到 jos000000a
。
我在这里错过了什么吗?我对堆栈和/或寄存器或 DWARF 信息有错误的理解吗?还是 Pin 搞砸了我并提供了错误的信息?
有什么建议么?
gcc - dtrace: 编译脚本失败 找不到预处理器
我正在尝试从 oracle 测试此脚本以在 Ubuntu 10.04 上获取活动的 NFS 客户端,但我无法让它运行。
为此,我首先按照这些说明安装了 dtrace 。这正是我所做的:
但是,我在编译时收到此警告:
我已经安装了libdw-dev
and binutils-dev
,但是看一下makefile,它似乎在寻找libdwarf.so
,并且libdw
在我的系统上被命名为libdw.so
.
为了规避这一点,我创建了一个符号链接ln -s /usr/lib/libdw.so /usr/lib/libdwarf.so
。这样做之后,编译失败。
所以,让我们撤消它。我删除了符号链接,再次编译,运行make install
并make load
希望一切正常。一切似乎都很好。
但是,然后我尝试运行上面提到的脚本,但它失败了:
我不知道发生了什么。我已经安装了 gcc,以防万一。
debugging - Objdump/GCC - BFD:矮人错误:错位的行号部分
在尝试使用 objdump 生成汇编代码(与源代码混合)时,
我收到以下错误。
生成的输出程序集不与源代码混合。有人可以澄清这意味着什么吗?有没有什么办法解决这一问题 ?
debugging - Valgrind 新工具,阅读 dwarf2 或 dwarf3 信息
我正在开发一个新的 valgrind 工具,在某些时候我想读取 dwarf 调试信息,以获取全局数组的起始地址和大小。
我知道此信息包含在 dwarf3 调试信息的 .debug_info 部分中。
在 derictory /valgrind/coregrind/m_debuginfo 中有一个头文件 priv_readdwarf3.h,其中第 57 行有一个函数:
但我不明白如何使用这个功能。
任何帮助表示感谢提前感谢。
c - 如何将 elf 文件从 dwarf 转换为 stabs 格式?
有一个 ELF 调试文件。
该文件使用 DWARF 格式。
如何将其转换为 stabs 格式?
是否有任何工具或方法可能有助于做到这一点?
谢谢你。