免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8317 | 回复: 10
打印 上一主题 下一主题

android内存操作的问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-03 14:14 |只看该作者 |倒序浏览
本帖最后由 q1531 于 2010-06-03 17:54 编辑

机器是milestone 系统android2.1
由于需要想修改properties里的ro.secure为0,因为这个是以ro.开头的不能使用setprop设置。

网上找到的办法是修改boot的default.prop再刷入,但在milestone上总是不成功,把修改后的boot刷入bootloader就无法引导启动了。听说的Milestone锁了bootloader的缘故。修改后的无法输入运行。

所以想到了通过直接操作内存的办法来修改。
在模拟器上,cat /dev/mem>/sdcard/mem。pull出来然后用winhex查到了ro.secure的地址。写了一个小程序通过open /dev/mem,然后mmap,实现修改指定地址的内容。在模拟器上测试能够修改ro.secure的值,但一弄到milestone上后修改没成功,估计是在milestone上和模拟器你ro.secure所在的地址不一样。

在milestone上cat /dev/mem>/sdcard/mem,报错:invaild length.
写一个小程序读内存,在读取的时候出现:[1]+ Stopped (signal)  .......。在模拟器上能正常读取。

读取内存的部分代码。

fd=open("/dev/mem",O_RDWR);
data = (char *)mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset);

for(i=0;i<len;i++)
{
   printf("mem[%d]:%c - 0x%x\n", i, *(data+ i),*(data+ i));
}

//打开和mmap部分都成功。就在*(data+i)这里出问题。用memcpy,复制映射的内存到其他地方,也会出现同样的问题。

dmesg的信息:
<1>[  103.215057] Unhandled fault: external abort on non-linefetch (0x1018) at 0x40009400
<1>[  103.317413] Unhandled fault: external abort on non-linefetch (0x1018) at 0x40009400
<1>[  103.369201] Unhandled fault: external abort on non-linefetch (0x1018) at 0x40009400
<6>[  103.369903] Core dump to |/system/bin/coredump pipe failed

求解。。。。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2010-06-03 17:25 |只看该作者
帮你顶。我也想知道。

论坛徽章:
0
3 [报告]
发表于 2010-06-05 17:17 |只看该作者
另外,运行的时候报了Bus error的错误!
难道是硬件方面的原因导致无法访问?

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
4 [报告]
发表于 2010-06-05 18:23 |只看该作者
楼主有整套代码?

论坛徽章:
0
5 [报告]
发表于 2010-06-05 19:20 |只看该作者
你们组还在做1.6?我们已经切换到2.0了,之前在做2.1。

论坛徽章:
0
6 [报告]
发表于 2010-06-05 21:06 |只看该作者
本帖最后由 q1531 于 2010-06-05 21:10 编辑

问题里的代码就是关键代码了。写一个简单的例子:

  1. #include <fcntl.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <memory.h>
  5. #include <unistd.h>
  6. #include <string.h>

  7. #include <sys/mman.h>
  8. #include <sys/types.h>

  9. #define        MEM_DEVICE        "/dev/mem"

  10. char *data;
  11. int main(int argc, char **argv)
  12. {

  13.        
  14.         int fd,i;
  15.         int size=512;
  16.         int offset=78848;
  17.         int offset_cut=offset%sysconf(_SC_PAGE_SIZE);


  18.         offset-=offset_cut;//offset必须是page_size的倍数
  19.         size+=offset_cut;
  20.        
  21.         fd=open(MEM_DEVICE,O_RDWR);
  22.         if(fd<0)
  23.         {
  24.                 printf("open error!\n");
  25.                 close(fd);
  26.                 exit(-1);
  27.         }

  28.         data=(char *)mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset);
  29.         if(data == MAP_FAILED){
  30.                 printf("map failed\n");
  31.                 close(fd);
  32.                 exit(-1);
  33.         }
  34.         close(fd);
  35.         data=data+offset_cut;

  36.         for(i=0;i<10;i++){
  37.                 printf("%c - 0x%x\n",*(data+i),*(data+i));
  38.         }
  39.        
  40.         munmap(data-offset_cut, size);
  41.         return 1;
  42. }
复制代码
在模拟器android2.1下运行的结果

# /data/prop
/data/prop
r - 0x72
o - 0x6f
. - 0x2e
s - 0x73
e - 0x65
c - 0x63
u - 0x75
r - 0x72
e - 0x65

在milestone上运行就和问题里出现的错误一样了。

论坛徽章:
0
7 [报告]
发表于 2010-06-07 13:53 |只看该作者
顶了!  学习!!!

论坛徽章:
0
8 [报告]
发表于 2010-06-07 22:55 |只看该作者
原因可能是 对齐 的问题!
但现在完全不清楚如何搞。。尝试了几种方法都不行。

论坛徽章:
0
9 [报告]
发表于 2010-06-08 09:41 |只看该作者
对齐就简单了,4个字节对齐。

论坛徽章:
0
10 [报告]
发表于 2010-06-08 14:57 |只看该作者
我把char *改为int *,是不是刚好四字节??
但这样改后还是出现问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP