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 <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. 用系统命令生成的新文件找不到地方,也不知道是否真的成功,用强制指定决定路径解决。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值