如何从矮化信息中获得结构成员的偏移?
我正在尝试打印dw_at_data_member_location属性从矮info到get the member variables offset from a struct name>>>>>>>>>>>>>>>> 这是objdump的dwarf_info: : Abbrev Number: 5 (DW_TAG_structure_type) DW_AT_name : (indirect string, offset: 0xf0): class DW_AT_byte_size : 208 DW_AT_decl_file : 1 DW_AT_decl_line : 10 DW_AT_sibling : : Abbrev Number: 6 (DW_TAG_member) DW_AT_
24 2024-04-08
编程技术问答社区
矮人hello world的汇编实例或教程?
我正在用nasm编写一个集会级别的人说话的编程语言. 我注意到矮人调试是开发它的重要组成部分. 为了使其稍后成为自我托管,不仅必须汇编为小精灵,而且还必须支持矮人以使调试可行. 对于小精灵,有一个很棒的nasm示例 http://wwwww.muppetlabs.com/~breadbox/jbreadbox/software/software/software/tiny/tiny/tiny/tiny/thiny/teensy- .html http://blog.markloiseau.com/2012/05/tiny-64-bit-eeldecutables/ 我想知道是否有或什至可以为矮人做类似的东西, 一个示例Hello World,其中包括与GDB一起使用的矮部分. 以这样的示例,理解矮人,而不是经过相当神秘的文档,主要是指C会更容易. 我发现的最接近的是IBM的指南,该指南具有一个小程序,可让您在每个功能上有选择地矮dump www.ibm.com/develop
14 2024-03-17
编程技术问答社区
在NASM中调试符号(再一次)。
这个问题在Stackoverflow上已多次问,但我尝试了所有答案,但我仍然无法让NASM包括矮人调试符号. 我在Ubuntu 18.04 64位下使用NASM 2.13.02.我不确定我是否仍然缺少什么? 如果重要的话,我实际上想同时使用lldb和gdb. 谢谢. 这是我的代码: section .bss section .text global _start _start: mov ebx, 0 mov eax, 1 int 80h 这是我的构建和链接方式: nasm -g -F dwarf -f elf64 hello.asm ld -s -o hello hello.o 结果文件是: $ ls -la hello -rwxr-xr-x 1 terry terry 352 Sep 4 18:21 hello $ 试图检查矮人是否包括: $ dwarfdump hello No DWARF in
10 2024-03-17
编程技术问答社区
GAS: .cfi_def_cfa_offset的解释
我想对GCC生成的汇编中的.cfi_def_cfa_offset指令使用的值进行说明.我隐约地知道.cfi指令参与了呼叫框架和堆叠放松,但是我想更详细地解释为什么例如,为什么在GCC输出的组件中使用了值16和8在我的64位Ubuntu机器上. C程序: #include int main(int argc, char** argv) { printf("%d", 0); return 0; } 我在源文件test.c上调用了GCC,如下所示:gcc -S -O3 test.c.我知道-O3可以实现非标准优化,但是我想为了简洁而限制生成的组件的大小. 生成的组件: .file "test.c" .section .rodata.str1.1,"aMS",@progbits,1 .LC0: .string "%d" .text
18 2024-03-17
编程技术问答社区
基本的OS X汇编和Mach-O格式
我有兴趣在Mac OS X平台上的x86-64汇编编程.我遇到了有关创建248B Mach-O程序的此页,这使我进入苹果自己的Mach-O格式参考.之后,我以为我会在Xcode中制作相同的简单C程序,然后检查生成的汇编. 这是代码: int main(int argc, const char * argv[]) { return 42; } ,但生成的组装为334行,包含(基于248b模型)A lot 的多余内容. 首先,为什么C可执行文件的发行版构建中包含这么多矮人调试信息?其次,我注意到Mach-O标头数据包含4次(在不同的矮人相关sections中).为什么需要这?最后,Xcode组件包括: .private_extern _main .globl _main _main: .cfi_startproc 但是在248b程序中,这些都无处可见 - 该程序以_start开始.如果所有程序按main>? 开始 完整的Xcode组装:
18 2024-03-17
编程技术问答社区
Info.plist文件处理修改了可执行文件
我一直在从事iPhone应用程序的问题,遇到了DSYM文件的生成对我有缺陷的问题. 生成symfile/users/kaom/projects/build/release-iphoneos/nodeappgen.app.dsym/users/kaom/projemts/projects/build/release-iphoneos-iphoneos/nodeapgen.app/nodeapggen/nodeapggen CD/用户/KAOM/Projects/apps/nodeAppgen setEnv path"/developer/platforms/iphoneos.platform/developer/usr/bin:/developer/usr/bin:/usr/bin/bin:/bin:/bin:/usr/sbin/sbin:/sbin:/sbin" /developer/usr/bin/dsymutil/users/kaom/projects/build/releas
32 2023-12-19
编程技术问答社区
DWARF和带有dSYM文件的DWARF之间有什么区别?
xcode支持此构建设置的这两个值: 构建设置>构建选项>调试信息格式. 任何人都可以解释差异吗? 解决方案 区别在于,在带有DSYM文件的矮人中,您的存档app.xcarchive(用于ADHOC Distribution)还包含DSYM文件,即在崩溃报告中反向代码进行反向象征.通常,.xcarchive包含 dSyms Products info.plist 因此,如果您需要它以用于对归档您的应用程序的崩溃报告的外部分析进行分发,则应将矮人与dsym文件一起使用. 其他解决方案 一如既往地了解缩写的帮助! 矮人最初是与 debug符号(dsym): 默认情况下,debug构建了应用程序存储 debug符号在编译二进制中的,而发行版构建应用程序存储店中的companion dsym文件中的调试符号以减少二进制尺寸. 构建UUID将调试符号文件和应用程序二进制捆绑在人均基础上.为您的应用程序的每个构建生成了一个新的UUID,并独特
18 2023-12-18
编程技术问答社区
分析MIPS二进制文件:是否有一个用于解析二进制数据的Python库?
我正在研究一个实用程序,该实用程序需要解决二进制中符号函数名称和源代码线号的十六进制地址.该实用程序将在X86上的Linux上运行,尽管它分析的二进制文件将用于基于MIPS的嵌入式系统. MIPS二进制文件以精灵格式使用,使用矮人进行符号调试信息. 我目前正计划分叉,传递了十六进制地址列表并解析输出以获取功能名称和源线号.我已经编译了一个objdump,并支持了MIPS二进制文件,并且正在工作. 我宁愿有一个软件包允许我从python代码中本地查找内容,而不必构成另一个过程.我找不到python.org上的libdwarf,libelf或libbfd,也没有在dwarfstd.org上提及python. 某处有合适的模块吗? 解决方案 请检查 pyelftools - 一个新的纯Python图书馆. 其他解决方案 您可能会对 pydevtools >>> from bintools.dwarf import DWARF >>> dwarf = DW
36 2023-12-15
编程技术问答社区
试图编译libdwarf,出现未定义的错误
我正在尝试在Windows下构建Libdwarf API,但我正在收到以下编译错误. in dwarf_elf_access.c undefined type Elf32_Ehdr, undefined symbol EI_CLASS undefined symbol ELFCLASS64 undefined symbol ELFDATA2LSB ... 我在所有标题文件和源文件中进行了搜索,并且在我所能确定的任何地方都找不到它们定义的.这些UNIX/Linux是特定的定义吗?如果是如何在Windows下解决这些错误? 谢谢 解决方案 似乎您也需要链接Libelf库(矮库使用它). 其他解决方案 终端是正确的,libdwarf取决于libelf库. 我成功地使用了MSVC2008和2010来编译此版本.
14 2023-12-06
编程技术问答社区
获取a.out文件中的符号位置
这个问题解释如何获取精灵文件的符号(变量,功能等)的工作. 现在,我有了我想在哪个位置(模块)上知道的符号. 例如,如果我编译了由文件组成的程序main.c,someFile.h和someFile.c.同样,假设main.c程序包含全局变量 int计数器.那么,我如何能够分辨变量 counter 位于main.c? 解决方案 答案在在这里. .
24 2023-10-12
编程技术问答社区
读取ELF文件DWARF调试信息的库
关于读取矮dwarf格式的良好跨平台库的任何建议?我想在Python程序中阅读矮人调试信息. 解决方案 街区上有一个新孩子 - Pyelftools - 一个纯粹的Python图书馆,用于解析该图书馆精灵和矮人格式.尝试一下. 它的目标是完整的,目前正在积极发展中,因此任何问题都应快速而热情地处理: - ) 其他解决方案 " ELF调试信息"的概念并不是真正存在的:ELF规范留下了.debug部分的内容,故意未指定. 常见的调试格式是stab and libdwarf .. 其他解决方案 您可能对 pydevtools : >>> from devtools.dwarf import DWARF >>> dwarf = DWARF('test/test') >>> dwarf.get_loc_by_addr(0x8048475) ('/home/emilmont/Workspace/dbg/test/main.c', 36, 0) >>> pri
26 2023-06-22
编程技术问答社区
用linux perf和不同的调用图模式对我的程序进行剖析,得到不同的结果
我想用Linux Perf介绍我的C ++程序. 为此,我使用了以下三个命令,我不明白为什么我会收到三个完全不同的报告. perf record --call-graph dwarf ./myProg perf report perf record --call-graph fp ./myProg perf report perf record --call-graph lbr ./myProg perf report 我也不明白为什么main函数不是列表中最高功能. 我程序的逻辑是以下内容,main函数调用getPogDocumentFromFile函数,该函数调用toPred调用toPred,该函数调用applySubst,该函数调用applySubst.此外,toPred,applySubst和subst是递归函数.我希望它们成为瓶颈. 还有更多评论:我的程序运行约25分钟,高度递归,并分配了很多(〜17GO)的内存.另外,我使用-fno-omit-f
28 2023-06-16
编程技术问答社区
gcc 11没有调试。它显示 "as: unrecognized option '-gdwarf-5'"
我在我的机器上使用Homebrew安装了GCC 11(Linux 20.04).并且它显示在Vscode上,因为它显示 as:未识别的选项' - gdwarf-5' 我不确定这是否是路径问题.因为当我安装啤酒时,它告诉我 Warning: /home/linuxbrew/.linuxbrew/bin/ is not in your PATH. 为了解决此问题,它建议了这三个命令 echo '# Set PATH, MANPATH, etc., for Homebrew.' >> /home/hasib/.profile echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/hasib/.profile eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" 所以,我做了那些.而且我不知道这是否搞砸了.我对Linux的
1406 2023-04-26
编程技术问答社区
改变elf调试信息中列出的源文件
基本上,我希望能够在Elf二进制中更改Debug Dwarf部分中的源文件的路径. 解决方案 基本上,我希望能够在Elf二进制中更改Debug Dwarf部分中的源文件的路径. 是什么阻止了您? 该路径存储在二进制的.debug_str部分中,作为NUL - 终止字符串.您可以从例如readelf -S,并用emacs编辑字符串.或编写一个程序来做到这一点. 其他解决方案 以防万一您的答案是GDB(或其他调试器)相关的,通常有一种更改源路径的方法 - 在GDB中,您可以通过 http://sourceware.org/gdb/onlinedocs/gdb/source-path.html.html 其他解决方案 debugedit是RPM软件包中包含的程序,应该有用.
24 2023-04-19
编程技术问答社区
将调试符号从DWARF转换为PDB
是否有一种方法可以将Binutils的矮人格式(例如,CCC在Cygwin上发射)转换为Microsoft PDB(由Visual Studio消费)? > 解决方案 CV2PDB可以做到这一点.我的结果好坏参半,有时效果出色,而在其他时候,一些本地和全球变量丢失了 https://github.com/rainers/rainers/cv2pdb
84 2023-04-14
编程技术问答社区
从a.out文件中提取全局变量
编辑(更新的问题) 我有一个简单的C程序: // it is not important to know what the code does you may skip the code main.c #include unsigned int AppCtr; unsigned char AppFlag; int SOME_LARGE_VARIABLE; static void AppTest (void); void main (void) { AppCtr = 0; AppFlag = 0; AppTest(); } static void Foo(void){ SOME_LARGE_VARIABLE=15; } static void AppTest (void) { unsigned int i; i = 0; while (i
142 2023-03-22
编程技术问答社区
苹果公司的GCC在哪里/如何在可执行文件中存储DWARF?
Apples GCC在哪里/如何在可执行文件中存储矮人? 我通过gcc -gdwarf-2(苹果GCC)编译了二进制文件.但是,objdump -g和objdump -h都没有向我展示任何调试信息. 也没有找到任何调试信息. (我在binutils-mailinglist上询问了在这里.) . 但是,我可以通过dsymutil(进入DSYM)提取调试信息.然后,libbfd也能够阅读这些调试信息. 解决方案 在Mac OS X上,有一个决定将链接器id当您链接程序时不处理所有调试信息.调试信息通常是10x程序的大小可执行的,因此将链接器进程所有调试信息都包含在可执行的二进制中,这是对链接时间的严重损害.用于迭代开发 - 编译,链接,编译,链接,调试,编译链接 - 这是一个真正的打击. 相反,编译器在.s文件中生成DWARF调试信息,汇编器将其输出.链接期间重新安置符号的. 消费者(执行.o文件调试)从可执行文件中加载调试映射,并处理所需的.o文件中的所
38 2023-03-16
编程技术问答社区
我对DW_OP_call_frame_cfa做了什么?
我正在尝试使用libdwarf计算运行程序中的本地变量的位置.我曾经能够通过执行DW_OP_FBREG来做到这一点,该DW_OP_FBREG最终将映射到将为该功能的框架基础的寄存器映射.在较新的矮人标准中,框架基础为dw_op_call_frame_cfa.我似乎找不到任何信息告诉我如何执行DW_OP_CALL_FRAME_CFA并返回框架基础位置. CFA表有很多参考,谁恢复了寄存器,但我不知道该如何获取该信息以及如何应用信息.有人可以填补空白吗? 解决方案 DW_OP_call_frame_cfa表示您必须使用呼叫框架信息来计算CFA;然后将其推在表达式堆栈上. 请参阅矮人4标准的第6.4节("呼叫帧信息"),以说明此.从本质上讲,您现在必须阅读.debug_frame部分,并根据6.4中描述的规则进行解码.这等于为另一种小字节码语言编写另一个解释器;并且可能还重复使用矮人表达式解释器. 此操作码基本上是矮人中的空间优化.编译器已经在发出呼叫框架信息,此操作码也使
48 2023-02-27
编程技术问答社区
atos和dwarfdump不会对我的地址进行符号化。
我通过airbrake.io收到了崩溃报告,该报告未被象征.由于崩溃报告与Apple CrashLog的格式不完全相同,因此我不能像往常一样将其放在Xcode上,因此我从Xcode Archive中拿出完全相同的构建,试图在命令行上象征它.与以下结果: $ atos -o kidsapp.app/kidsapp 0x0002fc4c 0x0002fc4c (in kidsapp) 我绝对确定我使用的是与崩溃报告的相同构建.所以我还尝试了矮人: $ dwarfdump --lookup 0x0002fc4c --arch armv7 kidsapp.app.dSYM ---------------------------------------------------------------------- File: kidsapp.app.dSYM/Contents/Resources/DWARF/kidsapp (armv7) --------------------
44 2022-12-10
编程技术问答社区
如何将.dsym文件解码为明确的DWARF格式?
矮人是一种调试信息格式. Xcode生成的.DSYM文件包含矮小的调试信息. 问题是:如何解码.dsym文件以获取人类可读的矮人信息,该信息应如下所示. 解决方案 在Mac OS X上,您使用dwarfdump实用程序将矮人倒入.o files或.dsym bundles中. % dwarfdump fig7.o ---------------------------------------------------------------------- File: fig7.o (x86_64) ---------------------------------------------------------------------- .debug_info contents: 0x00000000: Compile Unit: length = 0x00000077 version = 0x0002 abbr_offset = 0x00000000 add
94 2022-12-06
编程技术问答社区