能力值:
( LV2,RANK:10 )
|
-
-
2 楼
啥程序呢呀
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
正常情况下是能在CreateThread行上下断点的,如果不行的话,请在线程回调函数的第一行下断点
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
一个基于bitshares的项目,代码封装太多,不知道在哪创建的线程,看起来比较累,所以想在通过调试找创建线程的地方
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
WinDBG 提供了多种设断点的命令:bp, bu, bm, ba。
bp命令是在某个地址下断点,可以bp 0x7783FEB,也可以bp MyApp!SomeFunction。对于后者,WinDBG会自动找到MyApp!SomeFunction 对应的地址并设置断点。 但是使用bp的问题在于:1)当代码修改之后,函数地址改变,该断点仍然保持在相同位置,不一定继续有效; 2)WinDBG 不会把bp断点保存工作空间中。所以,我比较喜欢用bu命令。
bu命令是针对某个符号下断点。 比如bu MyApp!SomeFunction。在代码被修改之后,该断点可以随着函数地址改变而自动更新到最新位置。而且bu断点会保存在WinDbg工作空间中,下次启动Windbg的时候该断点会自动设置上去。
另外,在模块没有被加载的时候,bp断点会失败(因为函数地址不存在),而bu断点则可以成功。新版的WinDBG中bp失败后会自动被转成bu。
bm命令也是针对符号下断点。 但是它支持匹配表达式。很多时候你下好几个断点。比如,把MyClass所有的成员函数都下断点:bu MyApp!MyClass::* ,或者把所有以CreateWindow开头的函数都下断点:bu user32!CreateWindow* 。
以上三个命令是对代码下断点, 我们还可以对数据下断点。
ba命令就是针对数据下断点的命令,该断点在指定内存被访问时触发。命令格式为
ba Access Size [地址]
Access是访问的方式,比如e(执行),r(读/写),w(写)
Size是监控访问的位置的大小,以字节为单位。值为1、2或4,还可以是8(64位机)。
比如要对内存0x0483DFE进行写操作的时候下断点,可以用命令 ba w4 0x0483DFE
这里顺便提以下其他断点命令:
bl 列出所有断点
bc 清除断点
bd 禁用断点
be 启动被bd 命令经用的断点
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
bp NtCreateThread ==> bp PspCreateThread
windbg用的不熟,这样的断点不一定断到目标线程上面,但肯定能断下来
不能用OD调么?
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
我在winbdg的events fliters中设置在有线程新创建时中断,是可以触发的,停在RtlUserThreadStart中,但是我是想找到线程触发的位置,bp KERNELBASE!CreateThread,或者bp NtCreateThread ,都没有反应
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
找到了断NtCreateThreadEx
|
|
|