NDK编程实践之调用系统命令实现权限临时提升

先声明一下这是参考eoe的视频教程做到的实验。

实验环境:

Windows平台+eclipse+虚拟机跑4.1安卓

实验目标:

1. 改造ndk例子程序helloJni,在调用c代码的地方加一行

system("huexec");

既可实现系统调用。

2. 编写huexec的代码,代码的内容是在/data/目录下创建一个hu_test文件。

3. 把huexec以root权限提升为4777权限,然后把这个文件预先copy到/system/bin目录下,以便普通的app能访问到。

4. 验证结果。


关键代码:

jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
{
	system("huexec");
    return (*env)->NewStringUTF(env, "Hello dear from my JNI !");
}

huexec.c的代码

#include 

int main(int argc, char* argv[])
{
    fclose(fopen("//data//hu_test","w"));
    return 0;
}

验证结果,在/data/目录下找到生成的hu_test,实验成功。
NDK编程实践之调用系统命令实现权限临时提升_第1张图片


遇到几个问题:

1. 不能往虚拟机的sdcard写入。

原因:放虚拟机文件的目录没有去掉只读标记,我的目录是E:\.android\avd,进入这个目录右键,把只读去掉即可。

2. 不能往system目录写入。

原因:估计默认开机是以只读方式mount的,在终端里面执行:

adb remount之后再去访问就可以了。

用adb shell进入虚拟机之后,直接就是#提示符,也就是root权限。比用手机还方便,我的手机没有root,做不了这个实验。

3. 用系统命令生成的新文件找不到地方,也不知道是否真的成功,用强制指定决定路径解决。


你可能感兴趣的:(NDK编程实践之调用系统命令实现权限临时提升)