zoukankan      html  css  js  c++  java
  • Kernel Mode Debugging 初步 一

    什么是kernel mode debugging?

    Kernel debugging是使用WinDBG来检验受限制的内存, 调用栈, 内部数据结构, 内部布局, 以及运行在kernel mode的操作系统组件和驱动的系统信息的过程.

    在kernel mode下, 你debug的是整个操作系统, 而不是某一个应用程序, 线程, 或者进程. 这意味着你对程序的执行拥有完全的控制权, 并且需要保证你不会通过观察系统而破坏任何状态. 要想进行kernel mode debugging, 需要两台机器.

    User mode应用程序通过调用在NTDLL.dll中的函数来访问kernel mode. 因为NTDLL.dll中的函数有相对应的在NTOSKRNL.exe中的函数调用. 举个例子, NTDLL中的WriteFile包装了NTOSKRNL.exe中的NTWriteFile方法.

    image

    Windows使用两种处理器内存访问模式, 分别为User Mode和Kernel Mode. 用户的程序运行在User Mode, 操作系统运行在Kernel Mode.

    CPU的硬件中实现了访问模式的保护(Ring 0和Ring 3).

    如果应用程序不通过kernel mode的access check的话, 是绝对不可能访问到其他进程的内存的, 它只能访问它自己的内存.

    User Mode应用程序不能直接执行kernel中的代码. Windows使用内存分区来阻止这种不被允许的情况发生.

    大多数的Kernel mode的API都是没有公开和有文档记录的, 所谓的文档就是Windows Driver Kit.

    从user mode中调用操作系统服务的时候, 发生的最后一件事就是执行"切换到kernel mode"这样一条汇编指令(SYSENTER). 这会引发一个异常(或中断), 该异常会被Kernel Mode中的系统处理.

    回到user mode是通过驳回(也可以说搞定)那个异常(或中断)处理而完成的.

    代码放到内核中运行是基于如下的某个原因:

    • User Mode调用操作系统函数
    • 操作系统专用线程, 比如说memory manager.
    • 硬件设备来的中断

    image

    配置Kernel Debugging的步骤这里略过, setup的步骤网上可以找到, 资料很多. 我们这里主要集中在概念和原理上.

  • 相关阅读:
    Java 动态代理 两种实现方法
    aspectj ----- 简介
    url中传递中文参数时的转码与解码
    JDK各个版本比较 JDK5~JDK10
    单例开始究竟能问多深及终极解决方案
    Map、Set、List 集合 差别 联系
    HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList 底层实现
    springMVC :interceptors
    Shiro在Spring session管理
    SpringMVC Shiro与filterChainDefinitions
  • 原文地址:https://www.cnblogs.com/awpatp/p/2665368.html
Copyright © 2011-2022 走看看