【问题标题】:Linux Assembly DebuggerLinux 汇编调试器
【发布时间】:2011-04-23 00:00:56
【问题描述】:

我需要一个调试器来在 Linux 上进行汇编。我对 Linux 缺乏调试器感到非常惊讶!它应该具有各种功能,例如显示寄存器等等。我会使用 GDB,但它对 NASM 并不完全友好。

我宁愿调试器有 intel 语法,但我可以做出牺牲。

我尝试过 kdb、gdb/ddd 和 ald。还有人知道吗?不推荐 strace,因为我超越了系统调用!

【问题讨论】:

    标签: linux debugging assembly


    【解决方案1】:

    当您说 gdb 对 NASM 不友好时,我不确定您到底是什么意思。问题是 gdb 使用 AT&T 表示法来显示汇编程序。 NASM 使用 Intel 表示法。您可以在 Google 上找到一些差异。

    您可以将 gdb 配置为使用 Intel 表示法显示汇编程序。命令是:

    set disassembly-flavor intel

    您尝试过的程序,kdb、ddd 和朋友都是 gdb 前端,即它们在使用 gdb 作为后端时为您呈现不同的 UI。

    我认为你最好的,也许是唯一合理的选择是 gdb。另一种选择是自己编写一个调试器,但这相当复杂。

    希望对你有帮助。

    【讨论】:

    • 其实kdb不是gdb前端,但是ddd是。我用过几次kdb。与任何其他调试器相比,它的一个优点是它是内核级调试器。 IE。它可以在您调试时关闭整个系统。然而它的力量也是它的弱点——因为它是内核级别的,它非常有限。
    • GDB 管理起来有点麻烦。这对 C 来说很棒,但是尝试一个对 ASM 调试有益的命令,例如 disas main 或 _start,会告诉您没有加载符号表。除非我遗漏了什么,否则我会检查 NASM 是否允许使用符号进行编译。
    • 我明白你的意思。 GDB 肯定不是用户友好的。然而,我的经验是,通常当我需要一些东西时,这需要一些时间,但最终我会找到一种方法来做我想做的事。
    • 好吧,找到一种将符号放入可执行文件的方法。这将使您的生活更轻松。否则,使用地址。您可以在代码中的某个地址设置断点。使用 break *
    • 看来我已经解决了 GDB 的问题。使用 NASM,您必须将标志 -f 设置为 elf,然后使用 ld 并确保默认情况下不会剥离符号。感谢 intel 语法命令!
    【解决方案2】:

    here 列出的任何调试器对您有帮助吗?

    【讨论】:

    • Evan 的调试器相当不错;但我在 64 位机器上编译 32 位二进制文​​件!
    【解决方案3】:

    我真的很理解@Saustin 的问题,因为我也在寻找Linux Assembly Debugger,这意味着可以创建断点,逐步运行,实时查看寄存器,返回(回溯) 或者往前走,查看内存中的数据等。

    解决方法是正确使用DDD/GDB

    首先是屏幕截图显示它的外观。


    它需要一些特殊要求:

    • 当您创建可执行文件时,在 nasm 中使用特殊标志 -F stabs,如下所示:

    Linux 命令行:

    nasm -f elf -F stabs hello.asm -o hello_stabs.o
    ld -m elf_i386 hello_stabs.o -o hello_stabs
    
    • 然后正常运行调试,如:ddd hello_stabs

    • 享受吧!

    -F stabs 选项告诉汇编器在输出文件中包含调试信息。 DDD 和GDB 使用STABS 调试格式。


    来源和优秀的简短教程:

    The Data Display Debugger (DDD), A Quick Start Guide

    【讨论】:

    • GDB 与nasm -g -Fdwarf 配合得更好。它可以使用 STABS,但 DWARF 是更现代的格式。另请参阅x86 tag wiki 底部的 GDB 调试技巧和strace
    【解决方案4】:

    如果您熟悉 GDB,那么您可以尝试使用 PEDA 扩展,对我来说它将命令行体验与 GUI 混合在一起

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 2016-01-16
      • 1970-01-01
      相关资源
      最近更新 更多