【问题标题】:ARM64 - GNU Assembler: Padding with NOP's to next labelARM64 - GNU 汇编器:用 NOP 填充到下一个标签
【发布时间】:2020-06-07 07:15:05
【问题描述】:

抱歉,我不知道如何正确地提出这个问题。但我会用一个小例子来试试。 我正在 GAS 中搜索一个指令,以将特定数量的填充指令 (NOP) 添加到下一个标签。以下示例是 AArch64 架构的向量表的摘录。处理程序的每个条目应为 32 条指令(128 字节)长。

我的目标:

_vec_tbl_cur_sp0:
_vec_tbl_cur_sp0_syn:
    mov x0, #0x0
    bl _vec_handler_syn
    eret
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
_vec_tbl_cur_sp0_irq:

我希望,在 ERET 指令到下一个标签 _vec_tbl_cur_sp0_irq 之后,GAS 用正确数量的 NOP 填充表格。

GAS 中是否有指令或宏来执行此操作?

【问题讨论】:

    标签: arm64 gnu-assembler


    【解决方案1】:

    我找到了解决方案。所需的指令是 .balgin

    .balign[wl] abs-expr, abs-expr, abs-expr

    将位置计数器(在当前小节中)填充到特定的 存储边界。第一个表达式(必须是绝对的)是 以字节为单位的对齐请求。例如 `.balign 8' 推进 位置计数器,直到它是 8 的倍数。如果位置计数器 已经是 8 的倍数,无需更改。

    第二个表达式(也是绝对的)给出的填充值为 存储在填充字节中。它(和逗号)可以省略。如果它 被省略,填充字节通常为零。然而,在一些 系统,如果该部分被标记为包含代码和填充 value 被省略,空格由 no-op 指令填充。

    第三个表达式也是绝对的,也是可选的。如果是 目前,它是应该跳过的最大字节数 这个对齐指令。如果进行对齐需要 跳过比指定最大值更多的字节,那么对齐是 根本没有做。您可以省略填充值(第二个参数) 完全通过在所需对齐后使用两个逗号来完成;这 如果您希望对齐填充无操作,这可能会很有用 适当时的说明。

    .balignw 和 .balignl 指令是 .balign 的变体 指示。 .balignw 指令将填充模式视为两个 字节字值。 .balignl 指令将填充模式视为 四字节长字值。例如,.balignw 4,0x368d 将对齐到 4的倍数。如果跳过两个字节,它们将被填充 值 0x368d(字节的确切位置取决于 处理器的字节序)。如果跳过 1 或 3 个字节,则填充值 未定义。

    引用GAS manual

    以下工作除外:

    _vec_tbl_s:
    _vec_tbl_cur_sp0:
    _vec_tbl_cur_sp0_syn:
        mov x0, #0x0
        bl _vec_handler_syn
        eret
    .balign 128
    _vec_tbl_cur_sp0_irq:
        mov x0, #0x0
        bl _vec_handler_irq
        eret
    .balign 128
    _vec_tbl_cur_sp0_fiq:
        mov x0, #0x0
        bl _vec_handler_fiq
        eret
    .balign 128
    _vec_tbl_cur_sp0_err:
        mov x0, #0x0
        bl _vec_handler_err
        eret
    .balign 128
    

    反汇编的二进制文件:

    $ aarch64-none-elf-objdump -d vector.o
    
    vector.o:     file format elf64-littleaarch64
    
    
    Disassembly of section .text:
    
    0000000000000000 <_vec_tbl_cur_sp0>:
       0:   d2800000        mov     x0, #0x0                        // #0
       4:   940001ff        bl      800 <_vec_handler_syn>
       8:   d69f03e0        eret
       c:   d503201f        nop
      10:   d503201f        nop
      14:   d503201f        nop
      18:   d503201f        nop
      1c:   d503201f        nop
      20:   d503201f        nop
      24:   d503201f        nop
      28:   d503201f        nop
      2c:   d503201f        nop
      30:   d503201f        nop
      34:   d503201f        nop
      38:   d503201f        nop
      3c:   d503201f        nop
      40:   d503201f        nop
      44:   d503201f        nop
      48:   d503201f        nop
      4c:   d503201f        nop
      50:   d503201f        nop
      54:   d503201f        nop
      58:   d503201f        nop
      5c:   d503201f        nop
      60:   d503201f        nop
      64:   d503201f        nop
      68:   d503201f        nop
      6c:   d503201f        nop
      70:   d503201f        nop
      74:   d503201f        nop
      78:   d503201f        nop
      7c:   d503201f        nop
    
    0000000000000080 <_vec_tbl_cur_sp0_irq>:
      80:   d2800000        mov     x0, #0x0                        // #0
      84:   940001e1        bl      808 <_vec_handler_irq>
      88:   d69f03e0        eret
      8c:   d503201f        nop
      90:   d503201f        nop
      94:   d503201f        nop
      98:   d503201f        nop
      9c:   d503201f        nop
      a0:   d503201f        nop
      a4:   d503201f        nop
      a8:   d503201f        nop
      ac:   d503201f        nop
      b0:   d503201f        nop
      b4:   d503201f        nop
      b8:   d503201f        nop
      bc:   d503201f        nop
      c0:   d503201f        nop
      c4:   d503201f        nop
      c8:   d503201f        nop
      cc:   d503201f        nop
      d0:   d503201f        nop
      d4:   d503201f        nop
      d8:   d503201f        nop
      dc:   d503201f        nop
      e0:   d503201f        nop
      e4:   d503201f        nop
      e8:   d503201f        nop
      ec:   d503201f        nop
      f0:   d503201f        nop
      f4:   d503201f        nop
      f8:   d503201f        nop
      fc:   d503201f        nop
    
    0000000000000100 <_vec_tbl_cur_sp0_fiq>:
     100:   d2800000        mov     x0, #0x0                        // #0
     104:   940001c3        bl      810 <_vec_handler_fiq>
     108:   d69f03e0        eret
     10c:   d503201f        nop
     110:   d503201f        nop
     114:   d503201f        nop
     118:   d503201f        nop
     11c:   d503201f        nop
     120:   d503201f        nop
     124:   d503201f        nop
     128:   d503201f        nop
     12c:   d503201f        nop
     130:   d503201f        nop
     134:   d503201f        nop
     138:   d503201f        nop
     13c:   d503201f        nop
     140:   d503201f        nop
     144:   d503201f        nop
     148:   d503201f        nop
     14c:   d503201f        nop
     150:   d503201f        nop
     154:   d503201f        nop
     158:   d503201f        nop
     15c:   d503201f        nop
     160:   d503201f        nop
     164:   d503201f        nop
     168:   d503201f        nop
     16c:   d503201f        nop
     170:   d503201f        nop
     174:   d503201f        nop
     178:   d503201f        nop
     17c:   d503201f        nop
    
    0000000000000180 <_vec_tbl_cur_sp0_err>:
     180:   d2800000        mov     x0, #0x0                        // #0
     184:   940001a5        bl      818 <_vec_handler_err>
     188:   d69f03e0        eret
     18c:   d503201f        nop
     190:   d503201f        nop
     194:   d503201f        nop
     198:   d503201f        nop
     19c:   d503201f        nop
     1a0:   d503201f        nop
     1a4:   d503201f        nop
     1a8:   d503201f        nop
     1ac:   d503201f        nop
     1b0:   d503201f        nop
     1b4:   d503201f        nop
     1b8:   d503201f        nop
     1bc:   d503201f        nop
     1c0:   d503201f        nop
     1c4:   d503201f        nop
     1c8:   d503201f        nop
     1cc:   d503201f        nop
     1d0:   d503201f        nop
     1d4:   d503201f        nop
     1d8:   d503201f        nop
     1dc:   d503201f        nop
     1e0:   d503201f        nop
     1e4:   d503201f        nop
     1e8:   d503201f        nop
     1ec:   d503201f        nop
     1f0:   d503201f        nop
     1f4:   d503201f        nop
     1f8:   d503201f        nop
     1fc:   d503201f        nop
    

    抱歉,问得太快了。

    【讨论】:

      猜你喜欢
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      • 2011-07-11
      相关资源
      最近更新 更多