【问题标题】:List command is not loading source code of assembly program in gdb列表命令未在 gdb 中加载汇编程序的源代码
【发布时间】:2017-02-04 17:00:09
【问题描述】:

我正在使用 gdb [7.11.1] kali linux 32 位 当我使用 list 命令在 gdb 中加载我的汇编程序的源代码时,它会显示以下错误消息: '没有加载符号表。使用“文件”命令'

我尝试过如下命令:

列表 列出行号

在这两种情况下,错误都是一样的。

请帮帮我

谢谢!提前

【问题讨论】:

  • 你是如何组装你的汇编程序的?你用什么标志输入了什么命令?还请在您的程序上发布运行nm 的输出。
  • 一个简单的程序,用于将寄存器中的数据移动到内存,反之亦然
  • 请回答我的问题;根据您组装和链接程序的方式,您可能已经剥离了它,删除了符号表(请注意 gdb 如何抱怨缺少符号表)。
  • as -o progname.o progname.s
  • 在这种情况下,应该有一个符号表。您可以发布您的程序集以及nm progname 的输出吗?

标签: linux assembly gdb


【解决方案1】:

我使用 list 命令来加载我的程序集的源代码

List 命令什么都不做。相反,它列出了 GDB 已经加载的源。

as -o progname.o progname.s

在您的情况下,GDB 不会加载任何源代码,因为您在编译程序时没有任何调试信息。你可能想要:

as -g -o progname.o progname.s

来自man as

  -g
   --gen-debug
       Generate debugging information for each assembler source line
       using whichever debug format is preferred by the target.  This
       currently means either STABS, ECOFF or DWARF2.

【讨论】:

    【解决方案2】:

    我在尝试调试我的 c 代码以查找缓冲区溢出时遇到了同样的问题。 由于干净编译而不生成任何调试信息,该错误会上升。 对于 c 程序,而不是正常编译为gcc program.c 尝试运行gcc -g -fno-stack-protector -z exec stack -o buffer program.c

    -g 告诉 GCC 为 GDB 添加额外信息
    -fno-stack-protector 标志关闭堆栈保护机制
    -z execstack,它使堆栈可执行

    该命令将为您的 c 程序创建一个buffer 二进制文件,因此它将满足在 gdb 中运行 list 命令的所有条件。
    使用gdb ./buffer 启动gdb,然后输入list 命令。它会工作的!

    【讨论】:

      猜你喜欢
      • 2017-12-25
      • 2020-07-20
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      相关资源
      最近更新 更多