能力值:
( LV2,RANK:10 )
|
-
-
2 楼
编程的时候也可以读/proc/pid/maps这个文件啊。。。linux 下everything is a file . /proc 文件系统就是专门干这个的
|
能力值:
( 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)这个是怎么回事呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
你看看返回值。 打一下errno
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
define ENOENT 2 /* No such file or directory */
打印结果是2,这个是什么情况?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
不知道了。。。 你试着换个函数多调调吧
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
我发现同目录status都能正常打印出来,然后用re资源管理器打开maps也是空的。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
那可能说明maps本来就没东西吧。。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
有的,我发现用ndk编译成可执行文件,就能够把maps文件的内容读出来。如果编译成so让安卓程序调用maps文件的内容就读不出来。我怀疑是权限的问题,继续研究中。。。
|
|
|