博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 进程模块获取
阅读量:5891 次
发布时间:2019-06-19

本文共 3229 字,大约阅读时间需要 10 分钟。

#include 
#include
#include
#include
bool GetModuleBase(long long &ulModBase,pid_t pid,const char * pszModName){ bool bRet = false; FILE * fp = NULL; char szMapFilePath[32]={0}; char szMapFileLine[1024]={0}; if(pszModName == NULL) { return bRet; } if(pid < 0) { sprintf(szMapFilePath,"/proc/self/maps"); }else{ sprintf(szMapFilePath,"/proc/%d/maps",pid); } fp = fopen(szMapFilePath,"r"); if(fp != NULL) { while(fgets(szMapFileLine,sizeof(szMapFileLine),fp)!=NULL) { if(strstr(szMapFileLine,pszModName)) { char * pszModAddrStart = strtok(szMapFileLine,"-"); if(pszModAddrStart) { ulModBase = strtoul(pszModAddrStart,NULL,16); if(ulModBase == 0x8000) ulModBase =0; bRet = true; break; } } } fclose(fp); } return bRet;}bool GetModuleFullName(pid_t pid,const char * pszModName,char *pszFullModName,int nBuffSize){ bool bRet = false; FILE * fp = NULL; char szMapFilePath[32]={0}; char szMapFileLine[1024]={0}; char * pszFullName = NULL; if(pszModName == NULL|| pszFullModName == NULL||nBuffSize<=0) { return bRet; } if(pid<0) { sprintf(szMapFilePath,"/proc/self/maps"); } else { sprintf(szMapFilePath,"/proc/%d/maps",pid); } fp = fopen(szMapFilePath,"r"); if(fp!=NULL) { while(fgets(szMapFileLine,sizeof(szMapFileLine),fp)!=NULL) { if(strstr(szMapFileLine,pszModName)) { if(szMapFileLine[strlen(szMapFileLine) -1]=='\n') { szMapFileLine[strlen(szMapFileLine) -1]=0; } pszFullName = strchr(szMapFileLine,'/'); if(pszFullName == NULL) { continue; } strncpy(pszFullModName,pszFullName,nBuffSize -1); bRet = true; } } fclose(fp); } return bRet;}int main(int argc,char ** argv){ long long ulCModBase = 0; char szCModPath[256] = {0}; if(GetModuleBase(ulCModBase,getpid(),"libc-2.23.so")) { printf("c mod base:0x%llx\n", ulCModBase); } if (GetModuleFullName(getpid(), "libc-2.23.so", szCModPath, 256)) { printf("c mod full path:%s\n", szCModPath); } printf("finish \n"); return 0;}

linux

android 进程模块获取
修改对应的模块
android

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_ARM_MODE := armLOCAL_CFLAGS += -pie -fPIELOCAL_LDFLAGS += -pie -fPIELOCAL_MODULE    := test1LOCAL_SRC_FILES := test.cppinclude $(BUILD_EXECUTABLE)
.......int main(int argc,char ** argv){    long long ulCModBase  = 0;    char szCModPath[256] = {0};    if(GetModuleBase(ulCModBase,getpid(),"libc.so"))    {        printf("c mod base:0x%llx\n", ulCModBase);    }    if (GetModuleFullName(getpid(), "libc.so", szCModPath, 256))    {        printf("c mod full path:%s\n", szCModPath);    }    printf("finish \n");    return 0;}

android 进程模块获取

转载于:https://blog.51cto.com/haidragon/2388328

你可能感兴趣的文章
Linux查看程序端口占用情况
查看>>
在InteliijIDEA12中如何热加载Jfinal
查看>>
Python的字符串索引和分片
查看>>
未将对象引用设置到对象的实例--可能出现的问题总结
查看>>
uva-699 The Falling Leaves
查看>>
VisualStudio Shell简介 — 界面定制
查看>>
在Mac OS X中配置Apache + PHP + MySQL(转)
查看>>
firefox 好用的插件
查看>>
C语言如何产生随机数
查看>>
hdu 2044:一只小蜜蜂...(水题,斐波那契数列)
查看>>
百度2012实习生招聘笔试题
查看>>
字体大宝库:20款好看的免费英文字体下载
查看>>
易信?串台?
查看>>
fiddler2抓包工具使用图文教程
查看>>
为你详细解读HTTP请求头的具体含意
查看>>
VC命令行编译参数介绍
查看>>
Spring Boot整合Rabbitmq
查看>>
[转]PHP与Shell交互
查看>>
@property (nonatomic,retain)中的nonatom和retain的意思
查看>>
oracle系列--第四篇 Oracle的卸载
查看>>