反汇编 之 virtual 普通函数

#include <iostream>
#include <stdio.h>

class Base
{
    public:
        void function_1()
        {
            printf("function_1...\n");
        }

        virtual void function_2()
        {
            printf("function_2...\n");
        }
};

int main(int argc, char ** argv)
{
    Base base;

    base.function_1();
    base.function_2();
}

#if 0

对象调用时,虚函数与普通函数没有区别。

int main(int argc, char ** argv)
{
 8048640:    55                       push   %ebp
 8048641:    89 e5                    mov    %esp,%ebp
 8048643:    83 e4 f0                 and    $0xfffffff0,%esp
 8048646:    83 ec 20                 sub    $0x20,%esp
    Base base;
 8048649:    8d 44 24 1c              lea    0x1c(%esp),%eax
 804864d:    89 04 24                 mov    %eax,(%esp)
 8048650:    e8 a3 00 00 00           call   80486f8 <_ZN4BaseC1Ev>

    base.function_1();
 8048655:    8d 44 24 1c              lea    0x1c(%esp),%eax        # this 指针,此乃函数放类或结构体里面和外面唯一的区别。放里面有多传this指针。
 8048659:    89 04 24                 mov    %eax,(%esp)
 804865c:    e8 6f 00 00 00           call   80486d0 <_ZN4Base10function_1Ev>        # E8 call 是直接调用
    base.function_2();
 8048661:    8d 44 24 1c              lea    0x1c(%esp),%eax
 8048665:    89 04 24                 mov    %eax,(%esp)
 8048668:    e8 77 00 00 00           call   80486e4 <_ZN4Base10function_2Ev>        # E8 call 是直接调用
}
 804866d:    b8 00 00 00 00           mov    $0x0,%eax
 8048672:    c9                       leave  
 8048673:    c3                       ret


#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值