滴水逆向win32学习笔记1

滴水逆向win32学习笔记

  • 一、字符编码
    • 基本介绍
    • 关于utf-16、utf-8和unicode的关系
    • BOM头
  • 二、宽字符
    • 基本介绍
    • 常用函数
  • 三、Win32 API中的宽字符
    • 什么是win32 API
    • messagebox函数

一、字符编码

基本介绍

首先介绍了ASCII码,但是除美国外还需要显示其他字符,所以在ASCII码扩展表的基础上引入了GB2312之类的编码。由于每个国家有自己的一套扩展表,所以还是会出现问题。那怎么办呢?
采用unicode编码,编码范围是0-010FFFF,任何一个符号都能在编码表中体现。

关于utf-16、utf-8和unicode的关系

unicode只告诉了字符如何编码,没有解决编码以何种方式存储。举个例子,汉字的unicode编码为4E 2D,另一个汉字的编码为1 AB CD,或者字符A的编码为41,这些字符如何存储呢?
utf-16编码以16位无符号整数为单位,也就是二个字节为一组。如果编码只有一个字节,前面补零。如果有三个字节,那就凑齐四个。
在这里插入图片描述字utf-16编码。
utf-16这样的存储方式比较简单,但是对于网络传输而言,如果单纯的传输字母数字类,只占一个字节的符号时,会造成空间的浪费(由于补零,导致一个字节变成两个字节)。于是出现了utf-8编码。
utf-8遵循下面的规则:

unicode编码(16进制) utf-8字节流(二进制)
000000-00007F 0xxx xxxx
000080-0007FF 110x xxxx 10xx xxxx
000800-00FFFF 1110 xxxx 10xx xxxx 10xx xxxx
010000-10FFFF 1111 0xxx 10xx xxxx 10xx xxxx 10xxxxxx

首先查看字符在什么范围内,然后进行转换。还是字,4E 2D000800-00FFFF范围内,0100 1110 0010 1101转换的结果就是 1110 0100 1011 1000 1010 1101,转换成16进制 E4 B8 AD
在这里插入图片描述

BOM头

为了让计算机知道一个文件是按照什么方式存储的,需要在文件的头部添加表示,这个东西叫BOM。
utf-8 EF BB BF
utf-16 小端存储 FF FE
utf-16 大端存储 FE FF

二、宽字符

基本介绍

我们在vs中写程序,如果默认的字符集为ASCII,那么在定义一个字符串的时候,会按照gb2312来进行编码。
滴水逆向win32学习笔记1_第1张图片如果使用宽字符集,则使用utf-16,注意字符串结尾00占两个字节。
滴水逆向win32学习笔记1_第2张图片

常用函数

char wchar_t
printf wprintf 控制台打印
strlen wcslen 长度
strcpy wcscpy 字符串复制
strcat wcscat 拼接
strcmp wcscmp 比较
strstr wcsstr 查找

三、Win32 API中的宽字符

什么是win32 API

主要是存放c:\windows\system32下面的所有dll。64位系统和32位系统都在这个文件夹下,64位系统中32位的dll在C:\Windows\SysWOW64中。
几个重要的dll

  1. Kernel32.dll。最核心的功能模块,比如内存管理、进程和线程相关的函数。
  2. User32.dll。是Windows用户界面相关应用程序接口,如创建窗口和发送消息。
  3. GDI32.dll。图形设备接口,用于画图和显示文本。

messagebox函数

具体看文档吧,没什么好写的了。

你可能感兴趣的:(滴水,win32api)