第1章:基础知识

x86系列的CPU采用 Little-ending 字节序,而网络协议采用的是 Big-ending.

用于16位 Windwos 的API称为 Win16 , 32/64位 的 API 称为 Win32 .

Windows 运转的核心是动态链接.

①kernel32.dll 主要负责操作系统核心功能服务,包括线程与进程控制,内存管理,文件访问等.

②user32.dll 主要负责处理用户接口,包括键盘和鼠标输入,窗口和菜单管理等.

③gdi32.dll 主要负责图形设备接口,允许程序在屏幕和打印机上显示文本和图像.

以及Advapi32.dll(对象安全性,注册表操作) , Comctl32.dll(通用控件,即GUI图形用户模块) , Comdlg32.dll(公共对话框,应用程序公用对话框模块,用于例如打开文件对话框) ,

Shell32.dll(用户界面外壳)和网络( Netapi32.dll ) .

 

虽然Win32 API是一个基于C语言的接口,但是Win API中的函数可以由用不同语言编写的程序调用,只需要遵守调用规范.

 

借用网上CSDN的一张图展示什么是 NT( new technology ) 架构:

 

 图形界面的出现正是由于微软推出的 NT 架构.

Windows NT采用用户模式与核心模式的分层设计并且是抢占式可重入的。可运行在单处理器或对称多处理器(SMP)上,并利用I/O请求包与异步I/O来处理所有的I/O请求。在Windows 2000之后采用的都是 Windows NT架构.

在NT系统中,系统核心采用的是 Unicode 标准字符集( ASCII 字符集的拓展). Win32 API 能接受这两种字符集,但是字符转换需要占用系统资源.

在 Win32 API 函数字符集中 , A 代表 ASCII , W 代表 WideChars (即 Unicode ). 前者是字节,后者是字节字符.在编写函数时,不需要关系用哪种版本,直接使用原函数即可.开发工具的编译模块会根据设置来决定使用哪种函数.

 

以 MessageBox 为例:

 

WoW64 ( Windows On Windows 64-bit ) 是64位 Windwos 操作系统的子系统,使得大多数应用程序在不进行修改的情况下运行在64位操作系统下.

Windows 的64位操作系统文件放在 " System32 " 文件夹中 , Windows \ SysWOW64 文件夹存储32位系统文件.

当64位程序加载时,会加载64位的 DLL 文件.

32位程序加载时 WOW64 建立 ntdll.dll 需要的运行环境,并将CPU模式切回32位,并运行加载器. WOW64 捕获程序对32位 ntdll.dll 的调用并重定向到 64位 的版本.在原生系统调用返回之前,将64位的值转化为32位.

 

Windows 消息

Windows本身是由消息驱动的,存在两种消息队列:系统消息队列和应用程序消息队列.

事件发生时,首先会将消息放入系统消息队列,然后再复制到应用程序消息队列,应用程序监控消息,并将消息发送至相应的窗口函数.消息是非抢占的,先来先服务.

 

消息成功投递则返回True.

 

虚拟内存

以 Win32 为例 , 232  = 4 x 230 = 4 G.即拥有 4G 的虚拟内存空间.此时不区分代码段和数据段.

 

①应用程序启动时,操作系统创建一个进程,并分配2G的虚拟地址.2 G = 231.只需要4字节的空间来表示一个资源的地址.

②虚拟内存管理器负责维护应用程序和物理地址间的数据交流.

③虚拟地址中仅仅保存有需要的资源的物理地址,当需要时才会被读入物理内存.若已在内存中,则只需要引用其地址即可.

④不同应用程序之间的地址空间是彼此隔离的.

posted @ 2020-08-04 15:40  Rev_omi  阅读(105)  评论(0编辑  收藏  举报