感谢回复,我的问题应该不是32位和64位导致的,因为同一个程序,可能此次能读取,下一次就不能读取了。我自己感觉大概率是PEB被移到硬盘了,因为昨天用MDL映射,蓝屏后dump文件有一句PEB is paged out (Peb.Ldr = 00000000`7efdf018)。但是您提的确实也是我程序的一个问题,我应该在程序中对32位程序也做个判断,目前确实没有区分32位和64位程序。
感谢楼上各位的回答,目前这个问题找到原因了,是因为我外层的函数是一个遍历函数,通过active process link来获取EPROCESS,然后再遍历此EPROCESS下的模块。但是我以为active process link里面都是在运行的进程,实际上是有退出的进程,已经退出的进程读取peb就会失败。虚拟机不会出错应该是开系统后就测试,并没有退出的进程,而真机上有很多已退出的进程。