我有一个开源二进制文件(minecraft-pi)。对于这样的程序集给定部分: :

   a2ed4:       e92d45f8        push    {r3, r4, r5, r6, r7, r8, sl, lr}
   a2ed8:       e1a04000        mov     r4, r0
   a2edc:       e59d0024        ldr     r0, [sp, #36]   ; 0x24
   a2ee0:       e352007f        cmp     r2, #127        ; 0x7f
   a2ee4:       d3a02000        movle   r2, #0
   a2ee8:       c3a02001        movgt   r2, #1
   a2eec:       e1922fa0        orrs    r2, r2, r0, lsr #31
   a2ef0:       1a000015        bne     a2f4c


(根据c ++ filt的libminecraftpe.so_ZN5Level11hasChunksAtEiiiiii)。其他ARM / Thumb + Android,它们来自大致相同的代码库。

因此,很容易为Level::hasChunksAt(int, int, int, int, int, int)构建符号文件并将其在gdb中使用。即使在主要完成汇编时,如果可以在函数名称上设置断点并查看有用的回溯信息也会很有帮助。

因此,如果我已经编写了地址到符号名称的映射,该如何生成相应的符号文件二进制文件(可以通过minecraft-pi命令加载到gdb中,甚至可以嵌入到可执行文件中?)

我熟悉人类可读的调试符号格式,例如Br​​eakpad syms,但是在那里我是否在Stack Exchange上发现了与IDA集成有关的其他问题symbol-filedwarfexportpwndebug(包含在以下链接中)。 florisschabert / unstrip支持ARM,但似乎适合基于Objective-C标准库插入符号,此处不适用。可以将IDA与unstrip一起使用,但是我更喜欢可以编写脚本的命令行解决方案。在尝试使用有限文档的各种工具之前,我基本上是在寻求有关一般推荐做法的建议。

链接:


如何使用GDB?
在GDB中加载用户指定的IDA符号
https://github.com/alschwalm/dwarfexport
https://github.com/pzread / unstrip
https://github.com/florischabert/unstrip


评论

如果您执行手动分析以恢复符号和节信息,这些文章可能会有所帮助:1)em386.blogspot.com/2006/10/…2)em386.blogspot.com/2006/10/…