亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2433 | 回復: 3
打印 上一主題 下一主題

[C++] llvm 編譯的程序,vtable有啥不一樣么。。訪問vtable,程序core了。 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-06-10 14:55 |只看該作者 |倒序瀏覽
              
$ ls -la /usr/bin/g++
lrwxr-xr-x  1 root  wheel  12 Mar 17 15:01 /usr/bin/g++ -> llvm-g++-4.2
$ ls
data_size                        data_size.cpp                        data_size.cpp.002t.class
$ vim data_size.cpp

    public:
        void self(){
            cout<<"is Y"<<endl;
        }
};
class Z : public virtual X {
    public:
        void bself(){
            cout<<"is Z"<<endl;
        }
};
class A : public Y, public Z {};

typedef void (*pfun)();
typedef void (Y::*afun)();

int main()
{
    X *x=new X();
    Y *y=new Y();
    A *a=new A();
    Z *z=new Z();
    //y->self();
    A b;

    pfun f;
    long long *vtable=(long long*)&b;
    f=(pfun)(*vtable);
    f();
    //afun af;
    //af = Y::self;
    //af();
    //-fdump-class-hierarchy
    cout<<"sizeof X:"<<sizeof(class X)<<":"<<((void***)x)[0] <<endl;
    cout<<"sizeof Y:"<<sizeof(class Y)<<":"<<((void***)y)[0]<<endl;
    cout<<"sizeof Z:"<<sizeof(class Z)<<":"<<((void***)z)[0]<<endl;
    cout<<"sizeof A:"<<sizeof(class A)<<":"<<((void***)a)[0][2]<<":"<<((void***)a)[0][3]<<endl;
    //f = &a->self;
    //f();
    //f = (pfun)*((int*)*(int*)(&b));
    //f();
    void ***p = (void***)y;
    f = (pfun)(p[0][1]);
    f();
    f = (pfun)(p[0][2]);
    f();
    f = (pfun)(p[0][0]);
    f();
    f = (pfun)(p[1][1]);
    f();
}

論壇徽章:
0
2 [報告]
發(fā)表于 2013-06-10 14:57 |只看該作者


Class Z
   size=8 align=8
   base size=8 base align=8
Z (0x101d4bd20) 0 nearly-empty
    vptridx=0u vptr=((& Z::_ZTV1Z) + 24u)
  X (0x101d4bd90) 0 empty virtual
      vbaseoffset=-0x00000000000000018

Vtable for A
A::_ZTV1A: 6u entries
0     0u
8     (int (*)(...))0
16    (int (*)(...))(& _ZTI1A)
24    -8u
32    (int (*)(...))-0x00000000000000008
40    (int (*)(...))(& _ZTI1A)

Construction vtable for Y (0x101d4bee0 instance) in A
A::_ZTC1A0_1Y: 3u entries
0     0u
8     (int (*)(...))0
16    (int (*)(...))(& _ZTI1Y)

Construction vtable for Z (0x101d4b380 instance) in A
A::_ZTC1A8_1Z: 3u entries
0     -8u
8     (int (*)(...))0
16    (int (*)(...))(& _ZTI1Z)

VTT for A
A::_ZTT1A: 4u entries
0     ((& A::_ZTV1A) + 24u)
8     ((& A::_ZTC1A0_1Y) + 24u)
16    ((& A::_ZTC1A8_1Z) + 24u)
24    ((& A::_ZTV1A) + 48u)

Class A
   size=16 align=8
   base size=16 base align=8
A (0x101d89300) 0
    vptridx=0u vptr=((& A::_ZTV1A) + 24u)
  Y (0x101d4bee0) 0 nearly-empty
      primary-for A (0x101d89300)
      subvttidx=8u
    X (0x101d4bf50) 0 empty virtual
        vbaseoffset=-0x00000000000000018
  Z (0x101d4b380) 8 nearly-empty
      subvttidx=16u vptridx=24u vptr=((& A::_ZTV1A) + 48u)
    X (0x101d4bf50) alternative-path

g++ -o data_size data_size.cpp  -Wall -fdump-class-hierarchy 生成的

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
3 [報告]
發(fā)表于 2013-06-10 15:05 |只看該作者
寫程序要走正道,
優(yōu)秀的程序員,大概都有幾年走火入魔的時候

論壇徽章:
1
金牛座
日期:2013-10-10 22:06:28
4 [報告]
發(fā)表于 2013-06-10 15:33 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP