加密与解密:第一章

基础知识

文本字符

字符储存顺序

  • Big-endian:高位字节存入低位地址,低位字节存入高位地址
  • Little-endian:低位字节存入低位地址,高位字节存入高地址
    加密与解密:第一章
  • 因为网络协议也都是采用Big-endian防暑传输数据,所以有事也把Big-endian方式成为网络字节序

Windows操作系统

win32 API 函数

在windows程序设计发展的初期,windows程序员能够使用的编程工具只有API函数,这些函数提供应用程序运行所需要的窗口管理,图形设备接口,内存管理等服务功能。这些功能以函数库的形式组织在一起,形成了windows应用程序编程接口,简称“Win API”。
可以认为API函数是整个windows框架的基石,它的下面是windows操作系统核心,它的上面则是windows应用程序。
加密与解密:第一章
windows运转的核心是动态链接。windows提供了丰富的应用程序可利用函数调用,这些函数采用动态链接库(DLL)实现。早期windows的主要部分只需要在3个动态链接库中实现,他们分别代表windows的3个主要子系统,叫做kernel,user和GDI

  • kernel(由KERNEL32.DLL实现):操作系统核心功能服务,包括进程与线程控制,内存管理,文件访问等
  • User(由USER32.DLL实现):负责处理用户接口,包括键盘和鼠标输入,窗口和菜单管理等
  • GDI(由GDI32.DLL实现):图形设备接口,允许程序在屏幕和打印机上显示文本和图形。
  • windows还提供了其他DLL以支持更多的功能,包括对象安全想,注册表操作(ADVAPI32.DLL),通用控件(COMCTL32.DLL),公共对话框(COMDLG32.DLL),用户界面外壳(SHELL32.DLL)和网络(NETAPI32.DLL)
  • 在win32 API函数字符集中,“A”表示ANSI,“W”表示Widechars(即Unicode)。前者就是通常使用的单字节方式,后者是宽字节方式,以便处理双字节字符。
  • WOW64(windows-on-windows 64-bit)是64位windows操作系统的子系统,可以使大多数32位应用程序在不进行修改的情况下运行在64位操作系统上。
  • windows的64位系统文件都放在一个叫做system32位的文件夹中,\windows\system32文件夹中包含了原生的64位映像文件。为了兼容32位操作系统,还增加了\windows\SysWOW64文件夹,其中存储了32位的系统文件

windows消息机制

  • windows是一个消息驱动式系统。windows消息提供在应用程序与应用程序之间,应用程序与windows系统之间进行通信的手段。
  • windows系统中有两种消息队列:一种是系统消息队列,另一种是应用程序消息队列
  • SendMessage函数:调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则改函数不会返回。返回值:由具体的消息决定,如果消息投递成功,则返回“TRUE(非零)”
  • WM_COMMAND:当用户从菜单或按钮中选择一条命令或者一个控件是该消息被发送给它的父窗口,或者当一个快捷键被释放时发送。返回值:处理则返回非零
  • WM_DESTROY:当一个窗口被销毁是发送该消息,该消息的十六进制数是02h。返回值:如果处理则返回非零
  • WM_GETTEXT:将一个对应窗口的文本复制到一个由呼叫程序提供的缓冲区中。返回值:被复制的字符数
  • WM_QUIT:当程序调用PostQUITMessage函数式,生成WM_QUIT消息,消息的十六进制数是012h。无返回值
  • WM_LBUTTONDOWN:当光标停在一个窗口的客户区且用户按下鼠标左键时,WM_LBUTTONDOWN消息将被发送。十六进制数是0201h。返回值:如果处理了这条消息,返回值为零

虚拟内存

  • 虚拟内存不是真正的内存,它通过映射(map)的方法使可用虚拟地址达到4GB,每个应用程序 可以获得2GB的虚拟地址,剩下的2GB留给操作系统自用。
  • 应用程序不会直接访问物理地址
  • 虚拟内存管理器通过虚拟地址的访问请求来控制所有的物理地址的访问
  • 每个应用程序都有独立的4GB寻址空间,不同的应用程序的地址空间是彼此隔离的
  • DDL程序没有“私有”空间,它们总是被映射到其他应用程序的地址空间中,作为其他应用程序的一部分运行。其原因是:如果DLL不与其他程序处于同一个地址空间,应用程序就无法调用它。
  • 使用虚拟内存地址的好处是:简化了内存的管理,减小得了物理迪内存的不足,可以防止多任务环境下应用程序之间的冲突。