NDK开发之C基础回顾

HelloWorld
    #include <stdio.h>
    void main(){
        printf("hello world\n");    
        system("pause");
    }

  其中头文件#include <stdio.h>
  表示引入的头文件,头文件当中,只有函数的声明,编译时才会去找函数的实现

1、基本数据类型
int short long float double char 与java稍有不同。
常用占位符为:

    int %d
    short %d
    long %ld
    float %f
    double %lf
    char %c
    %x 十六进制
    %o 八进制
    %s 字符串

2、输入输出函数

int i;
printf("请输入一个整数:");
//赋值
scanf("%d",&i);  //控制台输入,&取地址符
//打印
printf("i的值为:%d\n",i);

3、指针
指针是C的核心,大一的时候学习C的时候死活不理解指针的概念。
指针存储的是变量的内存地址,内存地址系统分配给数据分配的编号(通俗点即为门牌号)。一句话简称,内存即地址。

int i = 90;
//指针变量,创建一个int类型的指针
int* p = &i; //p的值就是i这个变量的内存地址
printf("%#x\n",p);

打印结果为:
调试得到的地址并通过VS查找该地址下值

我们可以通过打印出来的地址找寻到该地址下的值,正好是90.

void change(int p){
    p = 300;
}
//变量名,对内存空间上的一段数据的抽象
void main(){
    int i = 90;
    change(i);
    printf("i的值为:%d\n",i);
}

从上面的结果看,打印的值还是原来的是90,而不是300。这是因为改变的只是形参,而i的值没有改变,也就是说i的地址所保存的值没有发生变化。
传递的时候传递&i或者*p=&i。

例子:
游戏外挂也是找到地址值,并且改变相应地址值保存的值得。

    void main(){
        int time = 600;
        printf("time:%#x\n",&time);
        while (time > 0){
            time--;
            printf("游戏时间剩余%d秒\n",time);
            //睡眠
            Sleep(1000);
        }
        system("pause");

这里写图片描述

我们可以得到time的地址值。

__declspec(dllexport) void go() {
    //修改time变量的值
    int *p = 0x49fe94;
    *p = 999999;
}

生成dll文件。再通过DllInject.exe工具进行注入。

这里写图片描述

C_01程序显示如下:
这里写图片描述

注入成功,成功更改time的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值