如何根据正在读取的注册表项设置断点?

时间:2013-04-29 20:47:10

标签: .net debugging registry breakpoints

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

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

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

2 个答案:

答案 0 :(得分:1)

我已经到了一半。可以通过a special syntax调试Win32 API函数。

{,,FOO.DLL}_FunctionName@N

除非它是64位DLL,否则没有装饰:

{,,FOO.DLL}FunctionName

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

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

但是,this post on Zach Burlingame's blog枚举了注册表项。

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

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

答案 1 :(得分:1)

WinDBG的:

检查符号:

x advapi32!RegOpenKeyExW

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

bp advapi32!RegOpenKeyExW

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

.symfix
.reload /f advapi32.dll