SoftICE IceExt 0.70使用手册


SoftICE IceExt 0.70使用手册》
一、安装使用
SoftICE作为调试器王者当之无愧,但是对于为专业的程序分析来说还有很多不方便的地方,为此诞生了诸如IceExt之类的扩展SoftICE功能的插件,本文将描述IceExt。并逐步分析内核调试的技术和手段。
和以往的版本相比,IceExt有了很大的改观,在0.70版本中主要改变了人工的注册IceExt.sys 和使用net start IceExt的方式,这不知道算不算人性化设计,不过也方便了不少,但这不是最主要的,最大的改变是加入了eXTreme tRaCer Engine。使得SoftIce在输入特定的条件下跟踪单步调试,记录调试的过程信息。
首先,我们先下载IceExt,IceExt可以从http://sourceforge.net/projects/iceext免费获得,在发行版中 可以选择二进制版本和源代码,图方便的话,可以下载二进制版本的文件,当然这对于一个专业的调试人员是不适合的,毕竟我们需要研究一下这个东西内部的工作 原理,还有是否可以改进的地方,所以我建议还是下载源代码。不过下载源代码的同时你必须保证已经安装了WINDOWXP的DDK,当然你也可以选择 WINNT和WIN2000的DDK,但我使用的是WINDOWSXP SP2。
修改make.bat和source文件中的W2K,将其替换成WXP,以及修改sys/source中的ntoskrnlNT4.LIB 为$(DDKLIBPATH)/ntoskrnl.lib,我们可以使用make.bat来生成文件。当然我并不是使用make.bat来生成了,而是先 去BUILD了SYS,如果你使用的也和我一样是WINDOWS XP SP2相信也会得到 如下的错误。
errors in directory c:/iceext/iceext-0.70-src/sys
libmad.lib(stream.obj) : error LNK2026: module unsafe for SAFESEH image.
libmad.lib(synth.obj) : error LNK2026: module unsafe for SAFESEH image.
libmad.lib(frame.obj) : error LNK2026: module unsafe for SAFESEH image.
libmad.lib(bit.obj) : error LNK2026: module unsafe for SAFESEH image.
libmad.lib(layer3.obj) : error LNK2026: module unsafe for SAFESEH image.
libmad.lib(layer12.obj) : error LNK2026: module unsafe for SAFESEH image.
libmad.lib(timer.obj) : error LNK2026: module unsafe for SAFESEH image.
objfre_wxp_x86/i386/iceext.sys : error LNK1281: Unable to generate SAFESEH image.
什么是SAFESEH? safeseh是一项保护和检测和防止堆栈中的seh被覆盖而导致利用的技术。
在指定 /SAFESEH 后,只有在链接器还可以生成映像的安全异常处理程序表的情况下,该链接器才会生成一个映像。该表指定其异常处理程序适合于该映像的操作系统。
只有在对 x86 目标进行链接时,/SAFESEH 才有效。已说明异常处理程序的平台不支持 /SAFESEH。例如,在 x64 和 Itanium 上,所有异常处理程序都在 PDATA 中说明。ML64.exe 支持添加批注,这些批注将 SEH 信息(XDATA 和 PDATA)发出到映像中,允许您通过 ml64 函数展开。有关更多信息,请参见 MASM for x64 (ml64.exe)。

如果未指定 /SAFESEH,链接器将生成具有安全异常处理程序表的映像(如果所有模块都与安全异常处理功能兼容)。如果任意模块与安全异常处理功能不兼容,则最终 的映像将不会包含安全异常处理程序表。如果 /SUBSYSTEM 指定 WINDOWSCE 或某一 EFI_* 选项,则链接器将不尝试生成具有安全异常处理程序表的映像,因为上述任何子系统都不可以利用这些信息。

如果指定了 /SAFESEH:NO,则链接器将不会生成具有安全异常处理程序表的映像,即使所有模块都与安全异常处理程序功能兼容。

链接器无法生成映像的最常见的原因是:该链接器的一个或多个输入文件(模块)与安全异常处理程序功能不兼容。模块与安全异常处理程序不兼容的一个常见原因是:该模块是通过来自以前版本的 Visual C++ 的编译器创建的。

通过使用 .SAFESEH,还可以将函数注册为结构化的异常处理程序。

在 Microsoft Visual C++ 2005 中,无法将现有的二进制文件标记为具有安全异常处理程序(或不具有异常处理程序);必须在生成时添加关于安全异常处理的信息。

链接器能否生成安全异常处理程序表取决于使用 C 运行时库的应用程序。如果使用 /NODEFAULTLIB 进行链接,并希望得到一张安全异常处理程序表,则需要提供加载配置结构(例如可在 loadcfg.c CRT 源文件中找到的结构),此结构包含为 Visual C++ 定义的所有项。

为了编译通过我们必须取消/SAFESEH的连接参数,打开DDK中的i386mk.inc文件,将/SAFESEH参数去掉。好了,我们成功的生成了ICEEXT.SYS,将编译好的ICEEXT.SYS复制到/EXE文件夹,打开ICEExt.rc将
#ifdef _DEBUG
1 BINARY DISCARDABLE "..//sys//objchk_w2k_x86//i386//IceExt.sys"
#else
1 BINARY DISCARDABLE "..//sys//objfre_w2k_x86//i386//IceExt.sys"
#endif
改写成
#ifdef _DEBUG
1 BINARY DISCARDABLE "IceExt.sys"
#else
1 BINARY DISCARDABLE "IceExt.sys"
#endif
保存后,BUILD。
OK,我们得到了iceext.exe.
接下来我们要修改SOFTICE的注册表信息。
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/NTice]
"KDHeapSize"=dword:00008000
"KDExtensions"=""
好了,可以使用iceext –s来启动softice了。
迫不及待,我CTRL+D;
Lines 45;
Set font 2;
!help后调出了新的ICEEXT的全部功能。
!BC - 清除内存区块中所有的断点
!BL - 列出内存区块中所有的断点
!BPR - 中断在内存范围中
!CP - 设定当前代码页(866 or 1251)
!DUMP - dump内存到磁盘
!DUMPSCREEN - dumpSoftICE屏显成RAW格式到磁盘
!INTSAVE - 存储中断句柄
!INTREST - 恢复中断句柄
!INTXCHG - 置换中断句柄
!INTSHOW - 显示内部中断句柄表
!EB -内存补丁patch byte in memory (restores PTE after patching)
!FONT - 设定屏幕字体
!FPOS - 显示文件指针
!LASTBRANCH - 显示最后的MSR分支信息
!LOADFILE - 打开硬盘文件载入到内存镜像
!PROTECT - 开关 SoftICE 自我保护功能
!HELP - 显示帮助
!SUSPEND - 挂起当前执行的线程(仅ring-3线程)
!RESUME - 唤醒被挂起的线程
!TETRIS - 俄罗斯方块
!TRCINIT-初始化跟踪。
!TRACE-跟踪
!TRCCODE-察看跟踪代码。

目录: 本手册的功能 读者对象 本手册的组织结构 排版风格 如何使用本手册 其它相关文件 (外国人就是罗嗦,为了求全,只好随他了。) 第一章 欢迎使用SoftICE 产品概况 介绍SoftICE 介绍Symbol Loader 如何得到客户服务 联系NuMega公司的技术支持中心 第二章 安装SoftICE 介绍 硬件和软件要求 SoftICE显示选择 安装之前 安装 安装之后 配置BOOT。INI以便在多处理器系统中支持单CPU 配置SoftICEWindows 95下正确载入 通过串行口连接第二台计算机 解决显卡问题 第三章 SoftICE教程 介绍 载入SoftICE 构造GDIDEMO样本程序 装入GDIDEMO样本程序 控制SoftICE屏幕 通过源码跟踪和逐步调试 读本地数据 设定断点和目标断点 设定一个断点 设定STICKY断点 (此处不知STICKY作何解释。待我读到此处时大概会明白) 使用SoftICE命令行信息 使用符号和符号表 设定条件断点 设置BPX断点 编辑断点 设定读写内存断点 第四章 将代码装入SoftICE 调试的概念 准备调试程序 准备调试设备驱动程序和VxDs(虚拟设备驱动程序) 手工装入SoftICE 装入SoftICE for Windows 95 装入SoftICE for Windows NT 构造带有调试信息的程序 使用Symbol Loader转换和载入文件 修改模块设定 修改通用设定 修改编译设定 修改调试设定 指定程序的源文件 删除符号表 在DOS命令行里使用Symbol Loader 使用Symbol Loader的命令行工具 NMSYM命令行的语法 使用NMSYM来转换符号信息 使用NMSYM来装入模块和符号信息 使用NMSYM来装入或导出符号表 使用NMSYM卸载符号信息 使用NMSYM来保存历史记录 关于NMSYM的信息 第五章 SoftICE导航 介绍 呼出SoftICE窗口 启动时禁用SoftICE 使用SoftICE窗口 调整窗口大小 控制窗口 拷贝和粘贴数据 用鼠标输入命令 得到帮助 使用命令窗口 滚动窗口 键入命令 重呼命令 使用运行时宏 将命令窗口的历史缓存保存到文件 相关命令 控制代码窗口 读信息 在代码窗口键入命令 使用本地窗口 控制本地窗口 扩展和分解堆栈 相关命令 使用观察窗口 控制观察窗口 设定观察表达式 读信息 扩展和分解类型表达式 相关命令 使用寄存器窗口 控制寄存器窗口 读信息 编辑寄存器和标志位 相关命令 使用数据窗口 控制数据窗口 读信息 改变内存地址和格式 编辑内存 辅助表达式 相关命令 第六章 使用SoftICE 在跟踪错误时调试多个程序 跟踪错误 Ring-3 32位保护模式(Win32程序) Ring-0 驱动代码(内核模式设备驱动程序) Ring-3 16位保护模式(16位Win程序) 地址内容 使用INT 0x41 .DOT命令 理解从R-3到R-0的转变 第七章 使用断点 第八章 ----------------------------------------------------------- (...很累人那!今天就这些了吧.因为我也是读一些翻译一些,所以有些"向前引用 "的名词术语不知道要如何解释其意义.应该读完再翻译比较好...不过那个时候我 又开学了......一点时间也没有了!) 第七章 使用断点 介绍 SoftICE所支持的断点类型 断点选项 执行断点 内存断点 中断断点 I/O断点 窗口消息断点 理解断点的含义 虚断点 设置断点活动 条件断点 条件断点计数功能 在条件表达式中使用本地变量 在条件断点里引用堆栈 参考 多重断点 所用时间 断点统计 在表达式中引用断点 维护断点 使用内嵌断点 第八章 使用表达式 表达式 操作符 操作符优先级 形成表达式 表达式类型 定制类型 取得符号的数值 间接使用符号 第九章 装入系统组件符号 装入由DLL和EXE文件导出的符号表 使用未命名的入口点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值