【3-1-32】靶子程序 外挂模块

来源:互联网 发布:韩国文化产业数据 编辑:程序博客网 时间:2024/06/10 00:02

1:printf("\n%x",a);
printf("\n%x",*a);//*a取第一行的第一个元素的首地址,4个字节
printf("\n%x",&a);
他们的区别:

举例:


void main85()

{

int num[5] = {1,2,3,4,5};
printf("\n%x", num);//数组名相当于第一个元素的首地址,一个元素有4个字节,所以要前进4个字节,
printf("\n%x", &num);//一个数组的首地址,代表一个数组,数组作为一个指针,有20个字节
//地址都一样,
printf("\n%d", sizeof(*num));//*num是根据类型地址取出内容
printf("\n%d", sizeof(*&num));
system("pause");
}
//他们有什么区别,地址一样,大小不一样的区别?
void main86()//对于二维数组而言,他是一个一维数组,我的每个元素都是一个一维数组
{
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
for (int i = 0; i < 3;i++)
{
for (int j = 0; j < 4;j++)
{
printf("    %5d,%x",*(*(a+i)+j),*(a+i)+j);
}
printf("\n");
}
//创建一指针如何指向它
printf("\n%x",a);
printf("\n%x",*a);//*a取第一行的第一个元素的首地址,4个字节
printf("\n%x",&a);



printf("\n%d", sizeof(*a));//第一个步长是16个字节,a代表行指针。
printf("\n%d", sizeof(**a));//第一个步长是4个字节,
printf("\n%d", sizeof(*&a));//第一个步长是48个字节


system("pause");

}

2:函数指针的指针:没有看完

//如何通过指针来改变一个函数指针
int add(int a,int b)
{
printf("\n%d,%d",a,b);
return a + b;
}
int add8848(int a,int b)
{
printf("\n%d,%d", a, b);
MessageBoxA(0,"hello china","run",0);
return a + b;
}
void main()
{
//打印出这2个函数的地址
printf("%x,%x",add,add8848);
//如何调用一指针来调用它,我们可以创建一指针让它等于add,接下来如何引用它
//int(*p)(int a, int b) = add;
int(*p)(int a, int b) = add8848;//如果改变函数指针,让它等于add8848
int i = 0;
while (1)
{
printf("\n%d",p(i,1));//计时器,每2秒自动加1
Sleep(2000);
i++;
}




system("pause");
}


3:植物大战僵尸

//需要2个工具:内存检索工具Cheat Engine,插入dllinject

0 0
原创粉丝点击