首页
社区
课程
招聘
[讨论]关于硬件断点和多线程的关系
发表于: 2016-3-25 14:34 6041

[讨论]关于硬件断点和多线程的关系

2016-3-25 14:34
6041
写了段代码,用线程启动的,里面放了个全局变量,赋指定的值,搜到这个全局变量的地址之后,
用od下硬件访问断点,然后点某按钮开始新线程循环对那个全局变量写入i++,
od断不下来,但是ce的检测是什么访问了这个地址却有数据找到写入的线程地址
要在什么情况下硬件断点才支持多线程呢

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 163
活跃值: (103)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
每个线程都设置一遍。
2016-3-25 15:13
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
具体怎么做啊,怎么每个线程设置一遍,硬件断点是cpu控制的,不是线程控制的哦
2016-3-26 11:38
0
雪    币: 39
活跃值: (2881)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不要设硬件断点,设内存访问断点即可。
2016-3-26 12:15
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
是的,内存断点可以,不过想知道为啥硬件断点不行的原因,呵呵
2016-3-26 12:40
0
雪    币: 19
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
虽然每一个cpu线程有一份硬件断点,但windows为了实现多线程,在cpu线程的基础上再次
分立(这样讲不够严谨,但应该好理解)
当前win thread线程执行内容保留在 kthread 结构中,当需要执行时从kthread中取出当前
线程状态寄存等信息,赋值给cpu线程来执行

so,你要给每一个线程设置一个.
ZwQueryInformationThread获取到线程信息然后使用 setthreadcontext 设置就可以了.
2016-3-29 15:44
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
用od下硬件访问断点,然后点某按钮开始新线程循环对那个全局变量写入i++
od断不下来,是由于LZ下硬件断点之前,线程还没有起来
2016-3-29 16:42
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
貌似有点关系
2016-4-13 18:09
0
雪    币: 334
活跃值: (78)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
说明od有bug。ce开源的,你可以自己去看看,应该本来就支持多线程,而且也不是很难
2016-4-14 15:08
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
int3断点才需要设置setthreadcontext
2016-4-27 17:10
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
用DBG_EXCEPTION_NOT_HANDLED程序就直接退出了, 找了论坛有几个问这个问题的帖子,都是没有答复的,我查开源的调试器,貌似都没有找到怎么处理
2016-4-28 01:48
0
雪    币: 19
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
int3 为什么要设置setthreadcontext?
请参考调试器原理
2016-4-28 10:06
0
雪    币: 14
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
找到 该全局变量的存储地址,在此处设置内存访问断点。
2016-4-28 10:20
0
游客
登录 | 注册 方可回帖
返回
//