![](/img/trans.png)
[英]How can I turn my program into a .dll file and run it in cmd using rundll32.exe?
[英]How can I know which functions are invoked in a .dll file when this .dll file is used by a .exe program?
我有一個與調用dll文件中的函數有關的問題。 如果我很了解,在dll文件中,我們可以定義許多可能由.exe文件調用的功能。 例如,可以從a.dll
文件調用的功能包括以下功能:
void fun1(int k);
int fun2(float value);
float fun3(double sig);
對於特定程序,例如a.exe
,它只能在a.dll
調用fun1
函數,而不使用其他函數。 然后我的問題是,如何知道運行.exe程序時調用了哪些函數。
您可以檢查可執行文件的符號表中是否有導入的符號。 對於Windows( .exe
文件),您可以將DUMPBIN
實用程序與/IMPORTS
,如此處所述 。
更新 :如注釋中所述,可執行文件可以加載DLL並以在編譯時不創建符號的方式動態訪問它們。 例如,通過使用LoadLibrary加載DLL之后調用GetProcAddress 。 在這種情況下,將不存在符號,並且DUMPBIN
不會列出該符號,但是可以調用或可以不調用該函數。
如果您或多或少知道exe的工作方式,並且它似乎並沒有動態地進行處理(例如從插件DLL加載代碼),則可以假定沒有動態加載發生。 此外,如果exe的符號表顯示了給定DLL中的某些功能,則exe不太可能從同一DLL中動態訪問功能。
同樣,函數出現在符號表中的事實並不能保證該函數將被exe調用,但是在任何正常的靜態情況下,它都很有可能。
您可以使用Dependency Walker
“ Dependency Walker是一個免費的實用程序,它可以掃描任何32位或64位Windows模塊(exe,dll,ocx,sys等),並為所有從屬模塊構建層次結構樹圖。對於找到的每個模塊,它將列出所有該模塊導出的功能以及其他模塊實際上正在調用的功能。另一個視圖顯示所需文件的最小集,以及有關每個文件的詳細信息,包括文件的完整路徑,基址,版本號,計算機類型,調試信息等。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.