代码之家  ›  专栏  ›  技术社区  ›  abdo Salm a l i e n w a r e

如何在链接器脚本中定义一个向上对齐到4字节边界的变量?

  •  0
  • abdo Salm a l i e n w a r e  · 技术社区  · 3 年前

    我正试图从中学习如何编写链接器脚本 this tutorial 直到我来到一个叫 Assigning values to symbols ,他们给出了这个例子:

    floating_point = 0;
    SECTIONS
    {
       .text :
             {
               *(.text)
               _etext = .;
             }
       _bdata = (. + 3) & ~ 4;
       .data : { *(.data) }
    }
    
    

    此外,他们还添加了解释:

    在前面的示例中 floating_point 将定义符号 为零。这个 _etext 符号将被定义为地址 在最后一个之后 .text 输入部分。符号 _bdata 将 定义为以下地址 文本 输出部分 向上对齐到4字节边界。

    我的问题在于他们所说的那句话:

    符号 _bdata 将 定义为以下地址 文本 输出部分 向上对齐到4字节边界。

    例如,我真的不明白,假设后面的地址 文本 1327 以十进制表示,所以 .=1327 所以 .+3 将相当于 1331 以十进制表示,二进制等于 0101 0011 0011 ~ 4 计算为 1111 1111 1011 以二进制形式

    所以 (.+3) & ~4 将:

    0101 0011 0011
    &
    1111 1111 1011
    --------------
    1111 0011 0011
    

    所以 1111 0011 0011 1331 以十进制和 1331/4 = 332.75 所以它向上对齐到4字节的边界。

    我遗漏了什么吗?或者我误解了解释吗?

    0 回复  |  直到 3 年前
    推荐文章