Windbg 内核态调试用户态进程

之前写过双机调试环境的搭建,一般用来调试驱动这样内核态的东西,今天遇到一个问题,就是在内核态的情况下怎么给用户态的程序下断点?也就是在内核态怎么调试用户态的程序,比如想要给CreateProcessW这个API下断点怎么整?因为CreateProcessW这个API是位于Kernel32.dll这个模块里边的,但是这个模块是属于用户态的模块,内核会话不会加载这个模块。
使用的示例:自己写的Demo,用OD附加之后,给CreateProcessW下断点(其实没必要使用OD附加)
接下来开始展示:
1、搭建双机调试环境
2、执行!process 0 0 目标进程名 命令(!process命令可以打印出活动进程的信息。第一个参数是要打印的EPROCESS的地址,如果指定为0则表示打印所有的进程。第二个参数用于说明打印进程信息的详细级别。指定0则表示打印最简单的信息。)

3、获取到目标进程的详细信息之后,执行.process /p +EPROCESS信息(上边获取到的)执行该命令的作用是切换到目标应用程序的地址空间

4、强制重新加载用户态的符号

.reload /f /user
1
5、查看此时加载的模块(Kernel32.dll模块是否被成功加载)

6、下目标断点

需要注意 这个时候,下了目标断点之后,开始执行新的进程之后,并不会断下来,也就是命不中断点,需要再新增一条命令

.process /i /p 目标进程的EPROCESS
1
之后,正常下断点,执行g命令就可以正常命中断点了

总结:
过程如下:
1、!process 0 0 目标进程名 获取目标进程EPROCESS基本信息
2、.process /p +EPROCESS信息 切换到目标进程空间
3、.reload /f /user 强制重新加载用户态符号
4、.process /i /p 目标进程的EPROCESS 侵入式调试
5、bp 目标API 执行下断点命令

侵入式调试和非侵入式调试
侵入式:在采用侵入式的方式进行调试用户态的进程的时候,默认使用Windows的函数:DebugActiveProcess 在调试器和被调试程序之间建立一个连接,使得可以查看修改进程的内存,设置断点,或者实现其他的一些调试功能。同时,使用侵入式的调试方式,可以在不杀死目标进程的情况下退出调试状态,只需要退出调试器,中断连接就好。
非侵入式:使用这种方式的时候,调试器只是采用简单的OpenProcess函数来打开进程,来达到检查或者修改内存的目的,但是需要注意的是,使用这种方式来进行调试的时候,不能实现调试器下断点的功能。

参考:
https://blog.csdn.net/yjz1409276/article/details/72809691
https://blog.csdn.net/u010350434/article/details/83147209

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值