使用Kdbg调试汇编代码

时间:2011-08-21 17:16:27

标签: linux debugging gcc assembly gdb

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

2 个答案:

答案 0 :(得分:3)

在源代码中添加.file指令,如:.file“sourceasm.s”。然后Kdbg将按预期使用它。

答案 1 :(得分: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)