【发布时间】:2019-11-16 06:00:44
【问题描述】:
我一直在尝试理解 GCC 生成的汇编语言代码,并且经常在许多函数的开头遇到此指令,包括 _start(),但找不到任何解释其用途的指南:
31-0000000000001040 <_start>:
32: 1040: f3 0f 1e fa endbr64
33- 1044: 31 ed xor ebp,ebp
【问题讨论】:
-
你通常只会在像
_start这样的代码中找到它,它已经是机器代码形式,gcc 链接到你的可执行文件(来自crt0.o或其他) ,而不是从 C 源发出的 gcc。 -
(除非您的 GCC 配置了
-fcf-protection=branch作为默认值,或者您手动使用它。请参阅 gcc.gnu.org/onlinedocs/gcc/x86-Options.html 中的 gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html 和-mmanual-endbr)
标签: assembly x86-64 intel instructions