2

在我的应用程序中,我使用的是第三方 dll,并且我没有任何可用的源代码。现在我在 Windows7 操作系统中遇到了异常,所以我想调试并知道确切的原因是什么。

在这种情况下,反射器不会帮助我,因为它是一个非托管的 dll。并且反编译器在传递此 dll(源代码提取)时出错。

要在 Visual Studio 中调试,它需要 PDB 文件和 .pdb 只能从源代码生成。

在调试部分中,我选择了“启用本机代码调试选项”,在安全部分中,我选择了该选项作为部分受信任的应用程序以消除异常。

我无法得出结论,可能是什么问题,除了上面之外没有任何想法,如何解决?

据我所知,如果我们没有可用的源代码,我们无法调试非托管 dll。

任何人都可以建议,如果我们有任何相关的技术。

我的思考过程:如果我能获得关于哪个 API 失败的运行时信息,我可以选择替代 API 并解决问题。

提前致谢。

问候,西瓦。

4

1 回答 1

1

当然你可以调试它。您可以很好地单步执行汇编代码并检查寄存器的状态等。

看来您真的想通过检查和执行原始源代码来进行调试。如果没有源代码,这显然是不可能的,因为通常不可能从优化的本机可执行文件对源代码进行逆向工程(可以对功能等效的代码进行逆向工程,但这可能与原始源代码大不相同)。本机 dll 通常不包含符号(类、函数、成员等)的名称(导出的除外),因此无法使用方法名称创建例如友好的堆栈跟踪。

除此之外,即使你有源代码,如果没有符号文件 (.pdb) 也是无用的,因为 pdb 包含有关原始源代码和编译指令之间映射的数据,以及其他信息(符号名称、优化信息等) .

但是,如果您有 pdb 文件但没有源代码,则使用汇编代码进行调试并不难(好吧,这也不是那么容易 :)。这 2 篇文章(http://www.microsoft.com/msj/0298/hood0298.aspxhttp://www.microsoft.com/msj/0698/hood0698.aspx)有足够的信息来调试大多数常见情况你可能需要的地方。

于 2013-08-22T08:09:04.750 回答