ndk01.2_指针,外挂原理

一、指针

& 取地址操作符。运用在内存中的对象上面,即变量与数组元素
* 间接寻址或者引用运算符。

指针:指针变量存储的是 变量类型的对应的变量的地址

int *p (int型指针p) p存储的是 int型的变量的地址

    int main(){
        int i = 10;
        int *p;  //定义一个指针变量 (p存储的是 int型的变量的地址)
        p = &i;  //取i的地址值赋给p
        printf("i 的地址:%#x \n", &i);  //打印结果为 i的地制值
        printf("p 的地址:%#x \n",&p);   //打印结果为 p的地址值 其实就是i的地址值
        printf("sizeof(*p) %d\n ",sizeof(*p));//*p的大小  结果 4
    
    
        double f = 23.99f;
        double * fp;
        fp = &f;
        printf("f 的内存:%d \n",sizeof(f));  //结果是 8  double占用8个字节
        //为什么结果是4?   fp 是一个变量,指向double类型的数据的变量
        //fp 是存储的地址, 地址是占用4个字节的。32位 4*8
        //指针变量所占用的字节的大小是确定的 4个字节。
        printf("sizeof(p)%d\n",sizeof(fp));  //结果是4
        system("pause");
        return 0;
    }

二、外挂原理

只要知道一个变量的内存地址,就可以根据地址值更改变量的值,既可以直接根据指针改变他所指向的地址对应的内容。

int main(){
    int i = 10;
    int * p;
    p = &i;
    printf("i value:%d\n", i);

    printf("p的地址:%#x \n",&p);
    printf("i 的地址:%#x \n",&i);

    printf("修改*p");
    *p = 100;
    printf("i value:%d\n",i);

    system("pause");
    return 0;
}

三、简易外挂

1.假设有一个正在运行的计数器程序代码是这样的

#include<windows.h>
int main(){
    int i = 1000;
    printf("i的地址:%#x \n",&i);
    while(i>0){
        printf("计数器的值: %d\n",i);
        i--;
        Sleep(1000);
    }
    return 0;
}

2.将工程属性修改成动态链接库

3.外挂代码(生成动态链接库)

_declspec(dllexport) go(){
    int *p; //定义一个指针变量
    p = (int *)0x4ffca4 //拿到想要修改的变量的内存地址int值并强制转换为地址值,
    *p = 100000;  //手动修改其指向的值
}

4.使用注册器,找到想要修改的程序进程

5.使用自己写的dll外挂,执行go函数,注入动态链接库

6.可以看到计数器的值被强行修改了

四、知识要点

1. 关键字:sizeof() 用来计算基本数据类型 所占用的内存大小
//它只是一个操作符并不是一个函数
int i= 1;
printf("int 值:%d,int 类型数据内存大小:%d\n,i,sizeof(int)");
2. 单目 双目 三目运算符
//i++                       单目运算符(作用于一个变量上)
//1+2  1*2                  双目运算符(作用在两个变量上)
//bool b = 3>2?true:false   三目运算符(三个变量共同起作用)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 7,168评论 0 35
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 5,741评论 0 4
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 12,418评论 0 27
  • 知道简书,源于我关注的一个名叫“看书有道”的微信公众号。在那里里面有很多我喜欢的文章,几乎都来之简书签约作者...
    杨玖玖阅读 1,279评论 0 0
  • 移动互联网时代, 宠物市场的发展 离不开移动电商平台的扶持。 爆发夜的前夕, 中国宠物市场的潜力到底有多大? 随着...
    老佐阅读 9,266评论 0 2

友情链接更多精彩内容