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;
}