首页
社区
课程
招聘
[Xposed开发] 对一个实例的ArrayList成员对象进行遍历访问是否安全
2022-12-5 01:50 8447

[Xposed开发] 对一个实例的ArrayList成员对象进行遍历访问是否安全

2022-12-5 01:50
8447

我在 "com.android.server.am.ActivityManagerService" 拿到其成员 mProcessList 里的 mLruProcesses 对象,ArrayList类型:

1
2
3
4
5
mLruProcesses = (ArrayList<?>) XposedHelpers.getObjectField(mProcessList, Enum.Field.mLruProcesses);
 
for(Object obj:mLruProcesses){ // TODO 线程安全?
  //do something...
}

在遍历访问时,该对象在原来的进程里可能还有其他线程对其修改,只读遍历会不会有线程安全问题?有问题的话,该如何避免。

 

或者,通过Hook Replace另一个对其有访问行为的method,这个方法是有@GuardedBy()修饰锁的,我再 XposedHelpers.callMethod 不知是否安全?


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 1651
活跃值: (8461)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
你瞒我瞒 2022-12-5 14:07
2
0
如果只是想遍历的,你可以创建一个新的list,把你关注的list倒进入新的list中,你操作新的list就行
雪    币: 263
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
军哥i 2022-12-8 09:07
3
0
不安全的,在遍历的时候,如果这个list的内容减少了,你这段代码就直接崩了,你可以new 一个list,然后将原数组的内容复制到新数组,对新数组进行遍历
雪    币: 15
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
JARK006 2022-12-22 22:43
4
0
军哥i 不安全的,在遍历的时候,如果这个list的内容减少了,你这段代码就直接崩了,你可以new 一个list,然后将原数组的内容复制到新数组,对新数组进行遍历
有个疑惑,将原数组复制到新数组,肯定有对原数组的访问读取操作,这个过程是怎样保证线程安全,或者说存在线程安全的操作方式?
雪    币: 15
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
JARK006 2022-12-22 22:43
5
0
你瞒我瞒 如果只是想遍历的,你可以创建一个新的list,把你关注的list倒进入新的list中,你操作新的list就行
有个疑惑,将原数组复制到新数组,肯定有对原数组的访问读取操作,这个过程是怎样保证线程安全,或者说存在一个线程安全的操作方式?
雪    币: 91
活跃值: (348)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
全都是HOOK 2022-12-23 01:00
6
0
这不就是纯Java多线程问题么, 怕线程不安全就加锁呗
雪    币: 1651
活跃值: (8461)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
你瞒我瞒 2022-12-24 12:26
7
0
全都是HOOK 这不就是纯Java多线程问题么, 怕线程不安全就加锁呗
直接new一个list,丢旧数据,这还有需要线程安全?你本来就是在当前线程hook的,同一个线程做事情,哪里来的安全,直接把数据导过来就行。
游客
登录 | 注册 方可回帖
返回