轉(zhuǎn)帖|其它|編輯:郝浩|2009-02-09 11:15:07.000|閱讀 889 次
概述:在讓.Net 程序脫離.net framework框架運(yùn)行(源代碼實(shí)現(xiàn)說(shuō)明) 中我們介紹的脫離框架運(yùn)行的方法,仍然需要依賴(lài)rsdeploy.dll才行。今回我們就介紹這個(gè)dll的實(shí)現(xiàn)原理。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
在讓.Net 程序脫離.net framework框架運(yùn)行(源代碼實(shí)現(xiàn)說(shuō)明) 中我們介紹的脫離框架運(yùn)行的方法,仍然需要依賴(lài)rsdeploy.dll才行。今回我們就介紹這個(gè)dll的實(shí)現(xiàn)原理。
簡(jiǎn)單的實(shí)現(xiàn)方式:首先我們需要用到一個(gè)undocumented features,在dll被加載時(shí),設(shè)置環(huán)境變量 COMPLUS_InstallRoot 為當(dāng)前dll所在目錄。
另外復(fù)制c:\windows\microsoft.net\framework\v1.14322或者v2.0.50727到dll所在目錄。把mscoree.dll 以及crt運(yùn)行庫(kù)放到dll目錄中。在dll目錄中創(chuàng)建一個(gè)本地的GAC目錄,再把需要的GAC assemblies復(fù)制進(jìn)去。
這樣子就OK了,簡(jiǎn)單的.Net程序就可以在這個(gè)環(huán)境中運(yùn)行了。如果是復(fù)雜的程序還需要實(shí)現(xiàn)一個(gè)虛擬注冊(cè)表系統(tǒng)。對(duì)于我們虛擬框架這個(gè)應(yīng)用來(lái)說(shuō),只需要實(shí)現(xiàn)一個(gè)只讀的虛擬注冊(cè)表就OK了。
這個(gè)實(shí)現(xiàn)可以ring0 也可以ring3,考慮到兼容性直接用ring3實(shí)現(xiàn)好了。
實(shí)現(xiàn)方式可以使用api hook的方式,即在我們的dll加載時(shí)hook advapi32.dll 中所有Reg開(kāi)頭的函數(shù)。虛擬注冊(cè)表系統(tǒng)的框架就完成了,剩下的就是實(shí)現(xiàn)了。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:IT專(zhuān)家網(wǎng)