terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:1616回复:13

softice下代码的装载的问题

楼主#
更多 发布于:2004-02-17 13:55
请问什么才叫有调试信息的代码啊,kdprint不算么?用symbol loader老是说没有调试信息,nms就是生成不了啊,高手请教。

最新喜欢:

TOMG2004TOMG20... dregsdregs
LinCS
驱动牛犊
驱动牛犊
  • 注册日期2003-01-25
  • 最后登录2005-04-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-02-17 14:59
你的 *。sys文件必须check模式下构造的才行,不能用free的。
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-17 15:08
我是在checked mode下编译的阿。而且有KdPrint()啊
Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-02-19 09:57
问个问题呀: softice安装后,如何启动调试界面,如何调试?我好像不能进入调试界面,请各位指教!
*学*
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-02-19 10:32
ctrl+d 先确定你的softice已经起来了
Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-02-19 14:45
terrychen兄,我驱动已装载了,softice也出来了,然后怎么找到我自己的驱动呢?
*学*
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-02-19 14:56
先用driver命令,看看你的driver是不是已经起来了,如果你的意思是说你想看你的程序的kdprint和其他的调试信息,你得用symbol loader先生成一个nms文件,然后再load进来,就可以了。
Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-02-19 15:16
terrychen兄,我是做游戏的,以前没搞过驱动,能有你的qq,那样交流方便些 ? 冒昧!!
*学*
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-02-19 15:26
其实我也只开始不到半年了,没有qq,只有msn了,klos@263.net
Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-02-19 19:12
请问如何在softice屏幕下显示 *.c的源程序 ?是不是SRC,怎么没用?

*学*
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
10楼#
发布于:2004-02-20 09:52
请问如何在softice屏幕下显示 *.c的源程序 ?是不是SRC,怎么没用?

 


要显示*.c源程序,首先要求你在生成NMS的时候选中 Symbols and source code (加载symbol和源代码),并选中 Package source with symbol table (将源码打包进NMS符号文件)选项。

然后在调试的时候可以进行源码级调试。另外用 File 命令也可查看源文件。

下面是某位驱动网友(不记得是谁了 :))写的一个用SoftICE调试的指南,看看吧!其他问题还是查SoftICE帮助吧。

-------------------------------------------------
使用softice调试程序

下面是调试程序的一般步骤:

首先,我们要确认是否根据需要调试的程序(应用程序还是内核程序)而设置好了SoftICE的正确的启动模式。如果没有,则需要运行SoftICE->StartUp Mode Setup重新设置。

使用Ctrl+D组合键调出SoftICE窗口,确认已经加载了SoftICE后,我们可以进行需要调试程序的加载。

a 打开 Soft-ICE -> Symbol Loader 工具。

b 用 "File" 菜单中的 "Open..." 菜单项打开需要调试的可执行文件。

c 用 "Module" 菜单中的 "Load" 菜单项装载调试符号文件。如果目的文件并没有调试信息的话,Symbol Loader 会警告你,只能够进行汇编级调试,而不可以进行源码级调试。

d 用 "Module" 菜单中的 "Translate" 菜单项将需要调试的文件转换成 Soft-ICE 的 NMS 调试符号文件(Translate之前,先选中工具栏上的 "Package Source" 按钮)。

e 现在调试文件的加载工作已经完成,可以按 Ctrl+D 组合键激活 SoftICE,加入断点,进行调试了。

f 窗口一开始时有点小,所以我们可以先调整窗口,使用
  lines X 命令可以将调试窗口设置为X行
  width X 命令可以将调试窗口设置为X列
  SET Maximize ON 可以将调试窗口设置为自动最大化

g 使用 file 命令显示目前符号表中的源码文件,进而使用 file xxx.c 在源码窗口中打开 xxx.c 源码文件。

h 使用 bpx xxxx 来设置断点。xxxx 为 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系统信息。

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 ) 最多只能设 4 个。设置断点时可以设个计数参数。计数参数是断点真正触发作用前被忽略的次数。

具体指令:

  BPM BPMB BPMW BPMD --- 在内存地址被存取或执行时触发中断
  BPR --- 对内存地址范围设置断点
  BPIO --- 对 I/O 端口存取时触发中断
  BPINT --- 呼叫中断时触发中断
  BMSG 在WINDOWS的消息上设置断点
  BPX --- 设置 / 清除 执行断点
  BPAND --- 等待复合断点的发生
  BD --- 关闭断点
  BE --- 启用断点
  BL --- 列出断点
  BPE --- 编辑断点
  BPT --- 把断点当样板
  BC --- 清除断点

?内存/端口存取命令

SoftICE 甚至提供了在 Windows 下直接存取物理内存的能力。当然,武器在你手里,你得知道怎么用,否则你的 Windows 可能会立刻崩溃。

I 从I/O端口读入数据
O 向I/O端口输出数据
PEEK 从物理内存中读数据
POKE 向物理内存写数据
ADDR 在SoftICE中显示或是切换内存区域


?符号/源码命令

以下命令是对SoftICE中的源码及符号表进行操作的。SoftICE可以一次将多个符号表装入内存。SoftICE支持16,32位WINDOWS程序,DLL,VxD,Sys内核驱动程序。但每一时刻只能从一个符号表中取得符号,你若是要用某个符号表中的符号,必须先用TABLE命令选中该符号表。
FILE 则是用来选择当前显示的源文件。源文件可以有三种不同的格式显示:源程序、反汇编代码及两者混和。使用 SRC 命令(或F3键)可以使它在这三种不同格式中切换。

FILE  显示或切换当前源文件
TABLE 显示或切换当前符号表
SRC   在源程序, 反汇编代码, 两者混和 这三种方式之间切换显示
SS    在源程序文件中查找字符串
EXP   显示DLL中的出口函数
SYM   显示或设置符号


?其他操作命令

? 计算一个表达式的值,并以十六进制,十进制,带符号的十进制显示结果
. 当代码窗口可见时,此命令使得当前的CS:EIP所指向的指令可见,并且高亮显示。
HBOOT 强行重启WINDOWS系统


1. Startup (SoftICE启动模式设置,选择在什么时候启动SoftICE):
Boot: 在Windows启动之前加载SoftICE,这个选项非常强大,甚至可以让你跟踪Windows启动的代码,主要是用于跟踪调试在Windows启动过程中加载的驱动程序,当然也可以调试所有的应用级程序。
System: 与Windows一起启动,适用于跟踪调试Windows应用程序。(启动时间比前一个选项稍晚)
Automatic: 自动启动,与Windows一起启动,适用于跟踪调试Windows应用程序。(启动时间比前一个选项稍晚)
Manual: 手工启动,运行 开始->SoftICE->Start SoftICE 才启动 SoftICE。
Disabled: 不启动SoftICE。

2. Mouse (选择鼠标接口):
PS/2或COM1/COM2或USB
如果你的鼠标有滚轮,要选中 Enhanced Mouse 选项

3, Video (设置显卡):
一般选择 Universal Video Driver。



?Symbol Loader 符号加载器
在你调试程序前必须要运行符号加载器。它的功能是通知SoftICE加载将要调试的程序,转换程序的调试符号表,使SoftICE能够在源码级上进行调试(这当然要求你编译的程序是调试编译即Debug Build的)。

它主要有以下的操作命令:

Open: 打开需要调试的程序,一般说有以下几种:用户级程序有*.exe , *.dll, *.ocx, *.vbx; 内核级程序有*.sys, *.vxd, *.386, *.drv。
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 --- 清除命令窗口


Symbol Loader的设置也挺重要:
1. 启动Symbol Loader
2. Module->Setting:
1) Translation:
选中 Symbols and source code (加载symbol和源代码)
并选中 Package source with symbol table (将源码打包进NMS符号文件)



调试Boot Mode驱动:
1. 启动Symbol Loader

2. EDIT -> SoftICE Initialization Settings

3. 在 Symbols 中添加你的驱动的符号文件

4. 在 General 中的Initialization文本框中输入:
BPX DriverEntry;
即可拦截你的驱动的DriverEntry例程。

5. 在Startup中设置Boot Mode (SoftICE启动模式设置,选择在什么时候启动SoftICE)为boot:
Boot: 在Windows启动之前加载SoftICE,主要是用于跟踪调试在Windows启动过程中加载的驱动程序,当然也可以调试所有的应用级程序。

6. Reboot
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-02-20 15:34
能得到黄金圣斗士中近似于神的顶级会员的帮助,真是幸运:)
*学*
Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-02-20 16:05
请问高手,可不可以在源代码( *.c )上单步调试,就像在VC6.0上一样,我调试好像又回到汇编级代码?
*学*
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-02-23 10:15
我反正是从来没有出来过c语言级别的调试,都是汇编的,更多的是通过自己打印的信息来调试的
游客

返回顶部