当前位置: 首页 > 面试题库 >

文件名已加载的地址丢失[GDB]

马坚白
2023-03-14
问题内容

我有以下示例代码

    #include<stdio.h>
    int main()
    {
      int num1, num2;
      printf("Enter two numbers\n");
      scanf("%d",&num1);
      scanf("%d",&num2);
      int i;
      for(i = 0; i < num2; i++)
        num1 = num1 + num1;
      printf("Result is %d \n",num1);
          return 0;
    }

我用-g选项将这段代码编译为gcc。

gcc -g file.c

生成单独的符号文件

objcopy --only-keep-debug a.out a.out.sym

去除a.out中的符号

strip -s a.out

在gdb中加载此a.out

gdb a.out

gdb说“找不到调试信息”很好。然后我在gdb中使用 add-symbol-file 命令

(gdb) add-symbol-file a.out.debug [Enter]
The address where a.out.debug has been loaded is missing
  • 我想知道如何找到这个 地址
  • 是否有任何命令或技巧可以找到它?
  • 这个 地址 代表什么?

我知道gdb还有另一个命令 符号文件, 但是它会覆盖以前加载的符号。因此,我必须使用此命令在gdb中添加 许多符号文件
。我的系统是64位的,运行ubuntu LTS 12.04 gdb版本是7.4-2012.04 gcc版本是4.6.3


问题答案:

objcopy –only-keep-debug a.out a.out.sym

如果您希望GDB 自动 加载a.out.sym
,请遵循此处概述的步骤(特别注意,您需要执行“添加.gnu_debuglink”步骤)。

这个地址代表什么

GDB想要的地址是.text二进制代码段的位置。要找到它,请使用readelf -WS a.out。例如

$ readelf -WS /bin/date
There are 28 section headers, starting at offset 0xe350:

Section Headers:
  [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
  [ 1] .interp           PROGBITS        0000000000400238 000238 00001c 00   A  0   0  1
...
  [13] .text             PROGBITS        0000000000401900 001900 0077f8 00  AX  0   0 16

在这里,您想给GDB 0x401900作为加载地址。



 类似资料:
  • 加载项目时出错 无法加载模块FirstWebApp 当我查看详细信息时,它说它找不到我的第一个webapp.iml文件,因此无法加载我的项目。

  • 问题内容: 我正在尝试获取ELF二进制文件的加载地址,但无法按预期工作: 它会输出,但根据显示的内容,它不会指向二进制文件的已加载地址,而是, 因此,除了解析外,还有没有办法检索ELF二进制文件的加载地址?(在这种情况下为0x0848000) 问题答案: 在Linux上,不返回加载ELF二进制文件的地址。而是返回具有成员的成员。因此,您需要以下内容: 但是,尽管有评论说,实际上也不是加载地址。相反

  • 问题内容: 我正在尝试加载本地JSON文件,但无法正常工作。这是我的JavaScript代码(使用jQuery): test.json文件: 什么都没有显示,Firebug告诉我这是未定义的。在Firebug中,我可以看到它是好的且有效的,但是当我复制该行时,这很奇怪: 在Firebug的控制台中,它可以正常工作,并且我可以访问数据。 有人有解决方案吗? 问题答案: 是异步的,所以您应该这样做:

  • 我正在尝试将套接字绑定到以下端口: 但它给出: 为什么会出现这个错误呢?

  • 链接地址/虚地址/物理地址/加载地址以及edata/end/text的含义 链接脚本简介 ucore kernel各个部分由组成kernel的各个.o或.a文件构成,且各个部分在内存中地址位置由ld工具根据kernel.ld链接脚本(linker script)来设定。ld工具使用命令-T指定链接脚本。链接脚本主要用于规定如何把输入文件(各个.o或.a文件)内的section放入输出文件(lab2

  • 问题内容: 我正在尝试加载本地JSON文件,但无法正常工作。这是我的JavaScript代码(使用jQuery: test.json文件: 什么都没有显示,Firebug告诉我数据未定义。在Firebug中,我可以看到它是好的且有效的,但是当我复制该行时,这很奇怪: 在Firebug的控制台中,它可以正常工作,并且我可以访问数据。 有人有解决办法吗? 问题答案: 是异步的,所以您应该这样做: