对于已定义的C++
程序try
catch
,当用于g++
将其编译为汇编代码时(测试在 x86 32bit Linux, g++
4.6.3 上)
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
withELF
格式后,好像有两个部分是.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
和eh_frame
表格中恢复(如上所示)中定义的信息?