C++ 内联汇编如何与堆栈展开和异常处理一起工作?

问题描述 投票:0回答:1

elf 文件包含多个部分(.eh_frame、.eh_frame_shr)以存储有关如何完成堆栈展开的精确信息。这也是抛出异常的基础(.gcc_except_table)。插入内联汇编肯定会弄乱这些表。

编译器是如何处理的?它是解析回内联程序集然后更新表还是将堆栈展开(因此也是异常处理)只是在内联程序集弄乱堆栈时中断?

c++ exception gcc elf dwarf
1个回答
0
投票

插入内联汇编肯定会弄乱这些表。

是的,而且它经常确实(虽然不确定,见下文)。

编译器是如何处理的?

.

相反,由汇编程序编写器决定不修改帧寄存器(在

x86_64
上可以是 RSP 或 RBP)并且不执行任何
PUSH
POP
CALL
RET
指令,或者在内联汇编中提供正确的
.cfi
描述符(这通常很难做到)。

© www.soinside.com 2019 - 2024. All rights reserved.