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. 验证结果。
关键代码:
huexec.c的代码
验证结果,在/data/目录下找到生成的hu_test,实验成功。
遇到几个问题:
1. 不能往虚拟机的sdcard写入。
原因:放虚拟机文件的目录没有去掉只读标记,我的目录是E:\.android\avd,进入这个目录右键,把只读去掉即可。
2. 不能往system目录写入。
原因:估计默认开机是以只读方式mount的,在终端里面执行:
adb remount之后再去访问就可以了。
用adb shell进入虚拟机之后,直接就是#提示符,也就是root权限。比用手机还方便,我的手机没有root,做不了这个实验。
3. 用系统命令生成的新文件找不到地方,也不知道是否真的成功,用强制指定决定路径解决。
实验环境:
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. 用系统命令生成的新文件找不到地方,也不知道是否真的成功,用强制指定决定路径解决。
相关文章推荐
- ASP.NET 嵌套母版页中找不到控件问题(未已用到对象错误)
- ADO中_RecordsetPtr的使用
- php20140426
- Ruby 一些常用的细节
- Struts2之自定义类型转换器
- boost unordered 初识
- SEVERE: Servlet.service() for servlet jsp threw exception javax.el.PropertyNotFoundException: Proper
- java 阻塞模式与非阻塞模式
- Dozens of problems-scumarket API Dev (2)
- php的基本知识
- PHP 在网页中的运用
- ASP.NET MVC5 视图预编译
- C++primer plus第六版课后编程题答案14.5
- 读《高质量C++编程》总结
- tolua++ vs2013 lua5.1
- 黑马程序员_高新技术_JDK1.5的新特性
- c++-类的初始化列表
- java 字节流 字符流
- 编程之美 -- 寻找发帖水王,以及扩展题
- javaIO流-2