2005.3.20-IT俱乐部-活动笔记

本文整理了Advanced Debugging相关知识,包括调试者与被调试者概念、系统内存分配、函数地址分布、WinDBG调试方式及命令分类,还介绍了软件异常、用户态和内核态堆栈、蓝屏异常等内容,给出调试技巧和参考书籍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于未拿到讲座的ppt,暂时把我记下来的先整理出来,肯定会有许多遗漏和错误,还望大家指出或补充。

Advanced Debugging
        By Raymond Zhang

Debuger     调试者
Debuggee  被调试者

系统内存分配
00000000-7FFFFFFF        HAL
7FFFFFFF-

-FFFFFFFF                          System Cache Page System

函数的地址分布
EBP - Extended Based Point
EBP+8        第一个参数地址
EBP+4        返回值地址

WinDBG调试方式
1. 由Windbg启动一个进程(该方式可以保证调试器是窗口的主进程)
2. 附加到一个Running 的进程
3. 附加到目标计算机

命令分类
1. Regular Command
     d+xxx        显示
     e+xxx        修改
     b+xxx        断点
     r+xxx         寄存器
2. Meta Commands
    reboot    重启程序
    reload    重新加载符号文件
3. Extended Command
    process 列出所有进程
    通过process命令显示的进程列表中的一些参数说明:
    SessionID    所在桌面的ID,在多桌面情况下有效,默认为0
    DirBase        内核对象基地址
    Image            exe文件名

调试演示1:通过GetWindowText()获得Outlook帐号界面中的密码框中的内容
说明:
1. WinXP API规定必须从自己进程发出的消息或命令才会被处理
2. 非攻击性Attach是被Windows系统允许的
00000000 00000000 00000000 00000000
假设以上为事件调用GetWindowText()时,GetWindowText()的函数入口情况,第一个是函数的Handle地址,第二个是buffer的地址,第三个是buffer的长度地址

Software Exceptions 0-255(这里的异常是汇编级异常,与.net中的异常完全不同)
0    Divide by Zero
1    Debug Exception
3    Breakpoint
4    Overflow by NTO
5    Array Bounds Check
6    Invalid opcode        (WinNT下,IN / OUT 操作可能引发)
?     Page fault    (缺页异常)
如:int 3h    产生断点,VC中通过保存特定行的语句,并用int 3h代替来实现断点
在程序Hex中我们经常看到“烫”,其实它是ASCII码DCDC转换而来,DC表示一个int 3h

用户态堆栈    1MB
内核态堆栈    8KB 

在VS.net或VC未安装时,异常是由Windows自带的Dr  Watson处理,并且弹出提示对话框的
在Dr Watson中可以设置是否允许Debug
在注册表中可以设置使用哪个调试器,在AeDebug中

用户堆栈
    _______________-
        参数                            SP+8
    ————————
        返回值                        SP+4
    ————————
        调用堆指针                SP(本行下面一条边,就是SP地址)
    ————————
        本地变量
    ————————
从上到下,地址从大到小
一些黑客可以利用特定的字符串传入,覆盖本地变量并且造成buffer overflow来向上覆盖返回值,从而获得对程序的控制权。(这时可能返回到不该返回的地方,如黑客指定的控制程序)


BSOD(Blue Screen of Death)
通常是由于发生了驱动程序无法处理的异常,而被os捕获造成的
STOP:  0xC0000005(0x0000000,0x0000000,...)
0xC0000005为异常码,可以在Windbg帮助文件中的Bug Checks中找到对应的异常码和具体说明
括号中的内容是特定异常码所对应的参数,也可以在Windbg的帮助文件中找到。注意,每一个异常码对应特定个数和类型的参数
(以上例子中的0x0C0000005是访问异常)

在WinDbg中用户可以通过!analyze -v命令实现对Dump File的自动分析,它会告诉你是哪个驱动程序引起蓝屏的,通常情况下,这一信息时可靠的。

技巧:大家可以通过关闭 我的电脑->启动与恢复设置->系统失败 自动重新启动选项,实现蓝屏后不马上重新启动,以便于记录下错误信息,方便调试。

推荐的两本参考书:
Debugging Applications By John Robbins
Debugging Principle    By Raymond Zhang    (not published)

即将开通的IT俱乐部网站:www.chinaitclub.org


************************************Updated ***************************************
祝成科技提供的讲义下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值