C++ 如何从.gcc\u表和.eh\u句柄部分恢复异常信息?
对于定义了C++ 如何从.gcc\u表和.eh\u句柄部分恢复异常信息?,c++,exception,assembly,x86,elf,C++,Exception,Assembly,X86,Elf,对于定义了trycatch的C++程序,使用g++将其编译成汇编代码时(测试在x86 32位Linux上,g++4.6.3) 生成一个名为.gcc\u(表除外)的指定部分,如下所示: .section .gcc_except_table .align 4 .LLSDA980: .byte 0xff .byte 0 .uleb128 .LLSDATT980-.LLSDATTD980 .LLSDAT
try
catch
的C++
程序,使用g++
将其编译成汇编代码时(测试在x86 32位Linux上,g++
4.6.3)
生成一个名为.gcc\u(表除外)
的指定部分,如下所示:
.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
用ELF
格式编译成exe文件
后,似乎有两部分与异常处理相关,分别是.gcc\u except\u table
和.eh\u frame
但是,我使用以下命令转储了这两部分的内容,将标签的内存地址与.gcc\u except\u table
中定义的内容进行比较,但对我来说太模糊了
objdump -s -j .gcc_except_table cppexcept
objdump -s -j .eh_frame cppexcept
所以我的问题是:
是否有任何方法可以从RE.SE上的ELF
文件的.gcc\u except\u table
和eh\u frame
表格中恢复.gcc\u except\u table
(如上所示)中定义的信息?。请不要横穿柱子,这是很危险的。
objdump -s -j .gcc_except_table cppexcept
objdump -s -j .eh_frame cppexcept