这更多是出于好奇而不是生产需求,但我一直在问自己是否可以提取二进制文件的 C++ 源,以便可以重新编译它以生成二进制文件的工作克隆。 如果尝试过: 使用“-g -Og”编译二进制文件以包含矮人信息, 使用带有“-S”和“--source-comment”的objdump将源交错到转储中找出所有注释的 ...
这更多是出于好奇而不是生产需求,但我一直在问自己是否可以提取二进制文件的 C++ 源,以便可以重新编译它以生成二进制文件的工作克隆。 如果尝试过: 使用“-g -Og”编译二进制文件以包含矮人信息, 使用带有“-S”和“--source-comment”的objdump将源交错到转储中找出所有注释的 ...
假设我想要一个用 C++ 编写的程序读取它自己的 eh_frame,以便获取堆栈展开和异常处理所需的信息。 如何找出它从哪里开始? ...
请原谅我,因为我在这里很新,但我正在尝试使用 gdb 调试 x86 程序集。 ex10.asm 编译并与以下链接: ex10.o 似乎有调试符号 ex10 似乎没有调试符号 gdb ./ex10 在下面返回 在此之后,我不太确定要看。我应该提供任何建议或信息吗? 还有 ...
我有.elf文件。 我正在尝试学习符号地址。 我可以通过多种方式找到主要的变量地址。 我使用了 pyelftools、nm.exe、objdump.exe、readelf.exe。 但是所有这些方式我都无法到达结构地址和枚举值。 当我用 dwarf 调试 elf 文件时,我可以看到结构和枚举。 我可 ...
我正在修复 DWARF 调试信息(第二个 DWARF 版本)解析器中的错误。 在这个过程中,我做了以下奇怪的观察: 通过读取 dll 文件(由 GNAT 使用 ada 文件创建)来创建字节流。 在此字节流内的 debug_info 中的“DW_TAG_structure_type”的 positio ...
假设我有以下程序( a.c ): 有了a.out ,我如何找出main()的定义位置? 我的意思是,在一个大项目中, main()的来源并不总是很清楚。 ...
我正在使用 NASM 编译以下代码(nasm -g -F dwarf -f elf64 test.asm && gcc -g3 test.o)。 我希望这会将第 1、2、3、8、9 和 10 行添加到矮数据中,但是当我浏览文件(使用 DWARF 资源管理器、readelf 或自己 ...
背景: 我需要我们项目中代码的调试信息。 可以使用以下两种方法: 使用-g编译,然后使用 GNU 二进制实用程序strip和objcopy将调试信息剥离到单独的文件中。 使用-gsplit-dwarf编译 题 第二种方法为应用程序中的每个翻译单元创建一个.dwo 。 虽然这会改善链接器 ...
我是 dwarf 的addr2line ,并使用了一些工具,如addr2line 、 objectdump 。 但是,我面临的问题是我想获取映射到其源代码行的目标文件/静态库中的所有指令。 棘手的部分是目标文件中没有地址,因为每个函数都从0x00开始。 所以addr2line不起作用(或者我没有正确 ...
在由perf record --call-graph dwarf生成并由perf script打印的回溯中,我一直在为大约 5% 的调用堆栈获取错误地址,即展开失败。 一个例子是 它是从此代码生成的(使用g++ -O3 -g -fno-omit-frame-pointer my_bin.cpp - ...
我们有一个第三方软件,它从 generate.elf 中挑选出关于我们使用 DWARF 调试信息来查找它的全局变量的信息。 以前我们一直在使用 IAR 编译器,它生成.elf 文件,包括调试 DWARF 信息。 使用 IAR 生成的.elf 文件,在 memory 中查找位置地址和变量名称没有问题。 ...
我正在关注Eli Bendersky 关于解析 DWARF 调试信息的博客。 他在他的博客中展示了一个使用 DWARF 版本 2 解析二进制文件的示例。 可以从location list中检索function(进一步用于检索局部变量)的框架基础: 但是,我发现在 DWARF 版本 4 中没有这样的. ...
我目前正在调试一个 BIOS 原始二进制文件(没有可用的源代码),我想教我手动发现的 gdb 调试符号(例如 function 偏移量、本地变量、堆栈参数)。 gdb 可以加载各种调试符号文件格式,但我没有找到任何手动教他们的方法。 有多种工具可用于转储调试信息,但无法从用户定义的输入中找到实际创 ...
在我们的开发中,我们从 IAR ARM V7.40 切换到 IAR ARM V8.40 我们正在使用 python package pyelftools对调试信息进行后处理。 不幸的是,现在这似乎被打破了,因为 V8 编译器似乎使用 DWARF4 语法,而 pyelftools 并未完全涵盖这一点。 ...
背景: 我正在生成 JIT 代码(生成 x86-64 代码)。 在 JIT 过程结束后,我生成了 a.text 部分、a.data 部分和 a.eh_frame 部分(.eh_frame 用于堆栈展开)。 我能够成功执行此 JIT 代码。 但问题是 GDB。 我希望能够使用 GDB 调试此 JIT ...
我正在编写一个调试器,想看看它的程序计数器是否在 function 内。 我想我需要检查它是否在DW_AT_low_pc和DW_AT_high_pc之间。 这是我要调试的代码: dwarfdump给出以下内容: 在我的调试器循环中,我读取程序计数器如下: 但它获得的值永远不会介于DW_AT_lo ...
我需要一个关于使用 emscripten 生成的 WebAssembly 二进制文件如何存储它们的调试符号的建议,以了解为什么我的特殊情况不起作用而一个微不足道的情况起作用。 所以我试图测试这个AV1 WebAssembly 端口,但它在 malloc 中出现错误,所以我想调试它。 我添加了-g4 ...
我有一个带有 DWARF 调试信息的 kernel 模块。 它的所有 ELF 部分都具有零起始地址。 它的 DWARF 信息包含多个重叠的代码和数据符号。 它还有许多 DW_AT_low_pc 地址为零的编译单元。 有没有办法在二进制文件中的某个位置找到正确的 DWARF 符号? ...
我试图了解DW_FORM_strp属性值实际存储在 ELF 文件中的位置(可以在此处找到: https://filebin.net/77bb8359o0ibqu67 )。 我找到.debug_info 、 .debug_abbrev和.debug_str部分。 然后我解析了 .debug_info ...
我尝试构建一个调试器,它允许我在函数或代码行处设置断点。 所需的调试信息应该从 elf 文件的 DWARF 部分中提取。 我能够提取这些数据。 我要调试的项目有 50-100 个文件,所以我需要大约 10 分钟的时间来使用 readelf 或 pyelftools 解析 elf 以获得我需要的所有矮 ...