1

我有一个混合使用托管和非托管代码的可执行文件。我没有它的源代码,但我可以反编译它。

我所知道的是它有时会读取一个注册表项,然后根据注册表中的程序集名称加载一个托管的 DLL。所以我想在正在读取的注册表项上设置一个断点,无论它是在托管代码还是非托管代码中读取,然后查看(希望是托管的)堆栈跟踪。然后我的计划是使用ILSpy从那里开始逐步执​​行反编译的代码,并观察有问题的 DLL 被使用。

这可以通过 Visual Studio 调试器、windbg 或其他调试器实现吗?我对 WinDbg 不太满意,但如果我必须使用它,我会的。

4

2 回答 2

0

我到了一半。可以通过特殊语法调试 Win32 API 函数。

{,,FOO.DLL}_FunctionName@N

除非它是 64 位 DLL,在这种情况下没有装饰:

{,,FOO.DLL}FunctionName

我的进程是 32 位的。我无法使用以下任何方法获取功能装饰列表:

我相信这是由于 SxS 加载了错误版本的 dll。

但是,Zach Burlingame 博客上的这篇文章列举了注册表项。

我需要设置的断点是 {,,Advapi32.dll}_RegOpenKeyExW@20。

现在我需要在注册表路径上设置断点。

于 2013-04-30T21:12:24.270 回答
0

风声:

检查符号:

x advapi32!RegOpenKeyExW

如果符号没有问题,设置断点:

bp advapi32!RegOpenKeyExW

如果 windbg 没有看到符号,请尝试:

.symfix
.reload /f advapi32.dll
于 2018-04-02T07:35:14.300 回答