zoukankan      html  css  js  c++  java
  • 4、从汇编语言到Windows内核编程笔记(4)

    了解机器码

    X86所有指令的机器码长度不定,且连续排列,因此读取机器码的唯一方法是从头开始逐条解析指令。

    nop指令是单字节,可以用作填充替换长指令后的多余区域。

    XDE32反汇编引擎。

    关于进一步机器码的构成分析,可以看[6]

    CPU权限级与分页机制

    Intelx86通过ring级别进行访问控制,共分四级。R0最高,R3最低。现在的操作系统只分两级R0和R3.R0代表内核态,R3代表用户态。

    运行模式:

    实模式:CPU启动后处于实模式。只能访问1MB内存,单任务,所有任务都运行在R0层。如DOS

    保护模式:支持分段、分页,可运行多任务。如Linux,Window.

    系统管理模式(SMM)

    虚拟8086模式:为了能在保护模式中运行原来能在实模式下运行的程序。

    X86处理器的地址分段模式包括如下形式:

    平坦模式:线性地址(页目录,页,页中偏移)。

    多段模式:如数据段,地址段,etc

    32windows中,04G线性内存空间。02G为应用程序内存空间(处于其中每个进程都有独立的内存空间),2G~4G为系统内核空间(内核进程完全共享)。R3级无法访问24G内存空间。

    X86中,cr0~cr4为控制寄存器。Cr0为控制R0是否可以写只读页,cr2存放发生页中断时的线性地址,cr3中保留页中目录基地址,cr4来进行CPU的架构扩展。

    内核进程和应用程序通信的话:内核程序生成一个设备对象,并为这个对象生成一个有应用层可以访问的符号连接。设备对象用 IoCreateDevice生成,符号连接用IoCreateSymbolicLink生成。应用程序可以用CreateFile打开这个文件,通过 ReadFile,WriteFile等和DeviceIoControl来进行通信。一个和驱动程序通信的进程应当被开发成为一个服务程序,因为服务程序拥有管理员权限。

    其它
    一个可控制的内核程序就可以称为一个Rootkit。库文件LIB实际上是多个OBJ文件的集合。
    参考

    [1] http://www.cnblogs.com/phinecos/archive/2009/02/19/1393803.html
    [2] http://www.cnblogs.com/qsilence/archive/2009/06/11/1501511.html
    [3 http://msdn.microsoft.com/en-us/library/ff557565%28VS.85%29.aspx
    [4] http://www.cnblogs.com/wanghao111/archive/2009/05/25/1489041.html
    [5] Windows驱动编程基础教程.doc
    [6] 天书夜读-从汇编语言到windows内核编程(http://download.csdn.net/source/2754275)
    [7] Windows DDK
    [8] http://blog.vckbase.com/windowssky/archive/2008/06/18/30866.html
    AVP主动防御之隐藏进程

    推荐其它书籍

    Programming the micfosoft windows Driver Model:驱动开发
    windows环境下的32位汇编语言程序设计:汇编学习
    软件调试,张银奎:软件调试
    ROOTKITS Windows内核的安全防护,Butler,J
    《网络盗窃——10个黑客入侵的故事》
    http://www.pediy.com/
  • 相关阅读:
    Mysql实战面试题
    初探Google Guava
    Spring IOC核心源码学习
    用3句话像老太太讲清楚什么是数据库
    matlab如何读入mat型的矩阵
    工作记忆数据处理
    功能连接
    奖励学习
    格兰杰因果关系及其在医学影像数据中的应用
    GC wm
  • 原文地址:https://www.cnblogs.com/mydomain/p/1852623.html
Copyright © 2011-2022 走看看