对于定义了C++
try
的{{1}}程序,使用catch
将其编译为汇编代码(测试在x86 32位Linux上,g++
4.6 0.3)
g++
如下所示生成名为g++ -S cppexcept.cc
的指定部分:
.gcc_except_table
在使用 .section .gcc_except_table
.align 4
.LLSDA980:
.byte 0xff
.byte 0
.uleb128 .LLSDATT980-.LLSDATTD980
.LLSDATTD980:
.byte 0x1
.uleb128 .LLSDACSE980-.LLSDACSB980
.LLSDACSB980:
.uleb128 .LEHB3-.LFB980
.uleb128 .LEHE3-.LEHB3
.uleb128 0
.uleb128 0
.uleb128 .LEHB4-.LFB980
.uleb128 .LEHE4-.LEHB4
.uleb128 .L19-.LFB980
.uleb128 0x3
.uleb128 .LEHB5-.LFB980
.uleb128 .LEHE5-.LEHB5
.uleb128 0
.uleb128 0
.uleb128 .LEHB6-.LFB980
.uleb128 .LEHE6-.LEHB6
.uleb128 .L20-.LFB980
.uleb128 0
.uleb128 .LEHB7-.LFB980
.uleb128 .LEHE7-.LEHB7
.uleb128 .L21-.LFB980
.uleb128 0
格式汇编成exe file
之后,似乎有两个与异常处理相关的部分,即ELF
和.gcc_except_table
。
但是,我使用以下命令转储这两部分的内容,比较标签'内存地址使用.eh_frame
中定义的内容,但对我来说似乎太模糊了......
.gcc_except_table
所以我的问题是:
有没有办法从objdump -s -j .gcc_except_table cppexcept
objdump -s -j .eh_frame cppexcept
文件的.gcc_except_table
和ELF
表中恢复.gcc_except_table
(如上所示)中定义的信息?< / p>