- 论坛徽章:
- 3
|
回复 12# OwnWaterloo
呃. 那个确实。
这个回复算是解决了我的疑惑~ 话说,cl的那些编译选项我就没见过, 或者说我根本没怎么用过cl...
gcc的那些编译选项也不知道神马意思. 看来, 花时间认真学习下gcc和各种binary tools的manual确实是必要的...
我觉得g++生成的汇编码比较难懂,不是因为AT&T语法格式的问题, 比如cc编译C代码生成的汇编码, 还是比较容易明白的, 至少栈帧结构神马的很容易看出来...
可是因为C++引入异常机制之后,g++需要在函数栈帧结构上加入支持异常机制的相关信息吧,相对来说比较复杂. 我对gas(as)还不够熟悉吧...
比如,我写个只反映一层函数调用的代码,simple.c:
gcc -S simple.c -o simpleC.asm:
嗯,那个栈帧结构还是很清楚滴...
g++ -S simple.c -o simpleCPP.asm:
_Z3addii, 我知道你就是add的马甲,别装了.
.LFB0是神马? .LFE0是神马?
.LFB1是神马? .LFE1是神马?
毫无疑问, .LFB和.LFE应该是g++为支持异常机制在基本栈帧结构上增加的料. 问题是我对C++的异常处理了解甚少,所以不了解这些加的料都怎么弄的,以及什么意思...
扯一下... 关于cfront. cfront是把C++代码编译处理成C代码的编译器, C代码再由C编译器转换为汇编码. 那这种 C++ source code -> cfront -> C compiler -> ...的处理方式,毫无疑问是无法在汇编码级别往栈帧上加料的(因为C语言的函数栈帧结构,编译出来就那样子),所以, cfront是无法实现异常处理机制的,没法stack unwind... 或者说... 使用cfront这种方式非常难以实现异常处理机制(要做到平台体系无关是吧, 不能写个setjump之类的库就算是吧...)... 不知这个扯得对否?...
OwnWaterloo兄, 这个...神马时候讲下g++的异常处理呢(呃C++的异常处理才对吧...)? 那个.LFB和.LFE若有研究, 望告知, 求解惑~ |
|