C语言笔记14--指针与挂

指针是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
注入后效果
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40850689/article/details/82703984
今日推荐