cpp反汇编之多继承

源码

#include<stdio.h>

class CSoft
{
public:
	CSoft()
	{
		m_nColor = 2;
	}
	virtual ~CSoft()
	{
		printf("virtual ~CSoft()\n");
	}
	virtual int GetColor()
	{
		return m_nColor;
	}
	virtual int SitDown()
	{
		return printf("Sit down and rest your legs!\n");
	}
protected:
	int m_nColor;
};
class CBed
{
public:
	CBed()
	{
		m_nLength = 4;
		m_nWidth = 5;
	}
	virtual ~CBed()
	{
		printf("virtual ~CBed()\n");
	}
	virtual int GetArea()
	{
		return m_nLength * m_nWidth;
	}
	virtual int Sleep()
	{
		return printf("go to sleep!\n");
	}
protected:
	int m_nLength;
	int m_nWidth;
};
class CSoftBed : public CSoft , public CBed
{
public:
	CSoftBed()
	{
		m_nHeight = 6;
	}
	virtual ~CSoftBed()
	{
		printf("virtual ~CSoftBed()\n");
	}
	virtual SitDown()
	{
		return printf("sit down on the soft bed\n");
	}
	virtual int Sleep()
	{
		return printf("go to sleep on the sofa bed\n");
	}
	virtual int GetHeight()
	{
		return m_nHeight;
	}
protected:
	int m_nHeight;
};	
int main5()
{
	CSoftBed softBed;
	CSoft *pSoft = &softBed;
	CBed *pBed = &softBed;
	pSoft->SitDown();
	pBed->Sleep();
	printf("Color = %d\n" , pSoft->GetColor());
	printf("area = %d\n" , pBed->GetArea());
	return 0;
}

 
反汇编分析

1:    #include<stdio.h>
2:
3:    class CSoft
4:    {
5:    public:
6:        CSoft()
00402020   push        ebp
00402021   mov         ebp,esp
00402023   sub         esp,44h
00402026   push        ebx
00402027   push        esi
00402028   push        edi
00402029   push        ecx
0040202A   lea         edi,[ebp-44h]
0040202D   mov         ecx,11h
00402032   mov         eax,0CCCCCCCCh
00402037   rep stos    dword ptr [edi]
00402039   pop         ecx
0040203A   mov         dword ptr [ebp-4],ecx
0040203D   mov         eax,dword ptr [ebp-4]
00402040   mov         dword ptr [eax],offset CSoft::`vftable' (0042610c)
7:        {
8:            m_nColor = 2;
00402046   mov         ecx,dword ptr [ebp-4]
00402049   mov         dword ptr [ecx+4],2
9:        }
00402050   mov         eax,dword ptr [ebp-4]
00402053   pop         edi
00402054   pop         esi
00402055   pop         ebx
00402056   mov         esp,ebp
00402058   pop         ebp
00402059   ret

10:       virtual ~CSoft()
11:       {
00402070   push        ebp
00402071   mov         ebp,esp
00402073   sub         esp,44h
00402076   push        ebx
00402077   push        esi
00402078   push        edi
00402079   push        ecx
0040207A   lea         edi,[ebp-44h]
0040207D   mov         ecx,11h
00402082   mov         eax,0CCCCCCCCh
00402087   rep stos    dword ptr [edi]
00402089   pop         ecx
0040208A   mov         dword ptr [ebp-4],ecx
0040208D   mov         eax,dword ptr [ebp-4]
00402090   mov         dword ptr [eax],offset CSoft::`vftable' (0042610c)
12:           printf("virtual ~CSoft()\n");
00402096   push        offset string "virtual ~CSoft()\n" (00426118)
0040209B   call        printf (00402ad0)
004020A0   add         esp,4
13:       }
004020A3   pop         edi
004020A4   pop         esi
004020A5   pop         ebx
004020A6   add         esp,44h
004020A9   cmp         ebp,esp
004020AB   call        __chkesp (004029a0)
004020B0   mov         esp,ebp
004020B2   pop         ebp
004020B3   ret

14:       virtual int GetColor()
15:       {
004020D0   push        ebp
004020D1   mov         ebp,esp
004020D3   sub         esp,44h
004020D6   push        ebx
004020D7   push        esi
004020D8   push        edi
004020D9   push        ecx
004020DA   lea         edi,[ebp-44h]
004020DD   mov         ecx,11h
004020E2   mov         eax,0CCCCCCCCh
004020E7   rep stos    dword ptr [edi]
004020E9   pop         ecx
004020EA   mov         dword ptr [ebp-4],ecx
16:           return m_nColor;
004020ED   mov         eax,dword ptr [ebp-4]
004020F0   mov         eax,dword ptr [eax+4]
17:       }
004020F3   pop         edi
004020F4   pop         esi
004020F5   pop         ebx
004020F6   mov         esp,ebp
004020F8   pop         ebp
004020F9   ret
18:       virtual int SitDown()
19:       {
00402110   push        ebp
00402111   mov         ebp,esp
00402113   sub         esp,44h
00402116   push        ebx
00402117   push        esi
00402118   push        edi
00402119   push        ecx
0040211A   lea         edi,[ebp-44h]
0040211D   mov         ecx,11h
00402122   mov         eax,0CCCCCCCCh
00402127   rep stos    dword ptr [edi]
00402129   pop         ecx
0040212A   mov         dword ptr [ebp-4],ecx
20:           return printf("Sit down and rest your legs!\n");
0040212D   push        offset string "Sit down and rest your legs!\n" (0042612c)
00402132   call        printf (00402ad0)
00402137   add         esp,4
21:       }
0040213A   pop         edi
0040213B   pop         esi
0040213C   pop         ebx
0040213D   add         esp,44h
00402140   cmp         ebp,esp
00402142   call        __chkesp (004029a0)
00402147   mov         esp,ebp
00402149   pop         ebp
0040214A   ret

22:   protected:
23:       int m_nColor;
24:   };
25:   class CBed
26:   {
27:   public:
28:       CBed()
004021D0   push        ebp
004021D1   mov         ebp,esp
004021D3   sub         esp,44h
004021D6   push        ebx
004021D7   push        esi
004021D8   push        edi
004021D9   push        ecx
004021DA   lea         edi,[ebp-44h]
004021DD   mov         ecx,11h
004021E2   mov         eax,0CCCCCCCCh
004021E7   rep stos    dword ptr [edi]
004021E9   pop         ecx
004021EA   mov         dword ptr [ebp-4],ecx
004021ED   mov         eax,dword ptr [ebp-4]
004021F0   mov         dword ptr [eax],offset CBed::`vftable' (00426150)
29:       {
30:           m_nLength = 4;
004021F6   mov         ecx,dword ptr [ebp-4]
004021F9   mov         dword ptr [ecx+4],4
31:           m_nWidth = 5;
00402200   mov         edx,dword ptr [ebp-4]
00402203   mov         dword ptr [edx+8],5
32:       }
0040220A   mov         eax,dword ptr [ebp-4]
0040220D   pop         edi
0040220E   pop         esi
0040220F   pop         ebx
00402210   mov         esp,ebp
00402212   pop         ebp
00402213   ret

33:       virtual ~CBed()
34:       {
00402330   push        ebp
00402331   mov         ebp,esp
00402333   sub         esp,44h
00402336   push        ebx
00402337   push        esi
00402338   push        edi
00402339   push        ecx
0040233A   lea         edi,[ebp-44h]
0040233D   mov         ecx,11h
00402342   mov         eax,0CCCCCCCCh
00402347   rep stos    dword ptr [edi]
00402349   pop         ecx
0040234A   mov         dword ptr [ebp-4],ecx
0040234D   mov         eax,dword ptr [ebp-4]
00402350   mov         dword ptr [eax],offset CBed::`vftable' (00426150)
35:           printf("virtual ~CBed()\n");
00402356   push        offset string "virtual ~CBed()\n" (00426180)
0040235B   call        printf (00402ad0)
00402360   add         esp,4
36:       }
00402363   pop         edi
00402364   pop         esi
00402365   pop         ebx
00402366   add         esp,44h
00402369   cmp         ebp,esp
0040236B   call        __chkesp (004029a0)
00402370   mov         esp,ebp
00402372   pop         ebp
00402373   ret

37:       virtual int GetArea()
38:       {
00402230   push        ebp
00402231   mov         ebp,esp
00402233   sub         esp,44h
00402236   push        ebx
00402237   push        esi
00402238   push        edi
00402239   push        ecx
0040223A   lea         edi,[ebp-44h]
0040223D   mov         ecx,11h
00402242   mov         eax,0CCCCCCCCh
00402247   rep stos    dword ptr [edi]
00402249   pop         ecx
0040224A   mov         dword ptr [ebp-4],ecx
39:           return m_nLength * m_nWidth;
0040224D   mov         eax,dword ptr [ebp-4]
00402250   mov         ecx,dword ptr [ebp-4]
00402253   mov         eax,dword ptr [eax+4]
00402256   imul        eax,dword ptr [ecx+8]
40:       }
0040225A   pop         edi
0040225B   pop         esi
0040225C   pop         ebx
0040225D   mov         esp,ebp
0040225F   pop         ebp
00402260   ret

45:   protected:
46:       int m_nLength;
47:       int m_nWidth;
48:   };
49:   class CSoftBed : public CSoft , public CBed
50:   {
51:   public:
52:       CSoftBed()
00401F60   push        ebp
00401F61   mov         ebp,esp
00401F63   push        0FFh
00401F65   push        offset __ehhandler$??0CSoftBed@@QAE@XZ (00414839)
00401F6A   mov         eax,fs:[00000000]
00401F70   push        eax
00401F71   mov         dword ptr fs:[0],esp
00401F78   sub         esp,44h
00401F7B   push        ebx
00401F7C   push        esi
00401F7D   push        edi
00401F7E   push        ecx
00401F7F   lea         edi,[ebp-50h]
00401F82   mov         ecx,11h
00401F87   mov         eax,0CCCCCCCCh
00401F8C   rep stos    dword ptr [edi]
00401F8E   pop         ecx
00401F8F   mov         dword ptr [ebp-10h],ecx
00401F92   mov         ecx,dword ptr [ebp-10h]
00401F95   call        @ILT+70(CSoft::CSoft) (0040104b)
00401F9A   mov         dword ptr [ebp-4],0
00401FA1   mov         ecx,dword ptr [ebp-10h]
00401FA4   add         ecx,8
00401FA7   call        @ILT+235(CBed::CBed) (004010f0)
00401FAC   mov         eax,dword ptr [ebp-10h]
00401FAF   mov         dword ptr [eax],offset CSoftBed::`vftable' (004260f4)
00401FB5   mov         ecx,dword ptr [ebp-10h]
00401FB8   mov         dword ptr [ecx+8],offset CSoftBed::`vftable' (004260e4)
53:       {
54:           m_nHeight = 6;
00401FBF   mov         edx,dword ptr [ebp-10h]
00401FC2   mov         dword ptr [edx+14h],6
55:       }
00401FC9   mov         dword ptr [ebp-4],0FFFFFFFFh
00401FD0   mov         eax,dword ptr [ebp-10h]
00401FD3   mov         ecx,dword ptr [ebp-0Ch]
00401FD6   mov         dword ptr fs:[0],ecx
00401FDD   pop         edi
00401FDE   pop         esi
00401FDF   pop         ebx
00401FE0   add         esp,50h
00401FE3   cmp         ebp,esp
00401FE5   call        __chkesp (004029a0)
00401FEA   mov         esp,ebp
00401FEC   pop         ebp
00401FED   ret

56:       virtual ~CSoftBed()
57:       {
00402390   push        ebp
00402391   mov         ebp,esp
00402393   push        0FFh
00402395   push        offset __ehhandler$??1CSoftBed@@UAE@XZ (00414859)
0040239A   mov         eax,fs:[00000000]
004023A0   push        eax
004023A1   mov         dword ptr fs:[0],esp
004023A8   sub         esp,48h
004023AB   push        ebx
004023AC   push        esi
004023AD   push        edi
004023AE   push        ecx
004023AF   lea         edi,[ebp-54h]
004023B2   mov         ecx,12h
004023B7   mov         eax,0CCCCCCCCh
004023BC   rep stos    dword ptr [edi]
004023BE   pop         ecx
004023BF   mov         dword ptr [ebp-10h],ecx
004023C2   mov         eax,dword ptr [ebp-10h]
004023C5   mov         dword ptr [eax],offset CSoftBed::`vftable' (004260f4)
004023CB   mov         ecx,dword ptr [ebp-10h]
004023CE   mov         dword ptr [ecx+8],offset CSoftBed::`vftable' (004260e4)
004023D5   mov         dword ptr [ebp-4],0
58:           printf("virtual ~CSoftBed()\n");
004023DC   push        offset string "virtual ~CSoftBed()\n" (004261a0)
004023E1   call        printf (00402ad0)
004023E6   add         esp,4
59:       }
004023E9   cmp         dword ptr [ebp-10h],0
004023ED   je          CSoftBed::~CSoftBed+6Ah (004023fa)
004023EF   mov         edx,dword ptr [ebp-10h]
004023F2   add         edx,8
004023F5   mov         dword ptr [ebp-14h],edx
004023F8   jmp         CSoftBed::~CSoftBed+71h (00402401)
004023FA   mov         dword ptr [ebp-14h],0
00402401   mov         ecx,dword ptr [ebp-14h]
00402404   call        @ILT+195(CBed::~CBed) (004010c8)
00402409   mov         dword ptr [ebp-4],0FFFFFFFFh
00402410   mov         ecx,dword ptr [ebp-10h]
00402413   call        @ILT+115(CSoft::~CSoft) (00401078)
00402418   mov         ecx,dword ptr [ebp-0Ch]
0040241B   mov         dword ptr fs:[0],ecx
00402422   pop         edi
00402423   pop         esi
00402424   pop         ebx
00402425   add         esp,54h
00402428   cmp         ebp,esp
0040242A   call        __chkesp (004029a0)
0040242F   mov         esp,ebp
00402431   pop         ebp
00402432   ret

60:       virtual SitDown()
61:       {
00402460   push        ebp
00402461   mov         ebp,esp
00402463   sub         esp,44h
00402466   push        ebx
00402467   push        esi
00402468   push        edi
00402469   push        ecx
0040246A   lea         edi,[ebp-44h]
0040246D   mov         ecx,11h
00402472   mov         eax,0CCCCCCCCh
00402477   rep stos    dword ptr [edi]
00402479   pop         ecx
0040247A   mov         dword ptr [ebp-4],ecx
62:           return printf("sit down on the soft bed\n");
0040247D   push        offset string "sit down on the soft bed\n" (004271d0)
00402482   call        printf (00402ad0)
00402487   add         esp,4
63:       }
0040248A   pop         edi
0040248B   pop         esi
0040248C   pop         ebx
0040248D   add         esp,44h
00402490   cmp         ebp,esp
00402492   call        __chkesp (004029a0)
00402497   mov         esp,ebp
00402499   pop         ebp
0040249A   ret
64:       virtual int Sleep()
65:       {
004024B0   push        ebp
004024B1   mov         ebp,esp
004024B3   sub         esp,44h
004024B6   push        ebx
004024B7   push        esi
004024B8   push        edi
004024B9   push        ecx
004024BA   lea         edi,[ebp-44h]
004024BD   mov         ecx,11h
004024C2   mov         eax,0CCCCCCCCh
004024C7   rep stos    dword ptr [edi]
004024C9   pop         ecx
004024CA   mov         dword ptr [ebp-4],ecx
66:           return printf("go to sleep on the sofa bed\n");
004024CD   push        offset string "go to sleep on the sofa bed\n" (004271ec)
004024D2   call        printf (00402ad0)
004024D7   add         esp,4
67:       }
004024DA   pop         edi
004024DB   pop         esi
004024DC   pop         ebx
004024DD   add         esp,44h
004024E0   cmp         ebp,esp
004024E2   call        __chkesp (004029a0)
004024E7   mov         esp,ebp
004024E9   pop         ebp
004024EA   ret

68:       virtual int GetHeight()
69:       {
00402500   push        ebp
00402501   mov         ebp,esp
00402503   sub         esp,44h
00402506   push        ebx
00402507   push        esi
00402508   push        edi
00402509   push        ecx
0040250A   lea         edi,[ebp-44h]
0040250D   mov         ecx,11h
00402512   mov         eax,0CCCCCCCCh
00402517   rep stos    dword ptr [edi]
00402519   pop         ecx
0040251A   mov         dword ptr [ebp-4],ecx
70:           return m_nHeight;
0040251D   mov         eax,dword ptr [ebp-4]
00402520   mov         eax,dword ptr [eax+14h]
71:       }
00402523   pop         edi
00402524   pop         esi
00402525   pop         ebx
00402526   mov         esp,ebp
00402528   pop         ebp
00402529   ret

72:   protected:
73:       int m_nHeight;
74:   };
75:   int main()
76:   {
00410090   push        ebp
00410091   mov         ebp,esp
00410093   push        0FFh
00410095   push        offset __ehhandler$_main (00414819)
0041009A   mov         eax,fs:[00000000]
004100A0   push        eax
004100A1   mov         dword ptr fs:[0],esp
004100A8   sub         esp,68h
004100AB   push        ebx
004100AC   push        esi
004100AD   push        edi
004100AE   lea         edi,[ebp-74h]
004100B1   mov         ecx,1Ah
004100B6   mov         eax,0CCCCCCCCh
004100BB   rep stos    dword ptr [edi]
77:       CSoftBed softBed;
004100BD   lea         ecx,[ebp-24h]		 
004100C0   call        @ILT+100(CSoftBed::CSoftBed) (00401069)
004100C5   mov         dword ptr [ebp-4],0
78:       CSoft *pSoft = &softBed;
004100CC   lea         eax,[ebp-24h]		EAX = 0018FF24
004100CF   mov         dword ptr [ebp-28h],eax
79:       CBed *pBed = &softBed;
004100D2   lea         ecx,[ebp-24h]
004100D5   test        ecx,ecx
004100D7   je          main+51h (004100e1)
004100D9   lea         edx,[ebp-1Ch]		EDX = 0018FF2C继承的CBed对象部分
004100DC   mov         dword ptr [ebp-34h],edx
004100DF   jmp         main+58h (004100e8)
004100E1   mov         dword ptr [ebp-34h],0
004100E8   mov         eax,dword ptr [ebp-34h]
004100EB   mov         dword ptr [ebp-2Ch],eax
80:       pSoft->SitDown();
004100EE   mov         ecx,dword ptr [ebp-28h]
004100F1   mov         edx,dword ptr [ecx]
004100F3   mov         esi,esp
004100F5   mov         ecx,dword ptr [ebp-28h]
004100F8   call        dword ptr [edx+8]
004100FB   cmp         esi,esp
004100FD   call        __chkesp (004029a0)
81:       pBed->Sleep();
00410102   mov         eax,dword ptr [ebp-2Ch]
00410105   mov         edx,dword ptr [eax]	EDX = 004260E4
00410107   mov         esi,esp
00410109   mov         ecx,dword ptr [ebp-2Ch]
0041010C   call        dword ptr [edx+8]
0041010F   cmp         esi,esp
00410111   call        __chkesp (004029a0)
82:       printf("Color = %d\n" , pSoft->GetColor());
00410116   mov         eax,dword ptr [ebp-28h]		EAX = 0018FF24
00410119   mov         edx,dword ptr [eax]		EDX = 004260F4
0041011B   mov         esi,esp
0041011D   mov         ecx,dword ptr [ebp-28h]		CSoft部分首地址 ECX = 0018FF24
00410120   call        dword ptr [edx+4]	edx虚函数表首地址
00410123   cmp         esi,esp
00410125   call        __chkesp (004029a0)
0041012A   push        eax
0041012B   push        offset string "Color = %d\n" (004260d0)
00410130   call        printf (00402ad0)
00410135   add         esp,8
83:       printf("area = %d\n" , pBed->GetArea());
00410138   mov         eax,dword ptr [ebp-2Ch]
0041013B   mov         edx,dword ptr [eax]
0041013D   mov         esi,esp
0041013F   mov         ecx,dword ptr [ebp-2Ch]
00410142   call        dword ptr [edx+4]
00410145   cmp         esi,esp
00410147   call        __chkesp (004029a0)
0041014C   push        eax
0041014D   push        offset string "area = %d\n" (004260c0)
00410152   call        printf (00402ad0)
00410157   add         esp,8
84:       return 0;
0041015A   mov         dword ptr [ebp-30h],0
00410161   mov         dword ptr [ebp-4],0FFFFFFFFh
00410168   lea         ecx,[ebp-24h]
0041016B   call        @ILT+60(CSoftBed::~CSoftBed) (00401041)
00410170   mov         eax,dword ptr [ebp-30h]
85:   }
00410173   mov         ecx,dword ptr [ebp-0Ch]
00410176   mov         dword ptr fs:[0],ecx
0041017D   pop         edi
0041017E   pop         esi
0041017F   pop         ebx
00410180   add         esp,74h
00410183   cmp         ebp,esp
00410185   call        __chkesp (004029a0)
0041018A   mov         esp,ebp
0041018C   pop         ebp
0041018D   ret

0018FF0E  CC CC CC CC CC CC 2C FF 18 00 CC  烫烫烫,....
0018FF19  CC CC CC 2C FF 18 00 24 FF 18 00  烫.,...$...
0018FF24  F4 60 42 00 02 00 00 00 E4 60 42  鬬B.....鋊B
0018FF2F  00 04 00 00 00 05 00 00 00 06 00  ...........
0018FF3A  00 00 78 FF 18 00 19 48 41 00 00  ..x....HA..
0018FF45  00 00 00 88 FF 18 00 C9 2C 40 00  ........,@.
0018FF50  01 00 00 00 B8 19 3E 00 30 1A 3E  ......>.0.>

@ILT+100(??0CSoftBed@@QAE@XZ):
00401069   jmp         CSoftBed::CSoftBed (00401f60)
@ILT+105(?main4@@YAHXZ):
0040106E   jmp         main4 (00401630)
@ILT+110(??1CGerman@@UAE@XZ):
00401073   jmp         CGerman::~CGerman (00401d40)
@ILT+115(??1CSoft@@UAE@XZ):
00401078   jmp         CSoft::~CSoft (00402070)
@ILT+120(??_ECGerman@@UAEPAXI@Z):
0040107D   jmp         CGerman::`scalar deleting destructor' (00401e20)
@ILT+125(??1CDerive@@QAE@XZ):
00401082   jmp         CDerive::~CDerive (00401480)
@ILT+130(??_ECSoftBed@@UAEPAXI@Z):
00401087   jmp         CSoftBed::`scalar deleting destructor' (00402540)
@ILT+135(??0CPerson@@QAE@XZ):
0040108C   jmp         CPerson::CPerson (00401790)
@ILT+140(??_ECChinese@@UAEPAXI@Z):
00401091   jmp         CChinese::`scalar deleting destructor' (00401a40)
@ILT+145(?SitDown@CSoft@@UAEHXZ):
00401096   jmp         CSoft::SitDown (00402110)
@ILT+150(??1CAmerican@@UAE@XZ):
0040109B   jmp         CAmerican::~CAmerican (00401b50)
@ILT+155(?main2@@YAHXZ):
004010A0   jmp         main2 (004015a0)
@ILT+160(?GetClassName@CPerson@@UAEPADXZ):
004010A5   jmp         CPerson::GetClassName (004018b0)
@ILT+165(??1CChinese@@UAE@XZ):
004010AA   jmp         CChinese::~CChinese (00401960)
@ILT+170(?Sleep@CSoftBed@@UAEHXZ):
004010AF   jmp         CSoftBed::Sleep (004024b0)
@ILT+175(??_ECSoftBed@@UAEPAXI@Z):
004010B4   jmp         CSoftBed::`scalar deleting destructor' (00402540)


??_7CSoftBed@@6BCSoft@@@:
004260F4   xchg        edx,dword ptr [eax]
004260F6   inc         eax
004260F7   add         byte ptr [ecx+edx],al
004260FA   inc         eax
004260FB   add         ah,bl
004260FD   adc         byte ptr [eax],al
00426100   or          dword ptr [ecx],edx
00426102   inc         eax
00426103   add         byte ptr [eax],al
00426105   add         byte ptr [eax],al
00426107   add         byte ptr [eax],al
00426109   add         byte ptr [eax],al
0042610B   add         byte ptr ds:[4004010h],ch
00426111   adc         dword ptr [eax],eax
00426114   xchg        eax,esi
00426115   adc         byte ptr [eax],al




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值