您的位置:首页 > 编程语言

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

2014-04-26 18:00 465 查看
先声明一下这是参考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 <stdio.h>

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


验证结果,在/data/目录下找到生成的hu_test,实验成功。



遇到几个问题:

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

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

2. 不能往system目录写入。

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

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

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

3. 用系统命令生成的新文件找不到地方,也不知道是否真的成功,用强制指定决定路径解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: