在vs2005下建立vc++的win32 控制台应用程序,设置stdafx.h不必要包含,设置多字符集,设置汇编输出/FAs。代码和asm解析如下:
#include <stdio.h>
struct B
{
virtual int do_pv()=0;
virtual int do_v(){return 1;}
int do_nv(){return 2;}
};
struct D1:public B
{
int do_pv(){return 3;}
int do_nv(){return 4;}
};
struct D2:public B
{
int do_pv(){return 5;}
int do_nv(){return 6;}
};
struct DD:public D1,public D2
{
};
int main(int argc, char* argv[])
{
DD *t = new DD;
D1 *pd1 = t;
printf("DD.do_pv()=%d/n", pd1->do_pv());
printf("DD.do_nv()=%d/n", pd1->do_nv());
printf("DD.do_v()=%d/n", pd1->do_v());
D2 *pd2 = t;
printf("DD.do_pv()=%d/n", pd2->do_pv());
printf("DD.do_nv()=%d/n", pd2->do_nv());
printf("DD.do_v()=%d/n", pd2->do_v());
B *pb = dynamic_cast<B*>(t);
pb = pd1 = new D1;
printf("D1.do_pv()=%d/n", pb->do_pv());
printf("D1.do_nv()=%d/n", pb->do_nv());
printf("D1.do_v()=%d/n", pb->do_v());
printf("D1.do_nv()=%d/n", pd1->do_nv());
getchar();
return 0;
}
; COMDAT _main
_TEXT SEGMENT
tv148 = -268 ; size = 4
tv88 = -268 ; size = 4
tv69 = -268 ; size = 4
$T3839 = -260 ; size = 4
$T3844 = -248 ; size = 4
_pb$ = -44 ; size = 4
_pd2$ = -32 ; size = 4
_pd1$ = -20 ; size = 4
_t$ = -8 ; size = 4
_argc$ = 8 ; size = 4
_argv$ = 12 ; size = 4
_main PROC ; COMDAT
; 22 : {
push ebp
mov ebp, esp
sub esp, 268 ; 0000010cH
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-268]
mov ecx, 67 ; 00000043H
mov eax, -858993460 ; ccccccccH
rep stosd
; 23 : DD *t = new DD;
push 8
call ??2@YAPAXI@Z ; operator new
add esp, 4
mov DWORD PTR $T3839[ebp], eax
cmp DWORD PTR $T3839[ebp], 0
je SHORT $LN3@main
mov ecx, DWORD PTR $T3839[ebp]
call ??0DD@@QAE@XZ
mov DWORD PTR tv69[ebp], eax
jmp SHORT $LN4@main
$LN3@main:
mov DWORD PTR tv69[ebp], 0
$LN4@main:
mov eax, DWORD PTR tv69[ebp]
mov DWORD PTR _t$[ebp], eax
; 24 : D1 *pd1 = t;
mov eax, DWORD PTR _t$[ebp]
mov DWORD PTR _pd1$[ebp], eax
; 25 : printf("DD.do_pv()=%d/n", pd1->do_pv());
mov eax, DWORD PTR _pd1$[ebp]
mov edx, DWORD PTR [eax]
mov esi, esp
mov ecx, DWORD PTR _pd1$[ebp]
mov eax, DWORD PTR [edx]
call eax;函数指针集中在虚函数表中,此处在编译期就确定了跳转位置
cmp esi, esp
call __RTC_CheckEsp
mov esi, esp
push eax
push OFFSET ??_C@_0P@OEEAOFGP@DD?4do_pv?$CI?$CJ?$DN?$CFd?6?$AA@
call DWORD PTR __imp__printf
add esp, 8
cmp esi, esp
call __RTC_CheckEsp
; 26 : printf("DD.do_nv()=%d/n", pd1->do_nv());
mov ecx, DWORD PTR _pd1$[ebp]
call ?do_nv@D1@@QAEHXZ ; D1::do_nv;函数指针集中在虚函数表中,此处在编译期就确定了跳转位置
mov esi, esp
push eax
push OFFSET ??_C@_0P@IAECHMIM@DD?4do_nv?$CI?$CJ?$DN?$CFd?6?$AA@
call DWORD PTR __imp__printf
add esp, 8
cmp esi, esp
call __RTC_CheckEsp
; 27 : printf("DD.do_v()=%d/n", pd1->do_v());
mov eax, DWORD PTR _pd1$[ebp]
mov edx, DWORD PTR [eax]
mov esi, esp
mov ecx, DWORD PTR _pd1$[ebp]
mov eax, DWORD PTR [edx+4];此处虚函数表的跳转位置与前面不同,但还是编译期确定
call eax
cmp esi, esp
call __RTC_CheckEsp
mov esi, esp
push eax
push OFFSET ??_C@_0O@FKMNCKLG@DD?4do_v?$CI?$CJ?$DN?$CFd?6?$AA@
call DWORD PTR __imp__printf
add esp, 8
cmp esi, esp
call __RTC_CheckEsp
; 28 : D2 *pd2 = t;
cmp DWORD PTR _t$[ebp], 0
je SHORT $LN5@main
mov eax, DWORD PTR _t$[ebp]
add eax, 4
mov DWORD PTR tv88[ebp], eax
jmp SHORT $LN6@main
$LN5@main:
mov DWORD PTR tv88[ebp], 0
$LN6@main:
mov ecx, DWORD PTR tv88[ebp]
mov DWORD PTR _pd2$[ebp], ecx
; 29 : printf("DD.do_pv()=%d/n", pd2->do_pv());
mov eax, DWORD PTR _pd2$[ebp]
mov edx, DWORD PTR [eax]
mov esi, esp
mov ecx, DWORD PTR _pd2$[ebp]
mov eax, DWORD PTR [edx]
call eax
cmp esi, esp
call __RTC_CheckEsp
mov esi, esp
push eax
push OFFSET ??_C@_0P@OEEAOFGP@DD?4do_pv?$CI?$CJ?$DN?$CFd?6?$AA@
call DWORD PTR __imp__printf
add esp, 8
cmp esi, esp
call __RTC_CheckEsp
; 30 : printf("DD.do_nv()=%d/n", pd2->do_nv());
mov ecx, DWORD PTR _pd2$[ebp]
call ?do_nv@D2@@QAEHXZ ; D2::do_nv
mov esi, esp
push eax
push OFFSET ??_C@_0P@IAECHMIM@DD?4do_nv?$CI?$CJ?$DN?$CFd?6?$AA@
call DWORD PTR __imp__printf
add esp, 8
cmp esi, esp
call __RTC_CheckEsp
; 31 : printf("DD.do_v()=%d/n", pd2->do_v());
mov eax, DWORD PTR _pd2$[ebp]
mov edx, DWORD PTR [eax]
mov esi, esp
mov ecx, DWORD PTR _pd2$[ebp]
mov eax, DWORD PTR [edx+4]
call eax
cmp esi, esp
call __RTC_CheckEsp
mov esi, esp
push eax
push OFFSET ??_C@_0O@FKMNCKLG@DD?4do_v?$CI?$CJ?$DN?$CFd?6?$AA@
call DWORD PTR __imp__printf
add esp, 8
cmp esi, esp
call __RTC_CheckEsp
; 32 : B *pb = dynamic_cast<B*>(t);
push 0
push OFFSET ??_R0?AUB@@@8
push OFFSET ??_R0?AUDD@@@8
push 0
mov eax, DWORD PTR _t$[ebp]
push eax
call ___RTDynamicCast
add esp, 20 ; 00000014H
mov DWORD PTR _pb$[ebp], eax
; 33 : pb = pd1 = new D1;
push 4
call ??2@YAPAXI@Z ; operator new
add esp, 4
mov DWORD PTR $T3844[ebp], eax
cmp DWORD PTR $T3844[ebp], 0
je SHORT $LN7@main
mov ecx, DWORD PTR $T3844[ebp]
call ??0D1@@QAE@XZ
mov DWORD PTR tv148[ebp], eax
jmp SHORT $LN8@main
$LN7@main:
mov DWORD PTR tv148[ebp], 0
$LN8@main:
mov eax, DWORD PTR tv148[ebp]
mov DWORD PTR _pd1$[ebp], eax
mov ecx, DWORD PTR _pd1$[ebp]
mov DWORD PTR _pb$[ebp], ecx
; 34 : printf("D1.do_pv()=%d/n", pb->do_pv());
mov eax, DWORD PTR _pb$[ebp]
mov edx, DWORD PTR [eax]
mov esi, esp
mov ecx, DWORD PTR _pb$[ebp]
mov eax, DWORD PTR [edx]
call eax
cmp esi, esp
call __RTC_CheckEsp
mov esi, esp
push eax
push OFFSET ??_C@_0P@IKIMDIEH@D1?4do_pv?$CI?$CJ?$DN?$CFd?6?$AA@
call DWORD PTR __imp__printf
add esp, 8
cmp esi, esp
call __RTC_CheckEsp
; 35 : printf("D1.do_nv()=%d/n", pb->do_nv());
mov ecx, DWORD PTR _pb$[ebp]
call ?do_nv@B@@QAEHXZ ; B::do_nv
mov esi, esp
push eax
push OFFSET ??_C@_0P@OOIOKBKE@D1?4do_nv?$CI?$CJ?$DN?$CFd?6?$AA@
call DWORD PTR __imp__printf
add esp, 8
cmp esi, esp
call __RTC_CheckEsp
; 36 : printf("D1.do_v()=%d/n", pb->do_v());
mov eax, DWORD PTR _pb$[ebp]
mov edx, DWORD PTR [eax]
mov esi, esp
mov ecx, DWORD PTR _pb$[ebp]
mov eax, DWORD PTR [edx+4]
call eax
cmp esi, esp
call __RTC_CheckEsp
mov esi, esp
push eax
push OFFSET ??_C@_0O@PNBGOFCB@D1?4do_v?$CI?$CJ?$DN?$CFd?6?$AA@
call DWORD PTR __imp__printf
add esp, 8
cmp esi, esp
call __RTC_CheckEsp
; 37 : printf("D1.do_nv()=%d/n", pd1->do_nv());
mov ecx, DWORD PTR _pd1$[ebp]
call ?do_nv@D1@@QAEHXZ ; D1::do_nv
mov esi, esp
push eax
push OFFSET ??_C@_0P@OOIOKBKE@D1?4do_nv?$CI?$CJ?$DN?$CFd?6?$AA@
call DWORD PTR __imp__printf
add esp, 8
cmp esi, esp
call __RTC_CheckEsp
; 38 : getchar();
mov esi, esp
call DWORD PTR __imp__getchar
cmp esi, esp
call __RTC_CheckEsp
; 39 : return 0;
xor eax, eax
; 40 : }
pop edi
pop esi
pop ebx
add esp, 268 ; 0000010cH
cmp ebp, esp
call __RTC_CheckEsp
mov esp, ebp
pop ebp
ret 0
_main ENDP
?do_nv@B@@QAEHXZ PROC ; B::do_nv, COMDAT
?do_nv@D1@@QAEHXZ PROC ; D1::do_nv, COMDAT
?do_nv@D2@@QAEHXZ PROC ; D2::do_nv, COMDAT
PUBLIC ??_7DD@@6BD2@@@ ; DD::`vftable';虚函数表标识声明
PUBLIC ??_7DD@@6BD1@@@ ; DD::`vftable'
PUBLIC ??0D2@@QAE@XZ ; D2::D2
PUBLIC ??_R4DD@@6BD1@@@ ; DD::`RTTI Complete Object Locator';运行时类型识别相关
PUBLIC ??_R3DD@@8 ; DD::`RTTI Class Hierarchy Descriptor'
PUBLIC ??_R2DD@@8 ; DD::`RTTI Base Class Array'
PUBLIC ??_R1A@?0A@EA@DD@@8 ; DD::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC ??_R1A@?0A@EA@D1@@8 ; D1::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC ??_R0?AUD1@@@8 ; D1 `RTTI Type Descriptor'
PUBLIC ??_R3D1@@8 ; D1::`RTTI Class Hierarchy Descriptor'
PUBLIC ??_R2D1@@8 ; D1::`RTTI Base Class Array'
PUBLIC ??_R1A@?0A@EA@B@@8 ; B::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC ??_R3B@@8 ; B::`RTTI Class Hierarchy Descriptor'
PUBLIC ??_R2B@@8 ; B::`RTTI Base Class Array'
PUBLIC ??_R1A@?0A@EC@B@@8 ; B::`RTTI Base Class Descriptor at (0,-1,0,66)'
PUBLIC ??_R13?0A@EA@D2@@8 ; D2::`RTTI Base Class Descriptor at (4,-1,0,64)'
PUBLIC ??_R0?AUD2@@@8 ; D2 `RTTI Type Descriptor'
PUBLIC ??_R3D2@@8 ; D2::`RTTI Class Hierarchy Descriptor'
PUBLIC ??_R2D2@@8 ; D2::`RTTI Base Class Array'
PUBLIC ??_R1A@?0A@EA@D2@@8 ; D2::`RTTI Base Class Descriptor at (0,-1,0,64)'
PUBLIC ??_R13?0A@EC@B@@8 ; B::`RTTI Base Class Descriptor at (4,-1,0,66)'
PUBLIC ?do_pv@D1@@UAEHXZ ; D1::do_pv
PUBLIC ?do_v@B@@UAEHXZ ; B::do_v
PUBLIC ??_R4DD@@6BD2@@@ ; DD::`RTTI Complete Object Locator'
PUBLIC ?do_pv@D2@@UAEHXZ ; D2::do_pv
; COMDAT ??_R4DD@@6BD2@@@
rdata$r SEGMENT
??_R4DD@@6BD2@@@ DD 00H ; DD::`RTTI Complete Object Locator'
DD 04H
DD 00H
DD FLAT:??_R0?AUDD@@@8
DD FLAT:??_R3DD@@8
rdata$r ENDS
; COMDAT ??_R13?0A@EC@B@@8
rdata$r SEGMENT
??_R13?0A@EC@B@@8 DD FLAT:??_R0?AUB@@@8 ; B::`RTTI Base Class Descriptor at (4,-1,0,66)'
DD 00H
DD 04H
DD 0ffffffffH
DD 00H
DD 042H
DD FLAT:??_R3B@@8
rdata$r ENDS
; COMDAT ??_R1A@?0A@EA@D2@@8
rdata$r SEGMENT
??_R1A@?0A@EA@D2@@8 DD FLAT:??_R0?AUD2@@@8 ; D2::`RTTI Base Class Descriptor at (0,-1,0,64)'
DD 01H
DD 00H
DD 0ffffffffH
DD 00H
DD 040H
DD FLAT:??_R3D2@@8
rdata$r ENDS
; COMDAT ??_R2D2@@8
rdata$r SEGMENT
??_R2D2@@8 DD FLAT:??_R1A@?0A@EA@D2@@8 ; D2::`RTTI Base Class Array'
DD FLAT:??_R1A@?0A@EA@B@@8
rdata$r ENDS
; COMDAT ??_R3D2@@8
rdata$r SEGMENT
??_R3D2@@8 DD 00H ; D2::`RTTI Class Hierarchy Descriptor'
DD 00H
DD 02H
DD FLAT:??_R2D2@@8
rdata$r ENDS
; COMDAT ??_R0?AUD2@@@8
_DATA SEGMENT
??_R0?AUD2@@@8 DD FLAT:??_7type_info@@6B@ ; D2 `RTTI Type Descriptor'
DD 00H
DB '.?AUD2@@', 00H
_DATA ENDS
; COMDAT ??_R13?0A@EA@D2@@8
rdata$r SEGMENT
??_R13?0A@EA@D2@@8 DD FLAT:??_R0?AUD2@@@8 ; D2::`RTTI Base Class Descriptor at (4,-1,0,64)'
DD 01H
DD 04H
DD 0ffffffffH
DD 00H
DD 040H
DD FLAT:??_R3D2@@8
rdata$r ENDS
; COMDAT ??_R1A@?0A@EC@B@@8
rdata$r SEGMENT
??_R1A@?0A@EC@B@@8 DD FLAT:??_R0?AUB@@@8 ; B::`RTTI Base Class Descriptor at (0,-1,0,66)'
DD 00H
DD 00H
DD 0ffffffffH
DD 00H
DD 042H
DD FLAT:??_R3B@@8
rdata$r ENDS
; COMDAT ??_R2B@@8
rdata$r SEGMENT
??_R2B@@8 DD FLAT:??_R1A@?0A@EA@B@@8 ; B::`RTTI Base Class Array'
rdata$r ENDS
; COMDAT ??_R3B@@8
rdata$r SEGMENT
??_R3B@@8 DD 00H ; B::`RTTI Class Hierarchy Descriptor'
DD 00H
DD 01H
DD FLAT:??_R2B@@8
rdata$r ENDS
; COMDAT ??_R1A@?0A@EA@B@@8
rdata$r SEGMENT
??_R1A@?0A@EA@B@@8 DD FLAT:??_R0?AUB@@@8 ; B::`RTTI Base Class Descriptor at (0,-1,0,64)'
DD 00H
DD 00H
DD 0ffffffffH
DD 00H
DD 040H
DD FLAT:??_R3B@@8
rdata$r ENDS
; COMDAT ??_R2D1@@8
rdata$r SEGMENT
??_R2D1@@8 DD FLAT:??_R1A@?0A@EA@D1@@8 ; D1::`RTTI Base Class Array'
DD FLAT:??_R1A@?0A@EA@B@@8
rdata$r ENDS
; COMDAT ??_R3D1@@8
rdata$r SEGMENT
??_R3D1@@8 DD 00H ; D1::`RTTI Class Hierarchy Descriptor'
DD 00H
DD 02H
DD FLAT:??_R2D1@@8
rdata$r ENDS
; COMDAT ??_R0?AUD1@@@8
_DATA SEGMENT
??_R0?AUD1@@@8 DD FLAT:??_7type_info@@6B@ ; D1 `RTTI Type Descriptor'
DD 00H
DB '.?AUD1@@', 00H
_DATA ENDS
; COMDAT ??_R1A@?0A@EA@D1@@8
rdata$r SEGMENT
??_R1A@?0A@EA@D1@@8 DD FLAT:??_R0?AUD1@@@8 ; D1::`RTTI Base Class Descriptor at (0,-1,0,64)'
DD 01H
DD 00H
DD 0ffffffffH
DD 00H
DD 040H
DD FLAT:??_R3D1@@8
rdata$r ENDS
; COMDAT ??_R1A@?0A@EA@DD@@8
rdata$r SEGMENT
??_R1A@?0A@EA@DD@@8 DD FLAT:??_R0?AUDD@@@8 ; DD::`RTTI Base Class Descriptor at (0,-1,0,64)'
DD 04H
DD 00H
DD 0ffffffffH
DD 00H
DD 040H
DD FLAT:??_R3DD@@8
rdata$r ENDS
; COMDAT ??_R2DD@@8
rdata$r SEGMENT
??_R2DD@@8 DD FLAT:??_R1A@?0A@EA@DD@@8 ; DD::`RTTI Base Class Array'
DD FLAT:??_R1A@?0A@EA@D1@@8
DD FLAT:??_R1A@?0A@EC@B@@8
DD FLAT:??_R13?0A@EA@D2@@8
DD FLAT:??_R13?0A@EC@B@@8
rdata$r ENDS
; COMDAT ??_R3DD@@8
rdata$r SEGMENT
??_R3DD@@8 DD 00H ; DD::`RTTI Class Hierarchy Descriptor'
DD 05H
DD 05H
DD FLAT:??_R2DD@@8
rdata$r ENDS
; COMDAT ??_R4DD@@6BD1@@@
rdata$r SEGMENT
??_R4DD@@6BD1@@@ DD 00H ; DD::`RTTI Complete Object Locator'
DD 00H
DD 00H
DD FLAT:??_R0?AUDD@@@8
DD FLAT:??_R3DD@@8
rdata$r ENDS
; COMDAT ??_7DD@@6BD2@@@
CONST SEGMENT
??_7DD@@6BD2@@@ DD FLAT:??_R4DD@@6BD2@@@ ; DD::`vftable';虚函数表的结构描述
DD FLAT:?do_pv@D2@@UAEHXZ
DD FLAT:?do_v@B@@UAEHXZ
CONST ENDS
; COMDAT ??_7DD@@6BD1@@@
CONST SEGMENT
??_7DD@@6BD1@@@ DD FLAT:??_R4DD@@6BD1@@@ ; DD::`vftable'
DD FLAT:?do_pv@D1@@UAEHXZ
DD FLAT:?do_v@B@@UAEHXZ
; Function compile flags: /Odtp /RTCsu /ZI
CONST ENDS
; COMDAT ??0DD@@QAE@XZ
_TEXT SEGMENT
_this$ = -8 ; size = 4
??0DD@@QAE@XZ PROC ; DD::DD, COMDAT
; _this$ = ecx
push ebp
mov ebp, esp
sub esp, 204 ; 000000ccH
push ebx
push esi
push edi
push ecx
lea edi, DWORD PTR [ebp-204]
mov ecx, 51 ; 00000033H
mov eax, -858993460 ; ccccccccH
rep stosd
pop ecx
mov DWORD PTR _this$[ebp], ecx
mov ecx, DWORD PTR _this$[ebp]
call ??0D1@@QAE@XZ
mov ecx, DWORD PTR _this$[ebp]
add ecx, 4
call ??0D2@@QAE@XZ
mov eax, DWORD PTR _this$[ebp]
mov DWORD PTR [eax], OFFSET ??_7DD@@6BD1@@@
mov eax, DWORD PTR _this$[ebp]
mov DWORD PTR [eax+4], OFFSET ??_7DD@@6BD2@@@
mov eax, DWORD PTR _this$[ebp]
pop edi
pop esi
pop ebx
add esp, 204 ; 000000ccH
cmp ebp, esp
call __RTC_CheckEsp
mov esp, ebp
pop ebp
ret 0
??0DD@@QAE@XZ ENDP ; DD::DD
; Function compile flags: /Odtp /RTCsu /ZI
_TEXT ENDS
; COMDAT ?do_v@B@@UAEHXZ
_TEXT SEGMENT
_this$ = -8 ; size = 4
?do_v@B@@UAEHXZ PROC ; B::do_v, COMDAT
; _this$ = ecx
; 5 : virtual int do_v(){return 1;}
push ebp
mov ebp, esp
sub esp, 204 ; 000000ccH
push ebx
push esi
push edi
push ecx
lea edi, DWORD PTR [ebp-204]
mov ecx, 51 ; 00000033H
mov eax, -858993460 ; ccccccccH
rep stosd
pop ecx
mov DWORD PTR _this$[ebp], ecx
mov eax, 1
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0
?do_v@B@@UAEHXZ ENDP ; B::do_v
; Function compile flags: /Odtp /RTCsu /ZI
_TEXT ENDS
; COMDAT ?do_pv@D1@@UAEHXZ
_TEXT SEGMENT
_this$ = -8 ; size = 4
?do_pv@D1@@UAEHXZ PROC ; D1::do_pv, COMDAT
; _this$ = ecx
; 10 : int do_pv(){return 3;}
push ebp
mov ebp, esp
sub esp, 204 ; 000000ccH
push ebx
push esi
push edi
push ecx
lea edi, DWORD PTR [ebp-204]
mov ecx, 51 ; 00000033H
mov eax, -858993460 ; ccccccccH
rep stosd
pop ecx
mov DWORD PTR _this$[ebp], ecx
mov eax, 3
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0
?do_pv@D1@@UAEHXZ ENDP ; D1::do_pv
; Function compile flags: /Odtp /RTCsu /ZI
_TEXT ENDS
; COMDAT ?do_pv@D2@@UAEHXZ
_TEXT SEGMENT
_this$ = -8 ; size = 4
?do_pv@D2@@UAEHXZ PROC ; D2::do_pv, COMDAT
; _this$ = ecx
; 15 : int do_pv(){return 5;}
push ebp
mov ebp, esp
sub esp, 204 ; 000000ccH
push ebx
push esi
push edi
push ecx
lea edi, DWORD PTR [ebp-204]
mov ecx, 51 ; 00000033H
mov eax, -858993460 ; ccccccccH
rep stosd
pop ecx
mov DWORD PTR _this$[ebp], ecx
mov eax, 5
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0
?do_pv@D2@@UAEHXZ ENDP ; D2::do_pv
_TEXT ENDS
PUBLIC ??_7D1@@6B@ ; D1::`vftable'
PUBLIC ??0B@@QAE@XZ ; B::B
PUBLIC ??_R4D1@@6B@ ; D1::`RTTI Complete Object Locator'
; COMDAT ??_R4D1@@6B@
rdata$r SEGMENT
??_R4D1@@6B@ DD 00H ; D1::`RTTI Complete Object Locator'
DD 00H
DD 00H
DD FLAT:??_R0?AUD1@@@8
DD FLAT:??_R3D1@@8
rdata$r ENDS
; COMDAT ??_7D1@@6B@
CONST SEGMENT
??_7D1@@6B@ DD FLAT:??_R4D1@@6B@ ; D1::`vftable'
DD FLAT:?do_pv@D1@@UAEHXZ
DD FLAT:?do_v@B@@UAEHXZ
; Function compile flags: /Odtp /RTCsu /ZI
CONST ENDS
; COMDAT ??0D1@@QAE@XZ
_TEXT SEGMENT
_this$ = -8 ; size = 4
??0D1@@QAE@XZ PROC ; D1::D1, COMDAT
; _this$ = ecx
push ebp
mov ebp, esp
sub esp, 204 ; 000000ccH
push ebx
push esi
push edi
push ecx
lea edi, DWORD PTR [ebp-204]
mov ecx, 51 ; 00000033H
mov eax, -858993460 ; ccccccccH
rep stosd
pop ecx
mov DWORD PTR _this$[ebp], ecx
mov ecx, DWORD PTR _this$[ebp]
call ??0B@@QAE@XZ
mov eax, DWORD PTR _this$[ebp]
mov DWORD PTR [eax], OFFSET ??_7D1@@6B@
mov eax, DWORD PTR _this$[ebp]
pop edi
pop esi
pop ebx
add esp, 204 ; 000000ccH
cmp ebp, esp
call __RTC_CheckEsp
mov esp, ebp
pop ebp
ret 0
??0D1@@QAE@XZ ENDP ; D1::D1
_TEXT ENDS
PUBLIC ??_7D2@@6B@ ; D2::`vftable'
PUBLIC ??_R4D2@@6B@ ; D2::`RTTI Complete Object Locator'
; COMDAT ??_R4D2@@6B@
rdata$r SEGMENT
??_R4D2@@6B@ DD 00H ; D2::`RTTI Complete Object Locator'
DD 00H
DD 00H
DD FLAT:??_R0?AUD2@@@8
DD FLAT:??_R3D2@@8
rdata$r ENDS
; COMDAT ??_7D2@@6B@
CONST SEGMENT
??_7D2@@6B@ DD FLAT:??_R4D2@@6B@ ; D2::`vftable'
DD FLAT:?do_pv@D2@@UAEHXZ
DD FLAT:?do_v@B@@UAEHXZ
; Function compile flags: /Odtp /RTCsu /ZI
CONST ENDS
; COMDAT ??0D2@@QAE@XZ
_TEXT SEGMENT
_this$ = -8 ; size = 4
??0D2@@QAE@XZ PROC ; D2::D2, COMDAT
; _this$ = ecx
push ebp
mov ebp, esp
sub esp, 204 ; 000000ccH
push ebx
push esi
push edi
push ecx
lea edi, DWORD PTR [ebp-204]
mov ecx, 51 ; 00000033H
mov eax, -858993460 ; ccccccccH
rep stosd
pop ecx
mov DWORD PTR _this$[ebp], ecx
mov ecx, DWORD PTR _this$[ebp]
call ??0B@@QAE@XZ
mov eax, DWORD PTR _this$[ebp]
mov DWORD PTR [eax], OFFSET ??_7D2@@6B@
mov eax, DWORD PTR _this$[ebp]
pop edi
pop esi
pop ebx
add esp, 204 ; 000000ccH
cmp ebp, esp
call __RTC_CheckEsp
mov esp, ebp
pop ebp
ret 0
??0D2@@QAE@XZ ENDP ; D2::D2
_TEXT ENDS
PUBLIC ??_7B@@6B@ ; B::`vftable'
PUBLIC ??_R4B@@6B@ ; B::`RTTI Complete Object Locator'
EXTRN __purecall:PROC
; COMDAT ??_R4B@@6B@
rdata$r SEGMENT
??_R4B@@6B@ DD 00H ; B::`RTTI Complete Object Locator'
DD 00H
DD 00H
DD FLAT:??_R0?AUB@@@8
DD FLAT:??_R3B@@8
rdata$r ENDS
; COMDAT ??_7B@@6B@
CONST SEGMENT
??_7B@@6B@ DD FLAT:??_R4B@@6B@ ; B::`vftable'
DD FLAT:__purecall
DD FLAT:?do_v@B@@UAEHXZ
; Function compile flags: /Odtp /RTCsu /ZI
CONST ENDS
; COMDAT ??0B@@QAE@XZ
_TEXT SEGMENT
_this$ = -8 ; size = 4
??0B@@QAE@XZ PROC ; B::B, COMDAT
; _this$ = ecx
push ebp
mov ebp, esp
sub esp, 204 ; 000000ccH
push ebx
push esi
push edi
push ecx
lea edi, DWORD PTR [ebp-204]
mov ecx, 51 ; 00000033H
mov eax, -858993460 ; ccccccccH
rep stosd
pop ecx
mov DWORD PTR _this$[ebp], ecx
mov eax, DWORD PTR _this$[ebp]
mov DWORD PTR [eax], OFFSET ??_7B@@6B@
mov eax, DWORD PTR _this$[ebp]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0
??0B@@QAE@XZ ENDP ; B::B
_TEXT ENDS
END