阅读:1431回复:7
softice怎样调试驱动程序请教
各位大侠,小弟现在在学习usb驱动程序的开发,而且也同时在看softice的使用,水平很
低的哦,所以现在先向大侠们了解一下,softice怎么进行驱动程序的调试呢?谢谢! |
|
沙发#
发布于:2003-12-01 14:32
2. 使用softice调试程序
下面是调试程序的一般步骤: 首先我们要确认是否根据需要调试的程序(应用程序还是内核程序)而设置好了SoftICE的正确的启动模式。如果不是则需要运行SoftICE->StartUp Mode Setup重新设置。具体的方法见前。 使用Ctrl+D组合键调出SoftICE窗口,确认已经加载了SoftICE后,我们可以进行需要调试程序的加载。 a 打开Soft-ICE->Symbol Loader工具。 b 用\"File\" 菜单中的\"Open Module ...\"菜单项打开需要调试的可执行文件。 c 用\"Module\"菜单中的\"Load\"菜单项装载调试符号文件。如果目的文件并没有调试信息的话,Symbol Loader会警告你,只能够进行汇编级调试,而不可以进行源码级调试。 d 用\"Module\"菜单中的\"Translate\"菜单项将需要调试的文件转换成Soft-ICE的 NMS调试符号文件。 e 现在调试文件的加载工作已经完成,可以按Ctrl+D组合键激活SoftICE,加入断点,进行调试了。 f 窗口一开始是有点小,所以我们可以先调整窗口,使用 lines X 命令可以将调试窗口设置为X行 width X 命令可以将调试窗口设置为X列 g 使用file命令显示目前符号表中的源码文件,进而使用file xxx.c在源码窗口中打开xxx.c源码文件。 h 使用bpx xxx来设置断点。xxx为xxx.c文件中存在的函数。 i F5退出SoftICE窗口,执行需要调试的程序,程序执行到我们设置的断点处将自动进入SoftICE窗口,进行跟踪操作,这时我们就可以使用SoftICE中的各种命令来跟踪程序的流程。 在这里我将对SoftICE一些常用命令进行说明。由于SoftICE中有在线的参数提示,所以我在这里就没有提及各命令的参数。 ?窗口控制命令 如果你能够使用鼠标的话,很方便就可以改变窗口的大小。 LINES 改变SoftICE窗口的显示行数 WIDTH 改变SoftICE窗口的显示列数 WL 打开或关闭局部变量窗口;设置局部变量窗口的大小 WR 打开或关闭寄存器窗口 WW 打开或关闭监视窗口;或改变监视窗口的大小 WD 打开或关闭数据窗口;或改变数据窗口大小 WC 打开或关闭代码窗口;或改变代码窗口大小 CLS 清除命令窗口中的字符 DATA 显示另一个数据窗口 ?数据/代码监视命令 以下的命令是用来监视目前程序中的数据或变量的。 FORMAT 改变数据窗口的显示格式 DEX 在数据窗口中显示(或赋予)某个表达式 WATCH 加入一个变量到监视窗口中 LOCALS 从当前栈中列出局部变量 STACK 显示某个调用栈 ?Windows系统信息命令 在调试程序的时候当然不能脱离调试的环境,所以就有了以下极其有用的命令用来显示目前Windows系统的内部状态。这可是我所见过的最为详细的Windows系统信息。 GDT 显示全局描述符表 CLASS 显示WINDOWS的类的信息 CPU 显示寄存器内容 HEAP 显示Windows全局堆 HWND 显示窗口句柄的信息 IDT 显示中断描述符表 LDT 显示局部描述符表 LHEAP 显示Windows 局部堆 MOD 显示Windows模块列表. PAGE 显示页表信息 PCI 显示系统中每个PCI设备的情况. PROC 显示系统中所有进程的简要信息 QUERY 显示某个进程的虚拟地址映象 TASK 显示Windows任务列表 THREAD 显示线程信息 PHYS 显示某个物理地址对应的所有虚拟地址. ?跟踪调试控制命令 这里的大部分命令都是原大名鼎鼎的Debug也有的,当然SoftICE中已经将他们的功能大大加强了。 G 执行到某一地址 X 从SoftICE窗口中退出 HERE 运行到当前光标所在行 P 单步执行程序. 在汇编模式中,当遇到 CALL,INT,LOOP,REP指令时,P将不跟踪进去,直到这些指令执行完毕,控制才返回SoftICE T 单步跟踪 R 显示或更改寄存器的内容 S 在内存中搜寻特定数据 A 写入汇编代码 C 比较内存中两块区域的内容 D 用最后一次指定的形式显示内存 DB 以字节的形式显示内存 DW 以字的形式显示内存 DD 以双字的形式显示内存 E 用最后一次指定的形式编辑内存 EB 以字节的形式编辑内存 EW 以字的形式编辑内存 ED 以双字的形式编辑内存 F 填充某一块内存区域 U 显示反汇编后的汇编码 ?断点命令 中断是SoftICE中重要的功能。中断点的触发可以由内存某地址的读取、内存范围的存取、程序的执行及端口的存取来达成。SoftICE 赋与每个中断点一个一位的 16 进制号码( 0 - F ) 。这个中断点号码是当你对中断点做启动、删除、中止、编辑等动作时使用。SoftICE 的所有中断点在启动后不会自动消失。你必需以 BC 或 BD 命令来消除或关闭它。SoftICE 一次最多可以处理 16 个中断点。同种类型的中断点最多可以有 10 个。但内存地址的中断点 ( BPM ) 因 80386 处理器之寄存器的缘故,最多只能设 4 个。设置中断点时可以设个计数参数。计数参数是中断点真正触发作用前被忽略的次数。 具体指令: BPM BPMB BPMW BPMD --- 在内存地址被存取或执行时触发中断 BPR --- 对内存地址范围设置中断点 BPIO --- 对 I/O 端口存取时触发中断 BPINT --- 呼叫中断时触发中断 BMSG 在WIN95的消息上设置断点 BPX --- 设置 / 清除 执行中断点 CSIP (16位程序才有用) 为所有断点设定一个界限(CS:EIP在其内)(16位程序) BPAND --- 等待复合中断点的发生 BD --- 中止中断点 BE --- 启动中断点 BL --- 列出中断点 BPE --- 编辑中断点 BPT --- 把中断点当样板 BC --- 清除中断点 ?内存/端口存取命令 SoftICE甚至提供了在Windows下直接存取物理内存的能力,当然武器在你手里,你得知道应该怎么用,否则就是号称永不死机的Windows 2000也会轻松崩溃。 I 从输入/输出(I/O)端口读入数据 O 向I/O端口输出数据. PEEK 从物理内存中读数据 POKE 向物理内存写数据. ADDR 在SoftICE中显示或是切换内存区域 ?符号/源码命令 以下命令是对SoftICE中的源码及符号表进行操作的。SoftICE可以一次将多个符号表装入内存。SoftICE支持16,32位WINDOWS程序,DLLs,VxDs,Sys内核驱动程序.但每一时刻只能从一个符号表中取得符号,你若是要用某个符号表中的符号,必须先用TABLE命令选中。FILE则是用来选择当前显示的源文件。源文件可以有三种不同的格式显示:源程序、反汇编代码及两者混和。使用SRC可以使它在这三种不同格式中切换。 FILE 显示或切换当前源文件 TABLE 显示或切换当前符号表 SRC 在源程序,反汇编代码,两者混和 之间切换显示. SS 在源程序文件中查找字符串 EXP 显示DLL中的出口函数 SYM 显示或设置符号 SYMLOC 重定位符号基址 ?其他操作命令 ? 计算一个表达式的值.并以十六进制,十进制,带符号的十进制显示结果 . 当代码窗口可见时, 此命令使得当前的CS:EIP所指向的指令可见, 并且高亮显示 EXIT 强行退出DOS程序或WINDOWS程序 |
|
板凳#
发布于:2003-12-01 23:29
楼上的兄弟,能介绍下怎么设置softice吗?
谢谢 |
|
|
地板#
发布于:2003-12-02 12:20
1,SoftICE启动模式设置是选择SoftICE在什么时候启动,其中有四个选项:
Boot: 在Windows启动之前加载SoftICE,这个选项非常强大,甚至可以让你跟踪Windows启动的代码,主要是用于跟踪调试等级与Windows核心一样的驱动程序,当然也可以调试所有的应用级程序。 System: 与Windows一起启动,适用于跟踪调试Windows应用程序。 Automatic: 自动启动,与Windows一起启动,适用于跟踪调试Windows应用程序。 Manual: 手工启动,运行开始->SoftICE->Start SoftICE才启动SoftICE,当然它不能调试内核驱动程序。 2,选择鼠标接口:ps/2或com1/com2或usb 3,检测显示器: 其它的设置我没改过 |
|
地下室#
发布于:2003-12-02 12:22
?Symbol Loader 符号加载器
在你调试程序前必须要运行符号加载器。它的功能是通知SoftICE加载将要调试的程序,然后转换程序的调试符号表,使SoftICE能够在源码级上进行调试(这当然要求你编译的程序是调试编译即Debug Build的)。 它主要有以下的操作命令: Open: 打开需要调试的程序,一般说有以下几种:用户级程序有*.exe , *.dll, *.ocx, *.vbx; 内核级程序有*.sys (win 2K/nt) , *.vxd, *.386, *.drv (win Me/9x)。 Load: 将所打开的程序加载。 Translate: 将源码转换为SoftICE识别的NMS符号文件。如果你在编译或汇编时指定了Debug Build(即调试编译),那么可执行程序中将包括函数输入输出符号表和源码路径等调试需要的信息,所以你不需要特意指定你的源码路径,SoftICE能够找到它。 Load Exports: 加载32位的输出动态文件,它包括驱动程序、win32应用程序、dll程序等。Load Exports在调试没有调试信息的dll时格外有用。 SoftICE Initialization Setting: 初始化SoftICE设置。你可以在这里修改一些SoftICE预设的设置,象快捷键等。 你可以使用快捷键在SoftICE中代替一些常用命令,以下为预设的快捷键: F1 --- 显示帮助 F2 --- 打开/关闭寄存器窗口 F3 --- 切换当前源码的模式 F4 --- 回到Windows F5 --- 执行 F6 --- 在命令窗口和源码窗口切换 F7 --- 执行到光标所在行 F8 --- 单步执行,如果调用过程,则跟踪进入进程 F9 --- 在光标所在行设中断点 F10 --- 单步执行,如果调用过程,则跳过过程 F11 --- 执行到SS:EIP F12 --- 从当前的过程中返回 Shift-F3 --- 改变数据窗口内的数据的格式 Alt-F1 --- 打开或关闭寄存器窗口 Alt-F2 --- 打开或关闭数据窗口 Alt-F3 --- 打开或关闭代码窗口 Alt-F4 --- 打开或关闭监视窗口 Alt-F5 --- 清除命令窗口 |
|
5楼#
发布于:2003-12-02 12:29
symbol loader的设置也挺重要
1,启动symbol loader 2,module->setting: 1)translation:选中symbols and source code加载symbol和源代码 并选中package source with symbol table 其它的自己找找 |
|
6楼#
发布于:2003-12-02 16:40
本人的系统为win2k,softice为4。27,正在学习用softice调试驱动程序。其中当我open 我的wdm1设备的驱动程序wdm1.sys,然后是translate,结果出现
Translating file: C:\\WINNT\\system32\\drivers\\Wdm1.sys... Error: No debug information found. 也无法载入此程序,请问应该怎么办?谢谢! |
|
7楼#
发布于:2003-12-03 13:16
2,module->setting:
1)translation:选中symbols and source code加载symbol和源代码 并选中package source with symbol table 其它的自己找找 ///////////////////////////// 以上的你选中了吗???????? |
|