1.C语言中的数据类型
常量:就是程序中不可变化的量,是不可以被赋值的。
通过#define定义常量,在C语言中叫做宏定义。实例:#define x 100
const定义一个只读变量,即在初始化赋值之后,不能对const所定义的变量进行任何修改。需要注意的是一定要初始化赋值,不然以后就不能赋值了。
字符串常量:在C语言当中“”引用的字符串都是字符串常量,常量一旦定义也是不可以被修改的。
位:计算机内部都是二进制的,一个二进制的位,就叫一个位,也称bit。小写的b代表bit(位)。
字节:八位二进制称为一个字节Byte。是计算机内存最小单位,主要是位太小了,不能作为内存的最小单位,大写的B代表Byte(字节)
字:两个字节称为一个字word。两个字称为一个双字(dword)。
sizeof关键字:sizeof是计算数据在内存当中占多大空间,单位是字节,不是函数,是运算符。sizeof返回值数据类型是size_t,size_t类型数据一定是个无符号数,也就是一个大于零的数。
int类型:一个int类型占据4个字节大小的内存,在16位操作系统下int是2个字节,在32和64位系统下的int是4个字节。数据类型决定了内存空间的大小,如int a代表着开辟了4个字节大小的内存空间。
小端对齐:高地址放高位,低地址放低位。
大端对齐:高地址放低位,低地址放低位。
对于UnixCPU都是按照大端对齐存储数据的。
对于x86构架CPU、ARM是按照小端对齐存储数据的。
%x表示输出小写的十六进制字符,如a、b、c、d、e、f
%X表示输出大写的十六进制字符,如A、B、C、D、E、F
%o表示输出八进制数据。
在32位操作系统下:
short=2个字节
long和int一样是4个字节
long long是8个字节
在64位操作系统下:
int是4个字节
long在多数64位操作系统下是8个字节
unsigned表示无符号,无符号需要声明,signed是默认的。
如果是汇编编写的运算,不要让CPU通过内存的读写来运算,而是通过寄存器来运算。
char:是字符类型,一个字节。
%c表示输出一个字符。
ASCII码值:字符a对应ASCII码值97,字符A对应65,A和a的规律是相差32,按十六进制来看就是0x20。
转义字符:\a报警、\b退格、\n换行、\r回车、\t制表、\\斜杠、\'单引号、\"双引号、\?问号
浮点数:float(%f)、double(%f)、long double(%lf)类型
volatile关键字:告诉编译器不要自作聪明的优化代码(把变量优化到寄存器里面计算),只要是volatile类型变量,每一步都要去内存中读取数据。
register关键字:恰恰与volatile关键字相反,建议编译器register类型变量只要在寄存器中用就好了。注意只是建议。
字符串是内存中一段连续的char空间,以'\0‘结尾
%d对应int类型:有符号的十进制整数
%u对应unsigned int类型:无符号十进制整数
%o对应unsigned in类型:无符号8进制整数
%x或%X对应unsigned int类型:无符号16进制整数
%hd对应short int类型:短整型
%hu对应unsigned short int类型:无符号短整型
%f对应float类型:单精度浮点数
%lf对应或double类型:双精度浮点数
%e或%E对应double类型:科学计数法表示的数
%c对应char类型:字符型,可以进行相对应的ASCII码转换
%s或%S对应char *或wchar_t *类型:字符串
%p对应void *类型:以16进制形式输出
l字符可以附加在d/u/x/o面前,表示长整型
-字符表示左对齐
m:代表一个整数,表示数据的最小宽度,可以用0补上也可以用空格补上
0:将输出的前面补上0,直到指定列宽为止
N:代表一个整数,宽度至少N位,不够以空格填充
#define _CRT_SECURE_NO_WARNINGS:安全模式
左值:在等号左边,表示可以被更改的数据对象,
右值:能赋给左值的量,在等号右边。
2.小案例
该案例用用到MessageBoxA函数,而该函数包含在windows.h头文件中,所以预处理要加上该头文件,首先打开VS2013,具体代码内容如下:
具体实现:
成功实现该程序,那么如何将该程序注入别的应用程序中呢?这时候就需要一个注入的工具,如:
而且代码也需要改动以下,注入是注入别的应用程序,所以是以应用程序扩展的方式注入,也就是.dll文件。代码做如下改动:
并且也要对该项目的属性配置也要改动一下,不能作为.exe,要改为.dll,如下:
.dll 不是可执行文件,所以只能编译它,ctrl+F5。接下来是注入到别的程序,这里我们以百度云为例,打开注入工具
选好路径,和执行函数,如
注入成功
现在你打开任务管理器,看到的是这个中奖信息是百度网盘这个软件发出的。我们可以改成李彦宏请你共进晚餐之类的,在这里我们只需要了解应用扩展文件.dll是如何注入到程序当中去的就可以了。
3.外挂小案例
以植物大战僵尸为例,首先需要一个工具叫Cheat Engine,打开植物大战僵尸和Cheat Engine,如:
在Cheat Engine上选择植物大战僵尸程序,如
接下来我们要寻找阳光这个变量,先在Cheat Engine上输入值50,寻找一下,经过首次扫描,找到这么多的内存地址,
接下来,看游戏中的阳光的值加到100,如
我们输入100,再次扫描,就找到了,如:
这个1DAF34D0就是阳光这个变量的地址,我们可以编写C语言程序,去改变它的值,程序代码内容如下:定义一个指针变量,指向它,然后赋新值给指针即可。
打开项目属性,设置好配置类型即可,如下 然后编译一下,注入植物大战僵尸即可
这就是外挂的简单演示。
4.自动操作电脑案例
直接上代码把!
这里用到的函数不多,就是休眠函数Sleep、键盘输入函数keybd_event、WinExec函数、mouse_event函数、SetCursorPos函数这五个函数,而且都包含在Windows.h头文件中,这样就可以自动打开notepad,和自动输入我爱你了,自动保存了;