????c++???????????????沼??
????? ???????[ 2013/7/2 10:15:42 ] ????????
??????????????????Σ?????????????κ??麯???????μ?С?
??????????c++???
class Top {//?????
public:
int i;
Top(int ii) {
i = ii;
}
};
class Left : public virtual Top {
public:
int j;
Left(int jj?? int ii) : Top(ii) {
j = jj;
}
};
class Right : public virtual Top {
public:
int k;
Right(int kk?? int ii) : Top(ii) {
k = kk;
}
};
class Bottom : public Left?? public Right {
public:
int l;
Bottom(int ll?? int jj?? int kk?? int ii) : Top(ii)?? Left(jj?? ii)?? Right(kk?? ii) {
l = ll;
}
};
int main() {
Bottom b(1?? 2?? 3?? 4);
Bottom* bp = &b;
//??????????????
b.l = 1;
bp->l = 2;
//???????Left????????
Left* lp = bp;
b.j = 1;
bp->j = 2;
lp->j = 3;
//???????Right????????
Right* rp = bp;
b.k = 1;
bp->k = 2;
rp->k = 3;
//?????????Top????????
Top* tp = bp;
b.i = 1;
bp->i = 2;
tp->i = 3;
};
???????????????????????????????????????Σ????main?????????????
; 33 : int main() {
push ebp
mov ebp?? esp
sub esp?? 48 ; ???????????????????????ж???b??24byte
; 34 : Bottom b(1?? 2?? 3?? 4);
push 1;?????1??????ж?????????????????????? 1????????0?????????
push 4;??4???????b??????????????
push 3;??3???????b??????????????
push 2;??2???????b??????????????
push 1;??1???????b??????????????
lea ecx?? DWORD PTR _b$[ebp];???????b?????????????????ecx??????????????????????b???????
call ??0Bottom@@QAE@HHHH@Z ; ???????b???????
; 35 : Bottom* bp = &b;
lea eax?? DWORD PTR _b$[ebp];??????b?????????????eax
mov DWORD PTR _bp$[ebp]?? eax;??????b??????????????bp
; 36 :
; 37 : b.l = 1;
mov DWORD PTR _b$[ebp+16]?? 1;??1д????????????16??????棬???????b????????l???1
; 38 : bp->l = 2;
mov ecx?? DWORD PTR _bp$[ebp];??????b?????????????ecx
mov DWORD PTR [ecx+16]?? 2;??2д????????????16??????棬???????b????????l???2
;???????????????????????????????????????b????????
;??????????????????????????????16???
;??????????????в??
; 39 :
; 40 : Left* lp = bp;
mov edx?? DWORD PTR _bp$[ebp];??????b?????????????edx
mov DWORD PTR _lp$[ebp]?? edx;??????b???????????????lp?????lp???????Left??????
;?????????沼??????????????????Left????????Bottom???
; 41 : b.j = 1;
mov DWORD PTR _b$[ebp+4]?? 1;??1??????????b????4byte????棬???
;?????????????j???1
; 42 : bp->j = 2;
mov eax?? DWORD PTR _bp$[ebp];??????b?????????????eax
mov DWORD PTR [eax+4]?? 2;??2д????????b????4byte????棬????????????????j???2
;????????????????b?????????????????????????????j??
;?????????????????????????????????4byte
;????????????????
; 43 : lp->j = 3;
mov ecx?? DWORD PTR _lp$[ebp];??????Left????????????????ecx
mov DWORD PTR [ecx+4]?? 3;??3???????Left????????4byte????棬?????????Left????????j???3
;??????????????????????????Left????????????????????????????
;?4byte
; 44 :
; 45 : Right* rp = bp;
cmp DWORD PTR _bp$[ebp]?? 0;????????????0??????ж?bp?????????
je SHORT $LN3@main????У??????????У?????????????
mov edx?? DWORD PTR _bp$[ebp];??????b?????????????edx
add edx?? 8;?????edx??????????8??????edx???汣?????????????b??????8byte????????????Right??????
mov DWORD PTR tv90[ebp]?? edx;???????edx??????????????tv90
jmp SHORT $LN4@main;????????$LN4@main?????
$LN3@main:
mov DWORD PTR tv90[ebp]?? 0;?????????tv90????????????????????ж?bp??????????????У?????????????
$LN4@main:
mov eax?? DWORD PTR tv90[ebp];?????????tv90???????????????eax??eax?????????Right??????
mov DWORD PTR _rp$[ebp]?? eax;???????eax?????????????rp
;???????????????bp?????rp?????????????????ж?bp????????ж?
;???????rp????????????bp??????????8byte????????????????ж?????bp??????
;??bp??????κζ??????rp???????????棬?????????Σ???????????????????????
; 46 : b.k = 1;
mov DWORD PTR _b$[ebp+12]?? 1;??1д????????b????12byte????????1?????????????????k
; 47 : bp->k = 2;
mov ecx?? DWORD PTR _bp$[ebp];??????b???????????ecx
mov DWORD PTR [ecx+12]?? 2;??2д????????b????12byte????????2?????????????????k
;??????????????????????????????????????????2byte
;??????????????в??
; 48 : rp->k = 3;
mov edx?? DWORD PTR _rp$[ebp];????????Right???????????edx
mov DWORD PTR [edx+4]?? 3;??3д??????????Right????4byte????????3???????????k
; 49 :
; 50 : Top* tp = bp;
cmp DWORD PTR _bp$[ebp]?? 0;???bp?????????0??????ж?bp?????????????
jne SHORT $LN5@main;??????????????????$LN5@main??У??????????У?????????????????
mov DWORD PTR tv145[ebp]?? 0;???bp????????0???????????tv145??????????????
jmp SHORT $LN6@main;?????????$LN6@main???
$LN5@main:
mov eax?? DWORD PTR _bp$[ebp];??????b?????????????eax
mov ecx?? DWORD PTR [eax];??????b???????????????????ecx??????b???????????vtable??????????vtable???????????
mov edx?? DWORD PTR _bp$[ebp];??????b?????????????edx
add edx?? DWORD PTR [ecx+4];ecx???????vtable????????????????vtable????4byte?????????(??????b???????????Left??????????????????????)?? ?????????b??????
;???????????Top??????
mov DWORD PTR tv145[ebp]?? edx;?????edx???汣??????????Top???????????浽???????tv145????
$LN6@main:
mov eax?? DWORD PTR tv145[ebp];?????????tv145?????????????eax
mov DWORD PTR _tp$[ebp]?? eax;?????eax???溬??????????Top???????????tp
;?????????????bp??tp?????
; 51 : b.i = 1;
mov ecx?? DWORD PTR _b$[ebp];??????b??????????????????ecx??ecx??????vtable??????
mov edx?? DWORD PTR [ecx+4];????vtable????4byte???????????????b???????????Top????????????????edx
mov DWORD PTR _b$[ebp+edx]?? 1;??????????????edx????????????????????Top????????1д?????????????棬ji
;??????????????????i???
; 52 : bp->i = 2;
mov eax?? DWORD PTR _bp$[ebp];??????b?????????????eax
mov ecx?? DWORD PTR [eax];??????b????????????????ecx??????vtable?????????????ecx
mov edx?? DWORD PTR [ecx+4];?????vtable????4byte???????????????edx??????????b???????????Top???????????edx
mov eax?? DWORD PTR _bp$[ebp];??????b???????????eax
mov DWORD PTR [eax+edx]?? 2;??????b??????????????????????????????Top??????????2д???????????洦??
;????????????????????i???2
; 53 : tp->i = 3;
mov ecx?? DWORD PTR _tp$[ebp];??????????Top?????????????ecx
mov DWORD PTR [ecx]?? 3;??3????????????Top??????????????????????i???
; 54 :
; 55 : };
xor eax?? eax
mov esp?? ebp
pop ebp
ret 0
_main ENDP
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11