我想知道GCC如何实现C++程序的异常处理.我在Web上找不到一篇易于理解和不言自明的文章(尽管Visual C++有很多这样的文章).我所知道的是GCC的实现称为DWARF异常处理.
我编写了一个小的C++程序,并使用以下命令将其转换为程序集:
g ++ main.cpp -S -masm = intel -fno-dwarf2-cfi-asm
在main.cpp中和main.s文件在这里给出.任何人都可以解释main.s文件的内容,特别是部分.gcc_except_table
和.eh_frame
逐行?(我的操作系统是Ubuntu 13.04 32位.)谢谢!
main.cpp中:
void f()
{
throw 1;
}
int main()
{
int j;
try {
f();
} catch (int i) {
j = i;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
电源:
.file "main.cpp"
.intel_syntax noprefix
.text
.globl _Z1fv
.type _Z1fv, @function
_Z1fv:
.LFB0:
push ebp
.LCFI0:
mov ebp, esp
.LCFI1:
sub esp, 24
mov DWORD PTR [esp], 4
call __cxa_allocate_exception
mov …
Run Code Online (Sandbox Code Playgroud)