版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
vb動態(tài)加載dll的一個類,實(shí)現(xiàn)vb動態(tài)加載dll并動態(tài)調(diào)用dll導(dǎo)出的函數(shù)的一個方便辦法自從會vb用調(diào)用動態(tài)庫函數(shù)以來,我一直在想:如何動態(tài)的調(diào)用dll里的函數(shù)?網(wǎng)上有一個用CallWindowProc函數(shù)的方法,不過我還是喜歡自己有個辦法.今天工夫不負(fù)有心人,我終于把我心中一直想的辦法給實(shí)現(xiàn)了,干脆就往自己的空間上貼吧.錯誤的地方,希望可以得到有這方面的師傅給以指正,以求進(jìn)步!對于系統(tǒng)api我沒有嘗試,如果調(diào)用約定相符,應(yīng)該適用于對系統(tǒng)api的調(diào)用.我自己用c寫個dll,然后在vb里寫了這個類.以下代碼只是我簡單的實(shí)現(xiàn),主要的是看實(shí)現(xiàn)的道理.vc代碼:///'我把dll文件名命名為:dll#include<Windows.h>#include<stdlib.h>#include<string.h>#include'stdafx.h'BOOLAPIENTRYDllMain(HANDLEhModule,DWORD
ul_reason_for_call,LPVOIDlpReserved){returnTRUE;}extern'C'BOOL_declspec(dllexport)add(inta){MessageBoxA(NULL,'運(yùn)行在dll里!','成功',MB_OK);a=999;return1;}///vb代碼:'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''類代碼:Private狀態(tài)標(biāo)志AsBooleanPrivate模塊句柄AsLongPrivate本地函數(shù)地址備份(0To4)AsBytePrivate被替換函數(shù)的地址AsLongPublicFunction替換函數(shù)地址(模塊名AsString,函數(shù)名AsString,本地函數(shù)地址AsLong)AsBoolean
If0=本地函數(shù)地址Then替換函數(shù)地址=0ExitFunctionEndIf
被替換函數(shù)的地址=替換函數(shù)地址Dim函數(shù)地址AsLongDimaAsLongDim跳轉(zhuǎn)指令(0To4)AsByte
'加載模塊模塊句柄=LoadLibrary(模塊名)If0<>模塊句柄Then'狀態(tài)標(biāo)志=1Else:替換函數(shù)地址=0ExitFunctionEndIf'檢索函數(shù)地址函數(shù)地址=GetProcAddress(ByVal模塊句柄,ByVal函數(shù)名)If0<>函數(shù)地址Then'狀態(tài)標(biāo)志=1Else替換函數(shù)地址=0ExitFunctionEndIf'計(jì)算跳轉(zhuǎn)地址a=函數(shù)地址-(本地函數(shù)地址+5)'構(gòu)造跳轉(zhuǎn)地址跳轉(zhuǎn)指令(0)=233a=WriteProcessMemory(-1,ByValVarPtr(跳轉(zhuǎn)指令(1)),ByValVarPtr(a),4,0)If0=aThen替換函數(shù)地址=0ExitFunctionEndIf'先備份本地函數(shù)入口指令a=WriteProcessMemory(-1,ByValVarPtr(本地函數(shù)地址備份(0)),ByVal本地函數(shù)地址,5,0)If0=aThen替換函數(shù)地址=0ExitFunctionEndIf'寫入跳轉(zhuǎn)指令a=WriteProcessMemory(-1,ByVal本地函數(shù)地址,ByValVarPtr(跳轉(zhuǎn)指令(0)),5,0)If0=aThen替換函數(shù)地址=0ExitFunctionElse:狀態(tài)標(biāo)志=1替換函數(shù)地址=1EndIfEndFunctionPublicFunction還原函數(shù)地址()AsBooleanIf0=狀態(tài)標(biāo)志Then還原函數(shù)地址=0ExitFunctionEndIfDimaAsLonga=WriteProcessMemory(-1,ByVal被替換函數(shù)的地址,ByValVarPtr(本地函數(shù)地址備份(0)),5,0)If0=aThen還原函數(shù)地址=0ExitFunctionElse:狀態(tài)標(biāo)志=0還原函數(shù)地址=1EndIfFreeLibrary模塊句柄EndFunctionPublicFunction當(dāng)前狀態(tài)()AsBoolean當(dāng)前狀態(tài)=狀態(tài)標(biāo)志EndFunction''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''vb普通模塊代碼:'讀寫內(nèi)存的api函數(shù)PublicDeclareFunctionWriteProcessMemoryLib'kernel32'(ByValhProcessAsLong,ByVal_lpBaseAddressAsAny,lpBufferAsAny,ByValnSizeAsLong,lpNumberOfBytesWrittenAsLong)AsLong'加載模塊的api函數(shù)PublicDeclareFunctionLoadLibraryLib'kernel32'Alias'LoadLibraryA'(ByVallpLibFileNameAsString)AsLong'檢索模塊里函數(shù)地址的api函數(shù)PublicDeclareFunctionGetProcAddressLib'kernel32'(ByValhModuleAsLong,ByVallpProcNameAsString)AsLong'PublicDeclareFunctionFreeLibraryLib'kernel32'(ByValhLibModuleAsLong)AsLong'模擬一個函數(shù)與dll里,我們想調(diào)用函數(shù)類型和參數(shù)一致,用類將函數(shù)的地址替換PublicFunction測試函數(shù)(參數(shù)AsLong)AsBoolean'我們隨便給返回0,因?yàn)檫@個指令將不會被程序執(zhí)行到測試函數(shù)=0EndFunction''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''vb窗口模塊代碼:PrivateSubForm_Load()Dim模塊名AsString,函數(shù)名AsString模塊名=App.Path+'/dll.dll''模塊名現(xiàn)在可以自己定了,自由了!函數(shù)名='add'DimpAsBooleanDimaaAsNewClass1p=aa.替換函數(shù)地址(模塊
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《網(wǎng)絡(luò)b安全b》課件
- 第3單元 中國特色社會主義道路(A卷·知識通關(guān)練)(解析版)
- 2014年高考語文試卷(新課標(biāo)Ⅱ卷)(解析卷)
- 中國非遺文化魚燈介紹2
- 羽絨服的成本控制與優(yōu)化設(shè)計(jì)-洞察分析
- 雨水收集設(shè)施維護(hù)與監(jiān)測-洞察分析
- 體育游戲在體育教育中的應(yīng)用-洞察分析
- 香菇多糖生物活性分析-洞察分析
- 舞蹈康復(fù)對精神疾病患者心理創(chuàng)傷的治愈-洞察分析
- 網(wǎng)絡(luò)流量監(jiān)測技術(shù)-洞察分析
- 綠化園林技術(shù)交底
- 瑜伽肩頸理療修復(fù)課程設(shè)計(jì)
- 探討電影中的情緒表達(dá)和情感共鳴
- 2024年沈陽水務(wù)集團(tuán)招聘筆試參考題庫含答案解析
- 社會消防安全教育培訓(xùn)題庫及答案
- 部編人教版語文八年級上冊文言文課下注釋
- 蘇教版譯林三年級上下冊單詞表
- 腫瘤病例隨訪調(diào)查表
- 游樂園、滑雪場、冰雪樂園建設(shè)合作協(xié)議
- 粉末涂料有限公司檢維修作業(yè)安全風(fēng)險(xiǎn)分級清單
- 【蘇教版】2022-2023學(xué)年六年級數(shù)學(xué)上冊期末試卷(及答案)
評論
0/150
提交評論