Debugging 从转储文件中提取unicode文本

Debugging 从转储文件中提取unicode文本,debugging,windbg,Debugging,Windbg,我有一个程序冻结(特别是sql开发人员),其中有一些未保存的文件。在终止进程之前,我使用sysinternal的进程资源管理器创建了一个转储文件。我真的只损失了几个小时的工作,但我认为这将是一个很好的学习经验,看看我可以从转储文件中提取什么。到目前为止,我已经下载并运行了windbg,并找到了我的文字: s -u 0x00000000 L?0xffffffff "text I know exists in my file" 从那里我得到了相关的内存地址,可以在内存窗口中查看文本和大部分文件。然

我有一个程序冻结(特别是sql开发人员),其中有一些未保存的文件。在终止进程之前,我使用sysinternal的进程资源管理器创建了一个转储文件。我真的只损失了几个小时的工作,但我认为这将是一个很好的学习经验,看看我可以从转储文件中提取什么。到目前为止,我已经下载并运行了windbg,并找到了我的文字:

s -u 0x00000000 L?0xffffffff "text I know exists in my file"

从那里我得到了相关的内存地址,可以在内存窗口中查看文本和大部分文件。然而,从这里开始,我有点被卡住了。我知道我可以使用du命令转储文本,但是我应该使用什么样的策略来确定开始和结束范围。这是一个1G的转储,所以我从不担心将0x00000000转储到0xFFFFFF,因为我没有大多数编辑器可以打开的文本文件。有没有办法只转储用户内存或非代码内存等?无论如何,它都不一定是完美的。我只想在textpad中打开转储文件,但unicode数据没有显示,只有偶尔的ascii(可能是因为textpad无法检测类型或因为它是一个64位转储)。

您也可以从sysinternal(现在是MS)中尝试strings.exe实用程序,并将所有输出(unicode和ascii)重定向到文本文件。然后在文本文件中搜索(或直接用眼珠搜索)您要查找的内容。

仔细阅读您的文章后,您正在寻找一种编程方法,在内存区域中搜索字符串并转储地址?不,不是编程方法。我认为这纯粹是一个调试练习。我希望通过完成这项任务来学习如何更好地导航转储文件。因此,您正在寻找一种策略来搜索进程内存空间中的字符串?除了只搜索进程堆之外,我无法立即想到一个有效的策略,您应该能够通过查看
来确定这一点!寻址
输出并查看哪个堆增加,然后只搜索这些堆。另一种可能是确定字符串的大小,并仅搜索与该大小匹配的分配。您也可以尝试从sysinternals(现在是MS)中使用strings.exe实用程序,并将所有输出(unicode和ascii)重定向到文本文件。然后搜索文本文件(或者直接搜索它)以查找您要查找的内容。@Marc,虽然您的方法并没有教会我很多关于windbg的知识,但它绝对满足OP的要求。您是否愿意正式回答,以便我给您评分?虽然不完全是我要查找的调试示例,但相对于标题,这是完全正确的。我想windbg稍后将不得不等待,因为strings.exe拯救了我丢失的工作:)。