1. 程式人生 > >C語言筆記14--指標與掛

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 注入後效果 這裡寫圖片描述