首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ARM64 - GNU汇编程序:使用NOP's填充到下一个标签

ARM64 - GNU汇编程序:使用NOP's填充到下一个标签
EN

Stack Overflow用户
提问于 2020-06-07 15:15:05
回答 1查看 309关注 0票数 1

对不起,我不知道如何正确地表达这个问题。但我将通过一个小示例来尝试它。我在GAS中搜索一个指令,将特定数量的填充指令(NOP)添加到下一个标签。以下示例是AArch64体系结构的矢量表的摘录。处理程序的每个条目应为32条指令(128字节)长度。

我的目标是:

代码语言:javascript
运行
复制
_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:

在这里,我想让GAS在对下一个标签_vec_tbl_cur_sp0_irq执行ERET指令之后,用正确数量NOP填充表。

GAS中有没有这样做的指令或宏?

EN

回答 1

Stack Overflow用户

发布于 2020-06-07 15:57:05

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

.balignwl abs-expr、abs-expr、abs-expr

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

第二个表达式(也是绝对表达式)给出了要存储在填充字节中的填充值。它(和逗号)可以省略。如果省略它,填充字节通常为零。但是,在某些系统上,如果将该部分标记为包含代码并且省略了填充值,则会使用no-op指令填充该空间。

第三个表达式也是绝对的,也是可选的。如果存在,则为此对齐指令应跳过的最大字节数。如果进行对齐需要跳过的字节数超过指定的最大值,则根本不会进行对齐。只需在所需的对齐后使用两个逗号,就可以完全省略填充值(第二个参数);如果希望在适当的时候使用no-op指令填充对齐,这会很有用。

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

引用自GAS manual

以下内容在例外情况下工作:

代码语言:javascript
运行
复制
_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

反汇编的二进制文件:

代码语言:javascript
运行
复制
$ 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

对不起,问得太快了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62242048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档