标题: 在kd中切换用户态进程的一点小知识 https://scz.617.cn/windows/201711161231.txt 在kd中切换用户态进程时,一般用".process",当然配合适当的参数,".thread"、 ".context"也能到达类似目的。此处只说".process",并且不谈"/i"与"/p /r"的区 别,假设你早已门儿清。 提一个问题,有人想过".process"与".process /p"区别何在吗,或者这样问,不带 "/p"会死人吗? 答案是肯定的,不带"/p"会死人。"/p"实际对应".cache forcedecodeuser",它会清 空kd所用缓存。用".process"切换进程时,这个缓存必须清,否则会出现A进程上下 文中的映射关系被调试器用于访问B进程空间,从而得到错误的数据。 设计一个实验。在两个不同的用户态进程空间的同一虚拟地址处分配一页内存,写入 不同数据。在内核态先查看A进程的该虚拟地址,然后裸切(不带/p)至B进程,查看B 进程的该虚拟地址。发现看到的内容相同,因为某些映射关系被错误复用。 kd究竟在缓存里保存了什么,哪些命令受缓存影响,这些从帮助手册是看不出来的, 实验只能瞎碰运气,但我不打算逆向工程,这不是刚需。最初只是好奇为什么一堆人 说必须如此,却没有解释为什么必须如此。 小结一下,"/i"切换是最靠谱的,"/p /r"其次,裸切属于找死,还是死都不知道怎 么死的那种。