蒙贾神指点.
对于kernel32.dll这种系统dll, 每一个进程都会加载一份, 映射到自己的进程空间. 实际上物理内存上还是只有一份dll.
如果对进程自己的dll进行修改, 这时操作系统会触发写时复制机制, 重新再复制一份dll的代码.
这样既不会破坏进程访问内存的封装性, 又不会映射多份冗余的dll代码.
因此, 在应用层hook系统dll只能影响到本进程. 只有在驱动层hook才能影响到所有的进程.