1.2文本字符
具体已经在王爽老师《汇编语言》中学习过。
本节主要介绍字符集和字节存储顺序。
ASC2与Unicode字符集
罗列了用十六进制数(Hex)和十进制(Dec)表示的部分常用的asc2值。
然后介绍了Unicode:是Asc2码的一个拓展,在windows中使用二字节进行编码,称为宽字符集。
其中所有字符都是16进制,asc2码被扩充为16位(高位扩充为0)。
注:1字节对应8位二进制。
字符存储顺序
分为大端和小端
1.3Windows操作系统
win32API函数
在windows发展的初期,程序员能够使用的只有API函数。这些函数提供程序运行所需要的窗口管理,图形设备接口,内存管理等等内容。这些功能以函数库形式组织在一起形成了windows应用程序编程接口(API),所以可以认为API是整个windows框架的基石,下面是操作系统核心,上面是应用程序。
用于16位Windows的api为“Win16”,同理“Win32”。64位Windows用的还是Win32的函数名,但是使用64位实现。
Windows运转的核心是动态链接。何为动态链接,可以简单地理解为在编译的时候只留下接口,运行时候再去调用。Windows提供了丰富的可供应用利用的函数调用,这些函数采用动态链接库(DLL)实现。
WinAPI是一个基于C语言的接口,但可以由不同语言编写的程序来调用。
每个以字符串为参数的Win32函数在操作系统中都有两个版本,用于处理单字节方式和双字节方式的字符。例如编程使用的MessageBox有MessageBoxA和MessageBoxW版本。以MessageBox函数为例。
可以看出MessageExA其实是一个替换翻译层,用来分配内存并将ANSI字符串转换成Unicode,在调用W版本执行。
WOW64
WOW64是Windows操作系统的子系统,使大部分32位应用程序在不修改的情况下运行在64位系统。
Windows消息机制
它提供应用程序和应用程序之间的,应用程序和Windows系统之间的通信的手段。
有两种消息队列:一个是系统消息队列另一个是应用程序消息队列。当一个事件发生的时候,Windows将输入的消息放入系统消息队列,再将输入的信息复制到应用程序队列。而应用程序当中有一段叫做消息循环的代码,用来从消息队列中检索这些消息并把它们分布至相应的窗口。
一个事件从发生到结束都要进行上述过程,所以就跟队列一样先进先出,消息也需要先后排队。
虚拟内存
Win32的平坦内存模式使每个程序都可以拥有自己的虚拟内存空间。每个程序的4GB寻址空间互不干扰对32位进程,地址空间是4GB,因为32位指针拥有00000000h~FFFFFFFFh任何值。
虚拟内存是通过映射的方法使可使用的虚拟内存达到4GB,有的甚至更多。物理内存中因为DLL代码和系统代码中的进程需要时时刻刻进行,所以他也时时刻刻被映射。用户自己打开的进程则只需要在自己的时间段被映射,所以它也是有选择地被映射。步骤如下:
有几点需要注意:
1.应用程序不会直接访问物理地址。
2.虚拟内存 管理器通过虚拟地址的访问请求来控制所有的物理地址访问。
3.每个应用程序都有独立的4GB寻址空间,不同应用程序的地址空间是彼此隔离的。
4.DLL程序没有“私有"空间,它们总是被映射到其他应用程序的地址空间中,作为其他应用程序的一部分运行。其原因是:如果DLL不与其他程序处于同一个地址空间,应用程序就无法调用它。[]()