2019-08-23

android 取地址


int read_maps(){

LOGE("开始遍历进程pid");

    char filename[] ="/proc/self/maps";  //文件名

    FILE *fp;

    char  p[7] ={""};

    int  i;

    char StrLine[1024];      //每行最大读取的字符数

    char name[]="/system/lib/libc.so";

    if((fp = fopen(filename,"r")) ==NULL)//判断文件是否存在及可读

    {

LOGE("error!");

        return -1 ;

    }

while (!feof(fp))//feof 文件结束返回非0值

    {

fgets(StrLine,1024,fp);                //每次读取一行

        if(NULL!=strstr(StrLine,name)){

strncpy(p,StrLine,8);

            p[8]='\0';

            LOGE("基地址 %s\n",p);

            sscanf(p,"%x",&i);        // 将char数组的赋值给int

            i = i +0x0002FB93;  //  0002FB92    基地址加上偏移

            LOGE("函数 addr %x",i);

            return i;

        }

}

fclose(fp);                      //关闭文件

    return  0;

}

你可能感兴趣的:(2019-08-23)