【问题标题】:Linker scripts: strategies for debugging?链接器脚本:调试策略?
【发布时间】:2013-12-29 21:01:49
【问题描述】:

我正在尝试调试我在编写内核时遇到的链接器问题。

问题是我有一个变量SCAN_CODE_MAPPING 我无法使用——它似乎是空的或什么的。我可以通过更改链接程序的方式来解决此问题,但我不知道为什么。

当我使用objdump 查看生成的二进制文件时,变量的数据肯定在那里,所以只是对它的引用有问题。

Here's a gist 包含链接描述文件和两个文件之间不同的符号表部分。

让我感到困惑的是,两个符号表都有相同的符号,它们的长度都相同,而且它们似乎包含正确的数据。我能看到的唯一区别是它们的顺序不同。

到目前为止我已经尝试过

  • 检查 SCAN_CODE_MAPPING 内存位置以确保它具有我期望的数据并且没有被归零
  • 检查所有符号是否相同
  • 检查所有符号内容的长度是否相同
  • 查看.data.rel.ro.local 以确保它具有数据的地址

一个可能的线索是这个警告:

warning: uninitialized space declared in non-BSS section `.text': zeroing

我在损坏和正确的情况下都得到了。

接下来我应该尝试什么?

【问题讨论】:

  • 投票结束作为调试帮助。

标签: linker ld linker-scripts


【解决方案1】:

这里的问题原来是我正在编写一个操作系统,并且只加载了其中的 12k,而不是全部。所以链接描述文件实际上工作正常。

我用来理解二进制文件的主要工具是:

  • 纳米
  • objdump
  • 阅读

【讨论】:

    【解决方案2】:

    您可以使用“readelf”获得更多信息。

    特别是看一下程序头:

    readelf -l 程序

    您的 BSS 部分与标准部分完全不同,这可能会导致警告。这是我系统上的默认设置:

      .bss            :
      {
       *(.dynbss)
       *(.bss .bss.* .gnu.linkonce.b.*)
       *(COMMON)
       /* Align here to ensure that the .bss section occupies space up to
          _end.  Align after .bss to ensure correct alignment even if the
          .bss section disappears because there are no input sections.
          FIXME: Why do we need it? When there is no .bss section, we don't
          pad the .data section.  */
       . = ALIGN(. != 0 ? 64 / 8 : 1);
      }
    

    如果输入部分与链接器脚本中的任何内容都不匹配,链接器仍必须将其放置在某个位置。确保涵盖所有输入部分。

    请注意,部分和段之间存在差异。链接器使用段,但程序加载器查看的唯一内容是段。文本段包括文本部分,但也包括其他部分。进入同一段的部分必须相邻。所以顺序很重要。

    rodata 部分通常位于文本部分之后。它们在执行期间都是只读的,并且将在您的程序标题中显示一次,作为具有读取和执行权限的 LOAD 条目。该 LOAD 条目是文本段。

    bss 部分通常在数据部分之后。它们在执行期间都是可写的,并且会在程序头中显示一次,作为具有读写权限的 LOAD 条目。那个 LOAD 条目就是数据段。

    如果更改顺序,它会影响链接器生成程序头的方式。在执行程序之前加载程序时使用程序头而不是节头。使用自定义链接器脚本时,请务必检查程序头。

    如果您能详细说明您的实际症状是什么,那么帮助会更容易。

    【讨论】:

    • 这不是我遇到的问题(我正在编写内核,所以最终可执行文件的结构并不重要)。不过还是有用的信息。
    猜你喜欢
    • 1970-01-01
    • 2023-02-04
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多