Debugging 在没有源代码的情况下调试DLL函数参数

Debugging 在没有源代码的情况下调试DLL函数参数,debugging,dll,Debugging,Dll,我有一个没有源代码的DLL。我知道某个程序(同样,我只有一个二进制文件,没有源代码)运行这个DLL来执行任务。我已经用Dependency Walker(dependence.exe)查看了这个DLL,以查看函数名。现在我想看看程序向某个函数发送了哪些参数。可能吗?我想你说的是本机DLL?如果是的话,那么答案也许是 如果DLL是用C++名字编写的,那么就有可能依赖原始的原型。如果函数名看起来像什么_Foo@ADBDE而不是福,然后他们被装饰。在依赖性沃克中使用“未修饰的C++函数”命令。 否则,

我有一个没有源代码的DLL。我知道某个程序(同样,我只有一个二进制文件,没有源代码)运行这个DLL来执行任务。我已经用Dependency Walker(dependence.exe)查看了这个DLL,以查看函数名。现在我想看看程序向某个函数发送了哪些参数。可能吗?

我想你说的是本机DLL?如果是的话,那么答案也许是

如果DLL是用C++名字编写的,那么就有可能依赖原始的原型。如果函数名看起来像什么_Foo@ADBDE而不是福,然后他们被装饰。在依赖性沃克中使用“未修饰的C++函数”命令。


否则,您需要获取函数的模块地址,并使用反汇编程序计算出使用了哪些参数以及它们的作用。这可能是一项非常令人沮丧且耗时的任务。

在我取消修饰后,我能够看到函数名及其参数。问题是,我希望看到“正在运行”的函数被发送到了什么——我希望能够深入了解这个DLL函数的调用及其接收到的内容。@Jacek,这要复杂得多。我想,应用程序加载后,您必须将调试器附加到DLL,然后在函数地址处设置断点。您仍然只能获得汇编程序,而没有任何调试信息。您将拥有堆栈跟踪,但它只是一个地址列表。在x86中理解参数,以及如何在C++中应用这些参数将是困难的。如果你有函数和它们的参数,那么你就应该输入测试值,看看你得到了什么结果。你一定知道寄来的是什么?