对于已定义的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 filewithELF格式后,好像有两个部分是.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表格中恢复(如上所示)中定义的信息?