gpt4 book ai didi

c - 加载.dmp文件定位错误代码,但崩溃发生在意想不到的地方(在ntdll.dll中)

转载 作者:行者123 更新时间:2023-11-30 19:32:08 25 4
gpt4 key购买 nike

我编写了一个访问 NULL 指针的函数,如下所示:

CORRUPTDLL_API int fncorruptDLL(void)  
{
int *p = NULL;
printf("%d\n", p[0]);
return 0;
}

然后在主函数中调用这个函数,如下所示:

int main()
{
fncorruptDLL();
return 0;
}

不出所料,它在“printf”函数中中断,我可以从堆栈帧中清楚地看到崩溃位置 crash place .

然后我用“Windbg”创建了一个“.dmp”文件,并用VS2015打开它,开始调试。结果出现一个页面,显示“No Source available”page虽然我已经加载了正确的“.pdb”文件并设置源代码路径,如下所示:set source code path .

为什么会发生这种情况?我的意思是它没有运行到我的函数中,我只能在“ntdll.dll”中看到崩溃(来自堆栈帧)。但我不熟悉汇编语言。这是“.dll”吗? dmp”文件真的有效吗?

我使用“adplus”来监视可执行文件

C:\Program Files (x86)\Debugging Tools for Windows (x86)\adplus.exe -crash -pmn winDgb_Test.exe  -FullOnFirst -o D:\VSproject\case-201710\winDgb_Test\Debug\dum

但是当程序崩溃时,它没有生成任何“.dmp”文件。问题出在哪里?

最佳答案

当您开始调试可执行文件并在调试器下启动该可执行文件(在 WinDbg 中:文件/打开可执行文件)时,程序将尽可能短地运行,然后停止在initial breakpoint (MSDN)处。 .

此时,您可以设置您的调试器,例如定义异常行为、添加断点、加载扩展等。完成后,按 g 让程序运行。然后重现崩溃,然后创建崩溃转储。

关于c - 加载.dmp文件定位错误代码,但崩溃发生在意想不到的地方(在ntdll.dll中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47425534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com