2009-12-21 153 views
0

我正在使用WinDbg(Native x64-NOT Itanium)来调试加载托管的非托管dll的x64(非托管)应用程序。WinDbg - 调试混合x64托管/非托管代码

我想在一个非托管dll中设置断点。当断点被击中并且我逐步完成时,显示的指令与它们应该完全不同。我使用两个不同的反汇编程序验证了WinDbg在我逐步完成时没有显示正确的反汇编。

当连接到应用程序中,我得到这样一行:

ModLoad: 00000000`XXXXXXXX 00000000`YYYYYYYY C:\MyDLL.DLL 

我调整了两个反汇编的地址以反映基地址XXXXXXXX。

可能是什么问题?

+0

我发现这(从未完全回答): http://stackoverflow.com/questions/1398826/vs2008-on-win7-64-bit-debugging-a-windows-service 或许这可以帮助? – devviedev 2009-12-22 00:09:22

+0

拆卸一般意义吗?我一般会优先选择windbg,因为它使用有效的IP进行解码,而不是单纯依靠静态分析(反汇编可能是好的),而是在有效的过程中有效。你能透露一些汇编代码来比较吗? – deemok 2009-12-22 14:23:09

+0

这是“调用someFunc”与“mov ebx,esp”。即使踩在其他点也不匹配。在哪个断点被击中似乎不一致;我设置了应该被击中但不是的断点。 – devviedev 2009-12-22 18:08:41

回答

0

是否uf modname!FuncName返回正确的结果?如果你在奇怪的地方拆卸/断点,你有时可以欺骗WinDbg。请记住,x86/x64是一个可变宽度的指令集,所以如果你从指令的中途开始读取,反汇编器会感到困惑。

+0

你认为.NET解释器可以改变事物吗? – devviedev 2009-12-21 21:56:47

+0

不,CLR不会更改任何非托管DLL – 2009-12-21 22:27:12

+0

如果我执行“u

”,则它不匹配。我没有使用符号进行调试。我也尝试了一下这个地址,并没有帮助正确的反汇编。 – devviedev 2009-12-21 22:59:39

0

某处我注意到这可能与您的DLL中不正确的入口点有关。但我不知道如何处理这些信息(我是初学者)。