内核编程学习笔记(001)

    技术2022-05-20  43

    1. WDK windows Driver Kit 下载并安装在本机上,安装路径要避免有空格,最新版本还会集成了WinDbg,很方便

     

     

    2. 然后编写第一个工程

     

    ******驱动主程序myfirst.c

     

     

    #include <ntddk.h>

     

     

    //卸载函数

     

    VOID DriverUnload(PDRIVER_OBJECT driver)

     

    {

     

    DbgPrint("first:Driver is unloading.../r/n");

     

    }

     

     

    NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)

     

    {

     

    #if DBG

     

    _asm int 3

     

    #endif

     

    //内核模块的入口

     

    DbgPrint("first:Hello, Puztion!/r/n");

     

     

    //设置一个卸载函数

     

    driver->DriverUnload = DriverUnload;

     

    return STATUS_SUCCESS;

     

    }

     

    ***********************分割线*********************

     

    ******有一个makefile文件

     

     

    !IF 0

     

     

    Copyright (C) Microsoft Corporation, 1999 - 2002

     

     

    Module Name:

     

     

        makefile.

     

     

    Notes:

     

     

        DO NOT EDIT THIS FILE!!!  Edit ./sources. if you want to add a new source

     

        file to this component.  This file merely indirects to the real make file

     

        that is shared by all the components of Windows NT (DDK)

     

     

    !ENDIF

     

     

    !INCLUDE $(NTMAKEENV)/makefile.def

     

    其实上这段英文的意思就是说,这个文件内容好无聊,你永远也不要修改他(ps:我大致翻译了一下,意思应该差不多)看了这个文件的结构,其实就是最后一行起作用的:

     

    !INCLUDE $(NTMAKEENV)/makefile.def

     

     

    ***********************分割线*********************

     

    ******有一个SOURCES文件

     

     

    TARGETNAME=first

     

    TARGETTYPE=DRIVER

     

    TARGETPATH=obj

     

    SOURCES=myfirst.c

     

     

    其中TARGETPATH这行指定生成驱动所在的路径/obj/first.sys

     

    其他看英文就差不多知道意思了

     

     

    3. 在wdk运行 在对应系统的x86 Checked Build Environment下进入上述文件目录

     

    build 就可以生成了

     

    还有,特别注意,那三个文件的对应目录不能出现空格

     

    build -c 是清楚先前生成的文件,重新生成

     

     

    4. 要用到的工具有如下

     

    Dbgview //用于查看内核的输入和输出

     

    SRVINSTW //用于创建服务来加载驱动

     

    DriverMonitor //用于加载驱动

     

    Kernel Detective //一款集成的工具,可以查看内核,查看驱动信息等等

     

     

    5. Dbgview 要注意的是要把 Capture Kernel 勾选上,捕获内核输出信息

     

     

    6. SRVINSTW 要注意的是

     

    ①在输入目标程序路径的时候是无法选中sys文件的,要手动输入路径

     

    ②选择设备驱动

     

    ③NT驱动目标不用,要设置为手动启动服务

     

    ④要记得服务名,在windows服务管理里是看不到这个服务的,要用SRVINSTW来卸载服务

     

    ⑤用 net start/stop 服务名 这命令就可以启动对应的服务

     

     

    7. DriverMonitor暂时还不是很会用,就会加载便行

     

     

    8. 用WinDbg双机调试驱动,在vmware 里添加一个 串口(Serial Port)然后使用管道 命名为 //./pipe/com_1 (这个一般是默认的), 选择 this other end is an application。

     

     

    9. 在 虚拟机中的系统 的启动文件 添加多一个启动方式,就是复制原先的一个启动方式,后面加上 /fastdetect /debug /debugport=com1 /baudrate=115200

     

     

    10. 创建一个批处理启动WinDbg

     

    start windbg.exe -b -k com:port=//./pipe/com_1,baud=115200,pipe

     

     

    11. 然后在WinDbg里 FILE->Symbol File Path中选择生成 sys驱动文件的目录 以去加载符号文件

     

     

    12. 调试中

     

    g: 运行

     

    u: 反汇编

     

    bp: 下断点

     

    bl: 列出断点

     

    be: 启动断点

     

    bd: 停止断点

     

    bc: 删除断点

     

    一般上指令和一般的debug差不多

     


    最新回复(0)