【加密与解密】第一章①

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不与其他程序处于同一个地址空间,应用程序就无法调用它。[]()

posted @ 2023-01-01 16:44  Corax0o0  阅读(63)  评论(0编辑  收藏  举报