请问 endbr32 这条汇编指令是干什么的?

dummy反汇编.png
endbr32这条指令在图中的汇编代码中出现了两次。

阅读 11.4k
1 个回答

这是Intel 为 CONTROL-FLOW ENFORCEMENT TECHNOLOGY 新加的指令:

The ENDBRANCH (see Section 73 for details) is a new instruction that is used to mark valid jump target addresses of indirect calls and jumps in the program. This instruction opcode is selected to be one that is a NOP on legacy machines such that programs compiled with ENDBRANCH new instruction continue to function on old machines without the CET enforcement. On processors that support CET the ENDBRANCH is still a NOP and is primarily used as a marker instruction by the processor pipeline to detect control flow violations. The CPU implements a state machine that tracks indirect jmp and call instructions. When one of these instructions is seen, the state machine moves from IDLE to WAIT_FOR_ENDBRANCH state. In WAIT_FOR_ENDBRANCH state the next instruction in the program stream must be an ENDBRANCH. If an ENDBRANCH is not seen the processor causes a control protection exception (#CP), else the state machine moves back to IDLE state.

给技术要求相对跳转的目标地址一定是一条 endbr32 或 endbr64 指令,否则就会异常。该指令并不执行任何操作,只是用于验证目标地址是期望的跳转目标。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏