use*_*173 0 c compiler-construction x86 assembly
例如,这是一个带跳转表的程序集
movl $5, -4(%ebp)
cmpl $10, -4(%ebp)
ja L13
movl -4(%ebp), %eax
sall $2, %eax
movl L14(%eax), %eax
jmp *%eax
.section .rdata,"dr"
.align 4
L14:
.long L13
.long L3
.long L4
.long L5
.long L6
.long L7
.long L8
.long L9
.long L10
.long L11
.long L12
.text
L3:
movl $LC0, (%esp)
call _printf
jmp L2
...
Run Code Online (Sandbox Code Playgroud)
我的问题是,像GCC或ICC这样的编译器是否可以将跳转表放在函数的末尾而不是函数的中间?
该表不会在函数中间结束.如果你仔细看,你可能会注意到这一行:
.section .rdata,"dr"
Run Code Online (Sandbox Code Playgroud)
它告诉汇编器将以下数据放入名为".rdata"的部分.
以下.text告诉汇编程序切换回.text部分.因此,功能代码实际上将被连续放置(in .text),并且跳转表将被单独存储(in .rdata).
| 归档时间: |
|
| 查看次数: |
234 次 |
| 最近记录: |