Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核调试

帖子发起人: soloo   发起时间: 2009-10-21 00:30 上午   回复: 6

Print Search
帖子排序:    
   2009-10-21, 00:30 上午
showt1me 离线,最后访问时间: 2008/11/30 19:43:24 soloo

发帖数前200位
注册: 2008-11-04
发 贴: 4
【PTE冲突蓝屏DUMP求助】
Reply Quote

蓝屏DUMP:   http://www.cnlvker.com/download/dump.rar (好像传不了附件)

在关机的时候经常蓝屏,感觉是R3与R0的共享内存区造成的PTE冲突:
PFN_LIST_CORRUPT (4e)
Typically caused by drivers passing bad memory descriptor lists (ie: calling
MmUnlockPages twice with the same list, etc).  If a kernel debugger is
available get the stack trace.
Arguments:
Arg1: 00000099, A PTE or PFN is corrupt
Arg2: 00000000, page frame number
Arg3: 00000001, current page state
Arg4: 00000000, 0

Debugging Details:

dump显示PTE分页冲突,驱动传入错误的内存描述符列表错误 (可能2次释放导致)


要通宵改了,项目里我的代码老蓝屏,组长快把我杀了
多谢各位老大们指教,谢谢!!


IP 地址: 已记录   报告
   2009-10-21, 09:30 上午
WANGyu 离线,最后访问时间: 2012/9/10 3:34:00 王宇

发帖数前10位
男
注册: 2007-05-08
发 贴: 306
Re: 【PTE冲突蓝屏DUMP求助】
Reply Quote
说的没错,要在你们组长杀你之前检查你的共享内存代码,看看哪里会导致异常减少ShareCount..

大致是这样:

MiDecrementShareCount() 函数会检查当前 Pfn 是否位于标准的 (StandbyPageList) 或活动的 (ActiveAndValid) 链表,若是就减少计数 (Pfn1->u2.ShareCount -= 1;) 再继续工作;若不是就蓝屏:

    if (Pfn1->u3.e1.PageLocation != ActiveAndValid &&
        Pfn1->u3.e1.PageLocation != StandbyPageList) {
            KeBugCheckEx (PFN_LIST_CORRUPT,
                      0x99,
                      PageFrameIndex,
                      Pfn1->u3.e1.PageLocation,
                      0);
    }

你提交的参数是已释放链表 (FreePageList),不是前述两者,显然导致上述蓝屏。

typedef enum _MMLISTS {
    ZeroedPageList,
    FreePageList,
    StandbyPageList,  //this list and before make up available pages.
    ModifiedPageList,
    ModifiedNoWritePageList,
    BadPageList,
    ActiveAndValid,
    TransitionPage
} MMLISTS;

微软的建议是检查你的 MmUnlockPages() 等调用情况,看看哪里多释放了一次。
IP 地址: 已记录   报告
   2009-10-21, 18:00 下午
showt1me 离线,最后访问时间: 2008/11/30 19:43:24 soloo

发帖数前200位
注册: 2008-11-04
发 贴: 4
Re: 【PTE冲突蓝屏DUMP求助】
Reply Quote
多谢王兄拔刀相助!

检查了N遍,是2个驱动用了一个驱动控制BUFFER造成:

DeviceIoControl(xxxdevice,
xxxContorlCode,
controlbuff,
256,
controlbuff,
256,
&dw,
0);

2个驱动用的一个controlbuff,dw

全局变量 DWORD controlbuff[64];

其中一个驱动MmMapIoSpace映射了controlbuff
可能这样造成的2次释放冲突


IP 地址: 已记录   报告
   2009-10-21, 18:50 下午
WANGyu 离线,最后访问时间: 2012/9/10 3:34:00 王宇

发帖数前10位
男
注册: 2007-05-08
发 贴: 306
Re: 【PTE冲突蓝屏DUMP求助】
Reply Quote
呵呵 上午的时候也看到 solo 在 debugman 的帖子了

不过我觉得用 MmMapIoSpace 映射环3地址做通讯不太好呀,同步什么的都是问题,写写 Demo 可以,做产品还是别呀...

^_^
IP 地址: 已记录   报告
   2009-10-21, 19:15 下午
MJ0011 离线,最后访问时间: 2009/12/24 22:33:41 MJ0011

发帖数前10位
注册: 2008-04-24
发 贴: 112
Re: 【PTE冲突蓝屏DUMP求助】
Reply Quote
恩,总结一句话,共享内存,蓝了活该
IP 地址: 已记录   报告
   2009-10-22, 14:03 下午
showt1me 离线,最后访问时间: 2008/11/30 19:43:24 soloo

发帖数前200位
注册: 2008-11-04
发 贴: 4
Re: 【PTE冲突蓝屏DUMP求助】
Reply Quote

 WANGyu wrote:
呵呵 上午的时候也看到 solo 在 debugman 的帖子了 不过我觉得用 MmMapIoSpace 映射环3地址做通讯不太好呀,同步什么的都是问题,写写 Demo 可以,做产品还是别呀... ^_^

MmMapIoSpace 的模式确实不好,我再找找资料,改改方法,嘿嘿

 


IP 地址: 已记录   报告
   2009-10-22, 14:04 下午
showt1me 离线,最后访问时间: 2008/11/30 19:43:24 soloo

发帖数前200位
注册: 2008-11-04
发 贴: 4
Re: 【PTE冲突蓝屏DUMP求助】
Reply Quote

 MJ0011 wrote:
恩,总结一句话,共享内存,蓝了活该

多谢郑哥提醒,马上调整 @@


IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » 【PTE冲突蓝屏DUMP求助】

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.