![](/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.