- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 Windows Server 2003 SP2 x86 上的完全转储内存文件转储堆信息。转储是为在 Windows Server 2003 SP2 x64 计算机上运行的 32 位混合( native /clr)应用程序创建的。
从以下windbg日志中我了解到加载的ntdll.dll图像不正确并且与ntdll.pdb符号不对应。我尝试从目标计算机指定 ntdll.dll 的位置,但 Windbg 仍然显示该模块是从标准位置 (c:\windows\system32) 加载的。
我做错了什么?如何强制windbg加载正确版本的ntdll
?
Microsoft (R) Windows Debugger Version 6.11.0001.404 X86
Copyright (c) Microsoft Corporation. All rights reserved.
[ ... skipped ... ]
0:042> vertarget
Windows Server 2003 Version 3790 (Service Pack 2) MP (4 procs) Free x86 compatible
Product: Server, suite: TerminalServer SingleUserTS
kernel32.dll version: 5.2.3790.4480 (srv03_sp2_gdr.090321-1244)
Machine Name:
Debug session time: Wed Mar 16 16:36:10.000 2011 (GMT-5)
System Uptime: 17 days 10:34:26.068
Process Uptime: 1 days 15:19:14.000
Kernel time: 0 days 1:24:01.000
User time: 0 days 22:07:58.000
0:042> .sympath
Symbol search path is: C:\mscordacwks\v2.0.50727.3615;C:\__exe;SRV*C\Symbols*http://referencesource.microsoft.com/symbols;SRV*c:\Symbols*http://msdl.microsoft.com/download/symbols;SRV*C:\Symbols*http://source.msdn.microsoft.com/symbols
0:042> .exepath
Executable image search path is: C:\__exe;C:\__target\Windows\SysWOW64;
0:042> .reload
[ ... skipped ... ]
0:042> .reload /u ntdll.dll
Unloaded ntdll.dll
0:042> .reload /v /f ntdll.dll
AddImage: C:\WINDOWS\system32\ntdll.dll // why is it still c:\windows\system32
DllBase = 7d600000
Size = 000f0000
Checksum = 000c371a
TimeDateStamp = 4cc1831e
0:042> lm
[ ... skipped ... ]
7d600000 7d6f0000 ntdll (pdb symbols) c:\symbols\wntdll.pdb\9ED8E09C6723448380648C4456726AEF2\wntdll.pdb
0:042> !heap
*************************************************************************
*** Your debugger is not using the correct symbols ***
[ ... skipped ... ]
*** Type referenced: ntdll!_HEAP_ENTRY ***
*************************************************************************
Invalid type information
0:042> lmi vm ntdll
start end module name
7d600000 7d6f0000 ntdll (pdb symbols) ntdll.dll
Symbol file: c:\symbols\wntdll.pdb\9ED8E09C6723448380648C4456726AEF2\wntdll.pdb
Image path: C:\WINDOWS\system32\ntdll.dll
Image name: ntdll.dll
Timestamp: Fri Oct 22 07:27:10 2010 (4CC1831E)
CheckSum: 000C371A
ImageSize: 000F0000
File version: 5.2.3790.4789 // this is correct and
Product version: 5.2.3790.4789 // does correspond to target computer
File flags: 0 (Mask 3F)
File OS: 40004 NT Win32
File type: 2.0 Dll
File date: 00000000.00000000
Translations: 0409.04b0
CompanyName: Microsoft Corporation
ProductName: MicrosoftR WindowsR Operating System
InternalName: ntdll.dll
OriginalFilename: ntdll.dll
ProductVersion: 5.2.3790.4789
FileVersion: 5.2.3790.4789 (srv03_sp2_gdr.101019-0340)
FileDescription: NT Layer DLL
LegalCopyright: c Microsoft Corporation. All rights reserved.
更新:
我对我的问题做了进一步的阐述。我设法连接到客户端的实时流程并尝试调查那里的堆(heap -s),基本上我得到了相同的结果。
(1520.7c4): Wake debugger - code 80000007 (first chance)
eax=00000000 ebx=00327d50 ecx=00000000 edx=00000000 esi=0030b428 edi=002debe4
eip=7d61c876 esp=002df008 ebp=002df06c iopl=0 nv up ei pl nz na po nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000202
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\ntdll.dll -
ntdll!ZwReadFile+0x15:
7d61c876 c22400 ret 24h
0:000> !heap -s
*************************************************************************
*** Your debugger is not using the correct symbols ***
*** [...skipped...] ***
*** Type referenced: ntdll!_HEAP_ENTRY ***
*************************************************************************
Invalid type information
0:000> .reload
Reloading current modules
................................................................
....................................
0:000> !heap -s
*************************************************************************
*** Your debugger is not using the correct symbols ***
*** [...skipped...] ***
*** Type referenced: ntdll!_HEAP_ENTRY ***
*************************************************************************
Invalid type information
我认为我遇到了与本文 http://support.microsoft.com/kb/959207 中提到的问题类似的问题。环境和问题似乎是相同的,但 dll 版本不同,所以这不是我的解决方案。
我想我必须将此问题上报给 Microsoft。
有人知道我应该问这个问题吗?
最佳答案
如果转储是使用 64 位工具创建的,则可能会发生这种情况。 Tess's blog 有很好的信息这解释了转储位数很重要的原因。
关于debugging - !堆失败。 ntdll!_HEAP_ENTRY 的类型信息无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5335202/
我最近在研究私有(private) API。我尝试在运行时使用 LoadLibrary 和 GetProcAddress 调用 ntdll.dll 中的 NtOpenFile 等函数。幸运的是,它成功
几个星期以来,我遇到了这种情况,这让我非常沮丧, 我的程序调试得很好,没有错误,当我运行程序时,它会执行工作,几秒钟后它终止于“中断继续”选项,当我查看调用堆栈时,事实证明它是来自 ntdll.dll
我链接到 ntdll.lib 以使用 ZwQueryInformationProcess 并使用多线程运行时库。 ntdll 似乎定义了一些crt 函数。因此,当我链接它并使用运行时库时,我会遇到链接
当 ntdll.dll 映射到新进程时,以及任何 ntdll 的进程初始化运行之前,我想使用以下命令闯入 WinDBG。 sxe ld ntdll.dll ;g 然而,这个技巧根本不起作用, ModL
我在调用 Ntdll.dll 的导出方法时遇到了一些问题 在 VS2012 的 Debug模式下,我得到: Run-Time Check Failure #0 - The value of ESP w
我的程序在执行结束时崩溃,甚至看不到堆栈展开信息。我只能看到这个“ntdll!kifastsystemcallret”,有些人可以透露一些信息吗? 最佳答案 KiFastSystemCallRet 表
知道我为什么会收到此错误吗? 这是完整的错误: First-chance exception at 0x77202282 (ntdll.dll) in Test.exe 0xC0000005: Acc
我正在使用带有 boost v1.52.0 的 Visual Studio 2011 C++ 刚刚添加了在子目录中搜索文件的方法,并开始在程序关闭时出现此错误: Unhandled exception
是否有仅使用 ntdll.dll 的 API 调用或任何其他类似方式在堆栈上分配内存? 我知道 alloca() 会这样做,但我不能使用它,因为我只能使用 ntdll.dll 中的函数。 谢谢! 最佳
我正在尝试从 Windows Server 2003 SP2 x86 上的完全转储内存文件转储堆信息。转储是为在 Windows Server 2003 SP2 x64 计算机上运行的 32 位混合(
我正在调试崩溃转储,该转储出现访问冲突异常 (0xC0000005)。 AVE 来自跳转到不属于进程中任何 2 个加载模块的地址: 什么会导致这个过程这么早发生? 该进程似乎正在映射内存 (_ZwCr
当我尝试运行我的程序时,它从未进入 main() 函数,而是挂起。但是,我的程序在多次调用 ntdll.dll 之后,作为堆栈中的第一个调用,我的程序在我的一个类中抛出了异常。异常似乎是导致我的程序因
我正在研究一个小的刚体模拟。我使用 Irrlicht 引擎进行显示,并使用 openMesh 处理网格。 现在我使用 VerySleepy 分析了我的应用程序,发现大部分时间花在了以下函数中(不包括花
我刚刚偶然发现执行此操作 GetModuleHandle("ntdll.dll") 无需事先调用 LoadLibrary("ntdll.dll") . 这意味着 ntdll.dll 已经加载到我的进程
我有一个我编写的应用程序间歇性崩溃,但我无法在应用程序层捕获异常。我总是在事件日志中得到一个条目,但没有给我太多信息: Faulting application name: BCS-UI.exe, v
我目前正致力于通过 dll 注入(inject) Hook ntdll.dll 调用。首先,我通过 CreateRemoteThread() 在现有进程中创建线程然后我通过 LoadLibrary 加
我有以下代码,其中数组在函数中动态声明。以下程序在 Visual Studio 2013 中完美编译。但是,在运行时,代码在打印数组时中断,错误代码如下: 检测到严重错误 c0000374WaveEq
我做了一个非常简单的程序,它为我自动化了一些事情。我用 C++ 编写了它,它在 Windows 上运行。在 Codeblocks IDE 内部使用 GDB 对其进行调试时,我突然得到了许多断点。我不知
我使用 Delphi Sampling Profiler 分析了我的应用程序的一部分. Like most people ,我看到大部分时间都花在了里面 ntdll.dll . Note: i tur
我试图了解 Windows API 如何创建进程,以便我可以创建一个程序来确定无效的 exe 失败的位置。我有一个调用 kernel32.CreateProcessA 的程序。在 OllyDbg 中,
我是一名优秀的程序员,十分优秀!