您的位置:首页 > Web前端

2005.3.20-IT俱乐部-活动笔记

2005-03-24 13:10 218 查看
由于未拿到讲座的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 ***************************************

祝成科技提供的讲义下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息