android内存操作的问题!
本帖最后由 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%xn", 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
求解。。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
我把char *改为int *,是不是刚好四字节??
但这样改后还是出现问题。
对齐就简单了,4个字节对齐。
原因可能是 对齐 的问题!
但现在完全不清楚如何搞。。尝试了几种方法都不行。
顶了! 学习!!!
本帖最后由 q1531 于 2010-06-05 21:10 编辑
问题里的代码就是关键代码了。写一个简单的例子:
复制代码在模拟器android2.1下运行的结果
# /data/prop
/data/prop
r - 0x72
o - 0x6f
. - 0x2e
s - 0x73
e - 0x65
c - 0x63
u - 0x75
r - 0x72
e - 0x65
在milestone上运行就和问题里出现的错误一样了。
你们组还在做1.6?我们已经切换到2.0了,之前在做2.1。
楼主有整套代码?
另外,运行的时候报了Bus error的错误!
难道是硬件方面的原因导致无法访问?
帮你顶。我也想知道。