专栏首页逆向技术win32编程简介

win32编程简介

 

复习Win32整理下知识.

为什么学习win32?

  我们要编写windos程序.都离不开API. 也就是我们所说的win32程序. 所以学好win32是你能不能再windows下编写程序的基础.

在win32下我们要学习的知识如下.

  1.字符  字符的存储.

  2.多线程编程.

  3.线程同步编程

  4.窗口程序.城后本质.

  5.消息机制.

  6.进程编程

  7.内存 管理

  8.文件操作.

  9.内存映射

  10.DLL以及静态库程序

  11.DLL注入技术.

  12.模块隐藏.脱链

  13.进程通信编程.

  14.HOOK技术.

二丶字符的本质

  我们发现学习Win32要学习很多知识.不过总结一下也没有那么多.主要是多用多学多做.

首先说下字符.

  字符有 ASCII编码格式.有 UNICODE格式. 也有UTF - 8 格式. 那么我们说下他们的存储以及管理吧.

1.ASCII编码.

ASCii编码表. 因为计算机是老外发明的.所以编码一开始只有127个.

而我们计算机存储的编码就是这种.

我们可以使用 十六进制工具查看一下. (winhex) 

1.新建文本文档.输入字符a

2.winhex查看字符存储的本质是什么.

关于第一步.省略.

可以看到存储的是0x61 十进制是97 也就是a所计算机存储ascii编码的时候.存储的就是ascii编码表中的格式.

2.Unicode编码

  上图的编码是ASCII编码. 但是只能存储127个字符.但是怎么显示中文那? 所以出了一个新的编码表.也就是GB2312编码表或者是GB2312

从127往上还有一个编码表.用于显示特殊符号的. 而GB2312编码表就是使用两个这样的编码来显示的.但是有一个弊端.如果同样一个中文.你发给外国朋友.他打开就会显示乱码了.

因为每个国家的编码格式都不一样.所以最后UNICODE格式出示.

UNICODE格式规定. 每一个字符都会使用独立的编码来显示.

比如 0x41 0x32 这两个字节来表示 中国的中字这样你发到任何电脑上都可以看到.

注意. UNICODE只是解决了字符怎么表示.并没有规定怎么存储. 什么意思?

意思就是 中字代表的是 0x41 0x32 那么国字就可能代表 0x41 0x32 0x33 使用三个字节来表示.

所以UNICODE - 16出世了 

UNICODE-16 没两个字节来表示一个字符,如果不够两个字节或者超过两个字节.那么在增加两个字节来表示.

所以我们常说的UNICODE 就是说的UNICODE-16

3.UTF-8编码

上面说了的UNICODE-16解决了存储方式.但是也有弊端. 一个字节我按照两个字节来表示. 那么不是浪费了一个空间吗.特别是用于网络传输的时候.

所以UTF-8出来了. UTF - 8 就是可变长的. 什么意思.意思就是说.一个字节我就用一个字节表示.两个字节我就用两个字节表示. 只不过就是解析困难.

三丶代码中的宽字符窄字符

在代码中我们的宽字符窄字符就可以互相使用了.

char str[] = "A"                                               Asc版本编码使用
wchar_t str[] = L"A"                                        Unicode版本
TCHAR str[] = TEXT("A")                                  兼容性版本使用.
TCHAR 是windows中的一个宏.如果你的当前程序属性设置的是ASC编码形式.
那么TCHAR就是char.如果是UNICODE 那么TCHAR就是 wchar_t类型.

TEXT()是一个宏.是一个连接符. 如果是char类型.那么链接符号就是空宏.
如果是wchar_t类型. 那么连接符就是 L. 
L表明是宽字符的意思.

他们在内存中的存储方式也不同了.

1.A版本 长度为1. 结尾一个0

2.U版本长度为2. 结尾两个0结束.

如果使用了不同版本的字符.那么就要使用对应的库来操作这些字符.

A版本.

  printf       strlen  strcat strcmp  strstr

U版本

  wprintf   wcslen  wcscat wcscmp wcsstrstr

关于字符串操作函数具体查询MSDN. 或者Google搜索一下.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据结构第一讲,数据结构入门了解知识.

    我们常听的一句话就是, 数据结构 + 算法 = 程序 意思就是在我们的程序设计中,数据结构是必不可少的,那么什么是数据结构,数据结构简而言之就是针对数据关系而生...

    IBinary
  • 脱壳第一讲,手工脱壳ASPack2.12的壳.ESP定律

          脱壳第一讲,手工脱壳ASPack2.12的壳.ESP定律 一丶什么是ESP定律 首先我们要明白什么是壳.壳的作用就是加密PE的. 而ESP定律就是壳...

    IBinary
  • MarkDown语法总结

    2.给图片家加上链接, 语法也很简单.就是先写一个添加图片的,然后外层加一个括号,后面跟上链接即可.

    IBinary
  • 基础知识:字符编码

    1、什么实字符编码:将人识别的字符转换成计算机能识别的01,而转换的过程或者规则就是字符编码表。

    py3study
  • 计算机程序的思维逻辑 (6) - 如何从乱码中恢复 (上)?

    我们在处理文件、浏览网页、编写程序时,时不时会碰到乱码的情况。乱码几乎总是令人心烦,让人困惑。希望通过本节和下节文章,你可以自信从容地面对乱码,恢复乱码。 谈...

    swiftma
  • 字节码:ASCII编码:单字节编码,ANSI编码:多字节编码,UNICODE编码:宽字节编码

    字符是人们常用的一些记号,比如”1”, “汉”, “お”,”℃”等等,包括各种语系的语言和一些符号都可以被称为字符。 字节是计算机存储数据的存储单元,是一个8位...

    学到老
  • 一个故事带你搞懂ASCII,Unicode字符集和UTF-8编码

    快下班时,爱问问题的小朋友Nico又问了一个问题: "sqlserver里面有char和nchar,那个n据说是指unicode的数据,这个是什么意思。" ...

    desperate633
  • 字节码:ASCII编码:单字节编码,ANSI编码:多字节编码,UNICODE编码:宽字节编码

    字符是人们常用的一些记号,比如”1”, “汉”, “お”,”℃”等等,包括各种语系的语言和一些符号都可以被称为字符。 字节是计算机存储数据的存储单元,是一个...

    学到老
  • Java中编码问题

    在开发过程中经常会遇到一会乱码问题,不是什么大问题,但是也挺烦人的,今天来将我们开发总结的经验记录下来,希望可以给大家一些帮助。

    说故事的五公子
  • 前端工程师也应知道的字符编码知识

    最开始计算机只在美国用,八位的字节可以组合出256种不同状态。0-32种状态规定了特殊用途,一旦终端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作...

    coder_koala

扫码关注云+社区

领取腾讯云代金券