![](/img/trans.png)
[英]How can I turn my program into a .dll file and run it in cmd using rundll32.exe?
[英]Debugging a native dll using rundll32.exe , fail to load symbols
我正在編寫一個本機dll,該dll將與rundll32.exe
(我們的客戶端必須使用)一起運行。 我已經使用VS
的調試屬性來定義:
Command: c:\windows\system32\rundll32.exe
Command Argument: $(TargetPath) , ENTRY_POINT
其中ENTRY_POINT
是我的dll的導出函數,該函數遵循rundll32.exe
接口。
此設置調用我的函數,但不會加載任何符號,因此不會觸發任何斷點。 我了解到,僅在調用MessageBox
的入口之后才調用我的函數。
當我使用自己的容器應用程序(只是一個調用Loadlibrary
, GetProcAddress
和ENTRY_POINT
函數本身的exe
Loadlibrary
)時,所有斷點都會觸發,並且可以像往常一樣進行逐步調試。
什么會導致該行為?
MessageBox()為您提供了足夠的資源來解決此問題。 當顯示時,使用Debug + Break All進入調試器。 接下來,使用Debug + Windows + Modules,在列表中找到DLL。 右鍵單擊它,然后選擇“符號負載信息”。 您將獲得調試器在其中搜索PDB文件的所有目錄的列表。 確保其中之一存在它。
首先,您的“命令參數”設置不符合要求。 它應該是"$(TargetPath)" ENTRY_POINT
。 雙引號可以避免在路徑名中使用空格,不要使用逗號。
簡而言之:所有問題都源於在64Bit
環境中調試32Bit
dll。
從原始問題和注釋中提到的附帶問題可以看出,我在這里遇到的問題很少:
原因是提到dll是32Bit
而調試器是64Bit
。 rundll32.exe
的路徑被rundll32.exe
為64Bit
版本。 通常,這會導致WOW64
啟動32Bit
版本的子進程-從而導致進程不同,因此調試器不存在。
謝謝大家
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.