标签:
获取目标进程模块(.so)加载地址是通过解析/proc/[pid]/maps
得到的。
可以通过adb shell手动获取:
①. 首先通过ps命令查看进程的pid
②. cat /proc/[pid]/maps
使用程序实现如下代码:
#include <stdio.h> int main(int argc, char* argv[]) { if (argc != 3) { printf("pid or soName error\r\n"); return 1; } pid_t pid = atoi(argv[1]); char *lpszSoName = argv[2]; char szPath[256] = {0}; char szLines[1024] = {0}; char *lpCh = NULL; long addr = 0; int nFind = 0; //如果需要查看自身模块, 可以用 //snprintf(szPath, sizeof(szPath), "/proc/self/maps"); snprintf(szPath, sizeof(szPath), "/proc/%d/maps", pid); FILE *fp = fopen(szPath, "r"); if (fp != NULL) { while (fgets(szLines, sizeof(szLines), fp)) { if (strstr(szLines, lpszSoName)) { lpCh = strtok(szLines, "-"); addr = strtoul(lpCh, NULL, 16); printf("Find %s addr: %p\r\n", lpszSoName, addr); nFind = 1; } } fclose(fp); } else { printf("fopen error\r\n"); } if (nFind == 0) { printf("no find\r\n"); } return 0; }
运行效果如下:
标签:
原文地址:http://www.cnblogs.com/dacainiao/p/5106245.html