VC++中Depends工具的使用和DLL函数的动态调用方式示例
VC++中Depends工具;Depends用來顯示與一個可執(zhí)行文件(exe或者dll)相關(guān)的依賴項(動態(tài)鏈接庫dll),以及該exe或dll引用了這些dll中的哪些接口,同時也可以看到每個被依賴的dll中的所有導(dǎo)出的函數(shù)接口。
在VC6位于如下目錄;
加載一個系統(tǒng)dll查看一下;出現(xiàn)下圖錯誤提示;大致說...加載失敗...循環(huán)依賴...;因為此dll又調(diào)用了其它dll;
左上角是Dll信息窗口,顯示引用到的Dll模塊,
右邊第一個窗口是所選的Dll模塊所使用的函數(shù),
右邊第二個窗口是所選Dll模塊的所有的導(dǎo)出函數(shù),
下面窗口是所有需要的Dll模塊的屬性,
右邊兩個窗口出現(xiàn)四個標簽:序號,提示,函數(shù),入口點;
如果導(dǎo)出是函數(shù),那么出現(xiàn)函數(shù)名,如果導(dǎo)出的是序號,那么函數(shù)項就是N/A(無法顯示)出現(xiàn)紅色提示表示不正常,一般為沒有該導(dǎo)出函數(shù);
看一下系統(tǒng)自帶的ICMP.dll;就是實現(xiàn)ping功能的那個;
在C++中有一種dll函數(shù)調(diào)用方式;就是通過LoadLibrary、 GetProcAddress,載入模塊之后,獲取函數(shù)地址,通過函數(shù)地址來調(diào)用函數(shù);在安全類編程中會用到;
下面來看一下示例;獲取user32中的MessageBox函數(shù)地址;
?? 新建一個VC++ MFC工程;
CPP文件包含此句:#include <windows.h>
CPP文件頭部添加:typedef void (*MYPROC)(LPTSTR);
在某個消息處理函數(shù)中,單擊菜單或按鈕,或?qū)υ捒虺跏蓟?#xff1b;添加如下代碼;顯示載入DLL以后的DLL模塊地址和MessageBoxA函數(shù)地址;
???
運行結(jié)果如下;環(huán)境是Win10,VC6;
也就是說載入uder32 DLL的基址在0x74ab0000;MessageBoxA函數(shù)地址在基址之后一些;
總結(jié)
以上是生活随笔為你收集整理的VC++中Depends工具的使用和DLL函数的动态调用方式示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hyper-V安装ReactOS未成功
- 下一篇: Windows下使用MinGw和gcc构