【问题标题】:Debug assembly code using Kdbg使用 Kdbg 调试汇编代码
【发布时间】:2011-08-21 17:16:26
【问题描述】:

我有一个项目,其中包含一个 .c C 源代码和一个 .S 汇编源代码。编译和链接后,有没有办法使用 Kdbg 调试 .S 代码?我正在从 .c 文件调用一个 .S 函数,但在 Kdbg 中没有加载代码。

【问题讨论】:

  • 为什么选择 kdbg 而不是 WinDbg?哪个编译器?以及哪些构建选项?请详细说明!
  • 请添加 gcc 和 ubuntu 标签,否则你的问题是模棱两可的。 Kdbg 是 Windows 上的内核调试器。

标签: linux debugging gcc assembly gdb


【解决方案1】:

在您的源代码中添加一个 .file 指令,例如:.file "sourceasm.s"。然后 Kdbg 将按预期使用它。

【讨论】:

    【解决方案2】:

    我刚试过kdbgthe KDE front-end for gdb,不是几乎同名的Linux kernel debugger kgdb)。

    它似乎没有像常规 gdb 的layout asm 这样的正确反汇编模式。您可以将“内存”窗口设置为反汇编并将地址设置为$pc(它会在您单步执行时更新),但这会占用内存窗口并且对于设置断点或向后滚动到之前的指令不是很灵活当前的 RIP/EIP。

    即使您正在调试 asm 源代码,有时您也希望调试器向您展示真正的反汇编,而不是 asm 源代码。例如在使用宏或 NASM %rep 重复块的代码中。

    AFAICT,kdbg 对于 asm 调试不是一个很好的选择。 layout asm / layout reg 的文本模式 GDB 可以;有关提示,请参阅 标签 wiki 的底部。我也试过https://github.com/cs01/gdbgui。有反汇编模式,但不是很好。


    正如@ivan 所说,如果您添加足够的元数据使其知道对象来自哪个源文件,kgdb 将使您对 asm 源文件进行源级调试

    • gcc: 使用gcc -g foo.S构建
    • NASM:nasm -felf64 -g -Fdwarf 组装以包含 DWARF 调试信息。 (NASM 默认是 STABS 调试信息,也可以。)
    • YASM:yasm -felf64 -gdwarf2组装

    有关从 asm 源构建静态/动态二进制文件的更多信息,请参阅 Assembling 32-bit binaries on a 64-bit system (GNU toolchain)

    【讨论】:

    • kdbg is not a very good choice for asm debugging ddd 是 Linux 上 GUI asm 调试器的唯一好选择吗?
    • @MaxB:IDK,我还没去看。 gdbgui 还不错,自从我上次检查以来可能有所改善。其中一个 IDE 也可能内置了一些不错的东西,我还没有检查过这个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 2011-06-24
    • 2016-06-01
    相关资源
    最近更新 更多