指针是C语言绕不过的话题,指针的功能也非常强大,指针也有多级,但常用的也就一级和二级指针。指针其实就是地址,指针变量就是存储指针的变量。有了指针就可以修改变量的值,也是游戏外挂的原理。
1.指针的长度
#include<stdio.h>
#include<stdlib.h>
int main()
{
printf("int==%d\n",(sizeof(int *)));
printf("char==%d\n",(sizeof(char *)));
printf("float==%d\n",(sizeof(float *)));
system("pause");
return 0;
}
指针都会分配4个字节
打印结果为
2.通过指针修改变量的值
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a=10;
int *p=&a;//定义一个指针变量,保存变量a的地址
*p=20;
printf("a=%d",a);
system("pause");
return 0;
}
输出a=20;通过指针可以修改a的值,这是间接修改变量的值。
3.在函数中的使用
先看看下面的程序
#include<stdio.h>
#include<stdlib.h>
void change(int a)
{
a=20;
}
int main()
{
int a=10;
change(a);
printf("a=%d",a);
system("pause");
return 0;
}
结果为a=10;可以见函数的参数是值传递,仅仅是把10传进去,而不是把a传进去,若想通过函数修改a的值,就只有把a的地址传进去。只需对上面的程序稍作修改。
#include<stdio.h>
#include<stdlib.h>
void change(int *a)//参数是个指针,保存传进来的地址
{
*a=20;//*a是a保存的地址对应变量的值
}
int main()
{
int a=10;
change(&a);//传入a的地址
printf("a=%d",a);
system("pause");
return 0;
}
4.制作小挂
有了变量的地址,就可以修改变量的值。
首先打开游戏的程序,利用内存查找器Cheat Engine找到要修改变量的地址。
#include<Windows.h>
_declspec(dllexport) void main()//dll的接口
{
int *p = (int *)0x155522b0;
*p = 500;
while (1)
{
if (*p < 300)
{
*p = 800;
}
Sleep(2000);//每2秒检测一次
}
}
生成dll动态库后,利用dll注入器给游戏进程注入生成的dll
注入后效果