对不起,我不知道如何正确地表达这个问题。但我将通过一个小示例来尝试它。我在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:在这里,我想让GAS在对下一个标签_vec_tbl_cur_sp0_irq执行ERET指令之后,用正确数量NOP填充表。
GAS中有没有这样做的指令或宏?
发布于 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
以下内容在例外情况下工作:
_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对不起,问得太快了。
https://stackoverflow.com/questions/62242048
复制相似问题