日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Delphi - 对象构造浅析后续

發(fā)布時間:2025/4/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Delphi - 对象构造浅析后续 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

技術(shù)交流,DH講解.

之前一篇文章已經(jīng)講過對象構(gòu)造的過程,但是我們那個對象無任何東西,這里我們在已有的基礎(chǔ)上面加點兒東西再來看看.
代碼改成:

THuangJacky = classprivateFName:string;publicprocedure SayMyName();constructor Create();end;varForm3: TForm3;implementation{$R *.dfm}procedure TForm3.btn1Click(Sender: TObject); varA:THuangJacky; beginA:=THuangJacky.Create;A.Free; end;{ THuangJacky }constructor THuangJacky.Create; beginFName:='HuangJacky'; end;procedure THuangJacky.SayMyName; beginShowMessage(FName); end;

我們可以看到多了一個私有域和公有方法.
構(gòu)造過程:

utMain.pas.38: A:=THuangJacky.Create; 004B33E4 B201 mov dl,$01 004B33E6 A1C8324B00 mov eax,[$004b32c8] //類地址都變化了. 004B33EB E808000000 call THuangJacky.Create
utMain.pas.45: begin 004B33F8 53 push ebx 004B33F9 56 push esi 004B33FA 84D2 test dl,dl 004B33FC 7408 jz $004b3406 004B33FE 83C4F0 add esp,-$10 004B3401 E8D61EF5FF call @ClassCreate //前面都一樣,又是調(diào)用這個參數(shù),但是我們知道eax參數(shù)(類地址)變化了 004B3406 8BDA mov ebx,edx 004B3408 8BF0 mov esi,eax utMain.pas.46: FName:='HuangJacky'; 004B340A 8D4604 lea eax,[esi+$04] 004B340D BA40344B00 mov edx,$004b3440 004B3412 E82D34F5FF call @UStrAsg

我們可以看到是先構(gòu)造然后賦值字符串的,@ClassCreate之前的判斷都一樣的,我們看看$004b3440 地址的數(shù)據(jù):
不要忘了我是在D2010下面,所以是Unicode字符串.


@ClassCreate: 004052DC 52 push edx 004052DD 51 push ecx 004052DE 53 push ebx 004052DF 84D2 test dl,dl 004052E1 7C03 jl $004052e6 004052E3 FF50F4 call dword ptr [eax-$0c] 004052E6 31D2 xor edx,edx 004052E8 8D4C2410 lea ecx,[esp+$10] 004052EC 648B1A mov ebx,fs:[edx] 004052EF 8919 mov [ecx],ebx 004052F1 896908 mov [ecx+$08],ebp 004052F4 C7410405534000 mov [ecx+$04],$00405305 004052FB 89410C mov [ecx+$0c],eax 004052FE 64890A mov fs:[edx],ecx 00405301 5B pop ebx 00405302 59 pop ecx 00405303 5A pop edx 00405304 C3 ret


這個函數(shù)還是一樣的.我們不需要看了,從這里跳吧004052E3


TObject.NewInstance: 00404D40 53 push ebx 00404D41 8BD8 mov ebx,eax 00404D43 8BC3 mov eax,ebx 00404D45 E826000000 call TObject.InstanceSize 00404D4A E885F4FFFF call @GetMem 00404D4F 8BD0 mov edx,eax 00404D51 8BC3 mov eax,ebx 00404D53 E85C000000 call TObject.InitInstance 00404D58 5B pop ebx 00404D59 C3 ret 00404D5A 8BC0 mov eax,eax

還是到這里來了,貌似一路上什么都沒有變.但是我推想TObject.InstanceSize返回值會有變化,畢竟多了一個私有成員,但是@GetMem肯定不變,TObject.InitInstance也會變化,畢竟有方法了.跟進驗證


果然現(xiàn)在TObject.InstanceSize返回值是$0C了,也就是12,上一次什么都沒有是8,現(xiàn)在多了4,多了一個指針地址,難道這個指針就是字符串指針一會兒驗證下?
接下來我們直接進入InitInstance看看.有什么變化沒有?
我跟進去發(fā)現(xiàn)沒有變化,這個方法不在IntfTable里面的.我們看看初始化完成后的對象數(shù)據(jù).

我們看看$004b3320是什么東西.

這里看上去像是THuangJacky的內(nèi)存地址,那我們最先看見的[$004b32c8]是什么?我們注意地址加上[]就是地址指向的值.
是的,就是指向這里的.
我們讓它Create完后再來看對象的數(shù)據(jù),OK?



變化了,第二地址會是什么呢?
?
果然是第一個成員變量的值.

?


有朋友要問那么SayMyName這個方法的信息存在哪里的呢?這個方法我們要知道是和類掛鉤的,所以肯定在類的內(nèi)存信息塊里面的.我們到類信息塊去看看,SayMyName字符串前面有4個字節(jié)$004B3464
?

utMain.pas.52: ShowMessage(FName); 004B3464 8B4004 mov eax,[eax+$04] 004B3467 E8AC4CFBFF call ShowMessage

最后來做個試驗,我們給類里面再加一個私有成員,然后實現(xiàn)ClassHack,哈哈,違反面向?qū)ο蟮姆椒?/p> THuangJacky = classstrict private //私有了,訪問不了了FName:string;FAge:Integer;publicprocedure SayMyName();procedure SayMyAge();constructor Create();end;varForm3: TForm3;implementation{$R *.dfm}procedure TForm3.btn1Click(Sender: TObject); varA:THuangJacky;Pi:PInteger; beginA:=THuangJacky.Create;Pi:=PInteger(Integer(A)+8); //我就要HackShowMessage(IntToStr(Pi^)); //12A.SayMyAge; //12 上面是一樣的A.Free; end;{ THuangJacky }constructor THuangJacky.Create; beginFName:='HuangJacky';FAge:=12; end;procedure THuangJacky.SayMyAge; beginShowMessage(IntToStr(FAge)); end;procedure THuangJacky.SayMyName; beginShowMessage(FName); end;

看下新對象的內(nèi)存和類的內(nèi)存:
對象的:

?
類的:
?
注意看方法前面的地址.哈哈.

今天就說到這里,或許有朋友問這樣研究有什么意思.下一篇文章就講單例模式,這個總有用吧,Delphi里面單例模式就要和我們講的這些知識掛上鉤了,因為Delphi很特別喲.

好,下次見,我是DH.

轉(zhuǎn)載于:https://www.cnblogs.com/huangjacky/archive/2009/12/08/1619438.html

總結(jié)

以上是生活随笔為你收集整理的Delphi - 对象构造浅析后续的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费看黄色av | 黄色av中文字幕 | 蜜桃传媒一区二区亚洲 | 国产精品永久 | 野外做受又硬又粗又大视频√ | 久久久久国 | 热久久91| 亚洲精品国产熟女久久久 | 日本极品喷水 | 亚洲人成人无码网www国产 | 色老头在线观看 | 国产xxx在线 | 国产在线无码精品 | 亚洲av无码一区东京热久久 | 五月伊人网 | 中国农村一级片 | 777在线视频 | 欧美成人手机在线视频 | 日本3级网站 | 免费的av在线| 日韩天堂网| 欧美国产精品一区二区三区 | 一区二区免费av | 欲色影音 | 亚洲欧美999 | 91国模少妇一区二区三区 | 亚洲第一香蕉网 | 黄色免费av | 尤物视频网站在线观看 | 他趴在我两腿中间添得好爽在线看 | 91网站免费在线观看 | 黄视频免费在线看 | 国产一区二区av | 日本精品免费视频 | 福利视频午夜 | 日韩一区二区在线视频 | 人妻一区二区三 | 国产乱妇无码大片在线观看 | 中国黄色小视频 | 日本亚洲国产 | 337p亚洲精品色噜噜狠狠 | 国产成人网| 免费超碰在线观看 | 成人性生交视频免费观看 | 久操网站| 欧美精品日韩少妇 | 国产一区91 | 六月丁香婷婷激情 | 日本在线一区二区 | 亚洲国产美女视频 | 日韩aⅴ在线观看 | 亚洲综合套图 | 狠狠操天天操夜夜操 | av女星全部名单 | 日日碰狠狠添天天爽无码av | 一级爱爱免费视频 | 色爱亚洲 | 少妇激情一区二区三区视频 | 亚洲色图偷拍视频 | 国产精品区一区二 | 国产性hd| 男女插插视频 | 黄色同人网站 | 无罩大乳的熟妇正在播放 | 国产黄a三级三级三级看三级男男 | 福利网址在线观看 | 久久久久91| 久热中文 | 亚洲天堂中文在线 | 成人久久影院 | 欧美黄色一级视频 | 视频一区二区三 | 视屏一区| 国内精品久久久久久 | 嫩草影院懂你的影院 | 久久9久久| 久久综合国产精品 | 有码中文字幕 | 黄页免费视频 | 中国色老太hd | 综合一区二区三区 | 欧美日韩伊人 | 亚洲欧美日韩另类在线 | 色综合天天综合网天天狠天天 | 成年人福利 | 亚洲大乳| www国产在线 | 黄页免费视频 | 老色批影院 | 国产成人精品无码高潮 | 黑人巨大精品欧美一区二区 | 国产精品扒开做爽爽爽的视频 | 久久艹这里只有精品 | 黄色草逼网站 | 无码人妻熟妇av又粗又大 | 高清一区二区在线 | 91桃色网站 | 视频一区日韩 | 国产亚洲精品成人无码精品网站 |