C語言筆記14--指標與掛
阿新 • • 發佈:2018-12-09
指標是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 注入後效果