首页
社区
课程
招聘
[求助]如何编写程序获取dalvik-heap(deleted)地址
发表于: 2014-4-1 11:01 9903

[求助]如何编写程序获取dalvik-heap(deleted)地址

2014-4-1 11:01
9903
40a7a000-4171c000 rw-p 00000000 00:04 155455     /dev/ashmem/dalvik-heap(deleted)
4171c000-50a7a000 ---p 00ca2000 00:04 155455     /dev/ashmem/dalvik-heap(delete
d)

在adb shell cat /proc/pid/maps里面获取到 /dev/ashmem/dalvik-heap(deleted)的地址为40a7a000-50a7a000。

本人的问题是,如何通过编程的方法,获取这个地址?

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
编程的时候也可以读/proc/pid/maps这个文件啊。。。linux 下everything is a file . /proc 文件系统就是专门干这个的
2014-4-1 12:20
0
雪    币: 31
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
JNIEXPORT jstring JNICALL Java_com_encal_gamebox_EncalJniApi_getModuleAddr
  (JNIEnv *env, jobject obj, jint pid, jstring module_name)
{
        FILE *fp;
        char addr[18];
        char filename[64];
        char line[1024];
        sprintf(filename, "/proc/%d/maps", pid);
        LOGD(filename);
        const char *pStr = (*env)->GetStringUTFChars(env, module_name, 0);
        LOGD(pStr);
        fp = fopen(filename, "r");
        if (fp != NULL){
                LOGD("come fp");
                while(fgets(line, 1024, fp)){
                        LOGD("come while");
                        break;
                        if (strstr(line, pStr)){
                                if (strstr(line, "rw-p")){
                                        strncpy(addr, line, 17);
                                        addr[17] = '\0';
                                        break;
                                }
                        }
                }
                fclose(fp);
                LOGD("fclose");
        }
        return (*env)->NewStringUTF(env, "haha");//(*env)->NewStringUTF(env, addr);
}
谢谢,按照你说的做的,用NDK编译成可执行文件可以实现了。但是我改写成so让安卓程序通过jni调用的时候发现fgets这段代码进不去(只打印了come fp和fclose)这个是怎么回事呢?
2014-4-4 10:26
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你看看返回值。 打一下errno
2014-4-4 10:52
0
雪    币: 31
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
define ENOENT 2 /* No such file or directory */
打印结果是2,这个是什么情况?
2014-4-4 13:57
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不知道了。。。 你试着换个函数多调调吧
2014-4-4 14:33
0
雪    币: 31
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我发现同目录status都能正常打印出来,然后用re资源管理器打开maps也是空的。
2014-4-4 16:57
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
那可能说明maps本来就没东西吧。。
2014-4-4 17:23
0
雪    币: 31
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
有的,我发现用ndk编译成可执行文件,就能够把maps文件的内容读出来。如果编译成so让安卓程序调用maps文件的内容就读不出来。我怀疑是权限的问题,继续研究中。。。
2014-4-8 17:52
0
游客
登录 | 注册 方可回帖
返回