4、从汇编语言到Windows内核编程笔记(4)

简介: 了解机器码 X86所有指令的机器码长度不定,且连续排列,因此读取机器码的唯一方法是从头开始逐条解析指令。 nop指令是单字节,可以用作填充替换长指令后的多余区域。 XDE32反汇编引擎。 关于进一步机器码的构成分析,可以看[6]。

了解机器码<?xml:namespace prefix = o />

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/
目录
相关文章
|
2天前
|
缓存 网络协议 数据安全/隐私保护
[运维笔记] - (命令).Windows server常用网络相关命令总结
[运维笔记] - (命令).Windows server常用网络相关命令总结
209 0
|
2天前
|
算法 Linux Windows
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
在Windows环境下为FFmpeg集成字幕渲染库libass涉及多个步骤,包括安装freetype、libxml2、gperf、fontconfig、fribidi、harfbuzz和libass。每个库的安装都需要下载源码、配置、编译和安装,并更新PKG_CONFIG_PATH环境变量。最后,重新配置并编译FFmpeg以启用libass及相关依赖。完成上述步骤后,通过`ffmpeg -version`确认libass已成功集成。
21 1
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
|
2天前
|
编解码 Linux Windows
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
本文档介绍了在Windows环境下如何为FFmpeg集成libopus和libvpx库。首先,详细阐述了安装libopus的步骤,包括下载源码、配置、编译和安装,并更新环境变量。接着,同样详细说明了libvpx的安装过程,注意需启用--enable-pic选项以避免编译错误。最后,介绍了重新配置并编译FFmpeg以启用这两个库,通过`ffmpeg -version`检查是否成功集成。整个过程参照了《FFmpeg开发实战:从零基础到短视频上线》一书的相关章节。
29 0
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
|
2天前
|
Rust 前端开发 Windows
blog-engine-06-pelican 静态网站生成 windows11 安装实战笔记
这篇内容是一个关于在Windows 11上安装和使用静态网站生成器的教程,主要包括对多个博客引擎(如Jekyll、Hugo、Hexo等)的简介和对比,以及详细步骤教你如何在Windows环境下安装Python、Pelican、Rust和Cargo。作者首先介绍了Python和Pelican的安装,然后在遇到依赖问题时,引导读者安装Rust和Cargo来解决。最后,通过`pelican-quickstart`创建项目,编写Markdown文章并生成、预览站点。
|
2天前
|
编解码 Linux Windows
FFmpeg开发笔记(十一)Windows环境给FFmpeg集成vorbis和amr
在Windows环境下,为FFmpeg集成音频编解码库,包括libogg、libvorbis和opencore-amr,涉及下载源码、配置、编译和安装步骤。首先,安装libogg,通过配置、make和make install命令完成,并更新PKG_CONFIG_PATH。接着,安装libvorbis,同样配置、编译和安装,并修改pkgconfig文件。之后,安装opencore-amr。最后,重新配置并编译FFmpeg,启用ogg和amr支持,通过ffmpeg -version检查是否成功。整个过程需确保环境变量设置正确,并根据路径添加相应库。
32 1
FFmpeg开发笔记(十一)Windows环境给FFmpeg集成vorbis和amr
|
2天前
|
API C++ Windows
windows编程入门_链接错误的配置
windows编程入门_链接错误的配置
19 0
|
2天前
|
机器学习/深度学习 安全 数据安全/隐私保护
Windows系统安装Jupyter Notebook并实现公网访问内网笔记服务
Windows系统安装Jupyter Notebook并实现公网访问内网笔记服务
|
2天前
|
Linux 编译器 C语言
FFmpeg开发笔记(二)搭建Windows系统的开发环境
在Windows上学习FFmpeg通常较困难,但通过安装预编译的FFmpeg开发包可以简化流程。首先需要安装MSYS2来模拟Linux环境。下载并执行MSYS2安装包,然后修改msys2_shell.cmd以继承Windows的Path变量。使用pacman安装必要的编译工具。接着,下载预编译的FFmpeg Windows包,解压并配置系统Path。最后,在MSYS2环境中运行`ffmpeg -version`确认安装成功。欲深入学习FFmpeg开发,推荐阅读《FFmpeg开发实战:从零基础到短视频上线》。
40 4
FFmpeg开发笔记(二)搭建Windows系统的开发环境
|
2天前
|
Windows
火山中文编程 -- 第一个windows程序
火山中文编程 -- 第一个windows程序
13 0
|
2天前
|
编译器 API Windows
windows编程基础
windows编程基础
16 0