码迷,mamicode.com
首页 > 移动开发 > 详细

Android获取其他进程加载的模块基地址

时间:2016-01-06 17:40:08      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

获取目标进程模块(.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;
}

运行效果如下:

技术分享

技术分享

Android获取其他进程加载的模块基地址

标签:

原文地址:http://www.cnblogs.com/dacainiao/p/5106245.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!