什么是0x%08lx?

One*_*key 5 debugging crash-dumps

我最近在工作的XP盒子里得到了很多蓝屏.事实上,我下载了很多用于Windows(x86)的调试工具,并且一直在分析崩溃转储.事实上,我已经将转储更改为mini,否则我可能最终会在每周工作半天,等待蓝屏完成记录详细的崩溃日志.

几乎无一例外每个转储告诉我蓝屏的原因是某种内存错误分配或错误引用,0x%08lx的内存引用0x%08lx而不能是%s.

出于好奇心,我把"0x%08lx"放入谷歌,发现很多崩溃转储包含了这个奇怪的消息.我是否认为0x%08lx是一个有意义的东西?"%s"是结尾句子"内存不能是%s"的一部分,看起来肯定是缺少变量或其他东西.

有谁知道这条消息的来源?它实际上应该是有用的,它应该是什么样的?

这不是我一直在努力解决的重大问题.奇怪的是,很多人都应该在如此多的故障转储中看到这一点,并且没有人会说:"哦,崩溃转储没有正确地完成那个消息它应该读......"

我只是好奇是否有人知道这个奇怪的错误消息artefact的目的.

ten*_*our 11

0x%08lx并且%s几乎可以肯定是C函数sprintf的格式说明符.但看起来驱动程序开发人员在错误处理代码中的工作与在关键代码中的工作一样好,因为您不应该在GUI中看到这些说明符 - 它们应该替换为有意义的值.

0x%08lx 应该变成类似"0xE001D4AB"的东西,一个十六进制的32位指针值.

%s应该用另一个字符串替换,在这种情况下是描述.就像是

0xE001D4AB的内存引用 0xE005123F并且无法读取.

请注意,我编写了值.基本上,发生了内核模式访问冲突.希望在迷你转储中你可以看到哪个模块导致它并卸载/更新/无论如何.


And*_*ini 7

我相信它只是内存地址的占位符.0x是一个字符串前缀,它会通知用户它是十六进制的,%08lx而是一个long int(l)转换为十六进制(x)的实际占位符,填充为8个零(08).