当其他动态库发生异常时,ABI/C++runtime 说了什么?

What ABI/C++runtime said when exception has happened in oher dynamic library?

简介:

"Binary application" 从 "dynamic library" 调用另一个函数。

现实生活中异常处理是函数ABI的一部分吗?

详细

调用约定包括如下内容:

  1. 如何在函数 CALL 之前推送参数以及将参数推送到何处
  2. 传递参数的寄存器和return代码。
  3. 被叫保存寄存器
  4. 哪些寄存器是临时的,不需要保存
  5. 如何处理一些不常见的寄存器(ST*、XMM*)

但是万一出现异常呢?

我对用 C++ 语言编写的应用程序和动态库更感兴趣 并通过相同或不同的工具链编译。

异常下我的意思是不是ALU,也不是MMU异常。它只是通过 C#/C++ 中的 "throw" 或 python 中的 "raise" 创建的程序异常。

是的,这是 C++ 的 ABI 的一部分。否则无法安全地跨越二进制文件之间的边界抛出异常。

举个例子:https://mentorembedded.github.io/cxx-abi/abi-eh.html