gpt4 book ai didi

c - 编译器会把跳转表放在函数的末尾吗?

转载 作者:太空宇宙 更新时间:2023-11-04 06:00:41 26 4
gpt4 key购买 nike

比如这是一个带有跳转表的程序集

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
...

我的问题是,像 GCC 或 ICC 这样的编译器是否可以将跳转表放在函数的末尾而不是函数的中间?

最佳答案

表格不会在函数的中间结束。如果仔细观察,您可能会注意到这一行:

.section .rdata,"dr"

它告诉汇编程序将以下数据放入名为“.rdata”的段中。

下面的 .text 告诉汇编器切换回 .text 部分。所以函数代码实际上会连续放置(在.text中),而跳转表会单独存储(在.rdata中)。

关于c - 编译器会把跳转表放在函数的末尾吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19847837/

26 4 0