欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

SoftICE for WIN95中文命令解说(九)

程序员文章站 2022-10-02 15:04:20
SoftICE for WIN95中文命令解说(九) Copyright (c) 1999 http://coobe.cs.hn.cninfo.net/~tianwei 命令: M 作用: 传送数据 语法: M source-address l length dest-address 用法... 08-10-08...
softice for win95中文命令解说(九) copyright (c) 1999 http://coobe.cs.hn.cninfo.net/~tianwei 命令: m 作用: 传送数据 语法: m source-address l length dest-address 用法: source-address: 源数据的起址;length : 要传送的字节长度;dest-address : 目的数据块的起址.用 m 命令将数据块从源地址传送到目的地址.如m ds:1000 l 2000 es:5000 将2000h个字节从ds:1000h传到es:5000h处. 点评: 无 命令: macro 作用: 定义一个宏命令,使之执行一系列softice指令. 语法: macro [ macro-name] | [*] | [= "macro body"] 用法: macro-name: 3-8个字符的宏名,(不区分大小写);macro-body: 用分号隔开的一系列softice指令, 首末 加冒号;* : 删除一个或所有的已定义的宏命令;= : 定义(或重定义)一个宏命令.macro 命令用于定义softice指令的超集.macro-body可以包含softice的指令,也可包含宏定义,甚至是当前的宏定义本身.(这当然会产生递归调用,如果编得不好的话会产生错误,也没有什么大意思).在这一系列命令之间用分号(;)隔开,最后一个命令后不用加分号.macro-body中还可以带入命令行参数,和dos命令的%1,%2...一样,合法值在1-8之间.注意一点,macro-body首尾是用冒号的.所以在宏定义体中如果要用到 \, ", %时要在前加一 \,这跟c语言的写法是一致的.macro_name参数用来代表宏名,可以是字母或数字或下划线组成.可以是现有的宏名, 那样的话就会重定义这个宏.宏名不可以和现有的softice内部指令相同.会发生错误.macro * 表示删除当前定义的所有(有名字的)宏.(因为断点的do 子句实际上也是宏, 不过是无名字的,它们不能就这样被删除了!)macro mnames * 删除当前名为 mnames 的宏.macro mnames 将编辑名为 mnames 的宏, 在编辑过程中可以用esc键取消改动.一个很有用的例子::macro 1shot = "bpx %1 do \"bc bpindex\""用这个宏可以设一个一次性断点,非常方便! 点评: 宏病毒! 命令: map32 作用: 显示当前所有32位模块的内存映象(图). 语法: map32 [module-name | module-handle |address] 用法: module name : windows模块名;module handle: 模块的基址;address : 落在可执行模块中的地址.map32 不带参数将显示所有的32位模块的信息.加参数将只显示指定模块的信息.输出如下:owner : 模块名.obj name: 可执行文件的区段名.obj# : 可执行文件中的区段号.address : 选择符:偏移量 格式的区段地址.size : 区段的大小(字节)type : 区段类型: -------------------- code 代码 idata 初始化的数据 udata 未初始化的数据 ro 只读 rw 读/写 shared 对象是共享的. -------------------- 点评: 无. 命令: mapv86 作用: 显示当前虚拟机的dos内存映象 语法: mapv86 [address] 用法: address : 段:偏移量格式的地址mapv86 不带参数将显示当前整个虚拟机的内存映象.加参数将显示指定包含所指定地址的内存区域的信息.有时侯dos vm的页没有切进来,所以会有 "page not present"的出错信息,所以可以再弹出一次.mapv86 在配合symloc命令时很有用,因为在windows 启动前装载的程序,windows不会自动将它们的符号信息映射到v86内存,用mapv86命令就可以取得它们的代码段,将符号表与之对齐,就可以跟踪调试了.输出如下:vm id : 虚拟机的id.vm handle : 32位虚拟机的句柄.crs pointer: 虚拟机的32位客户登记表的指针.(?)vm address : 32位线性地址.另外,如果softice弹出时cs:ip指向一个mapv86的入口,那一行的内容将高亮显示. 点评: 无. 命令: mod 作用: 显示windows模块列表. 语法: mod [partial-name] 用法: partial-name: windows模块名,(可以是开头的若干个 字母).mod 不带参数将显示所有的模块.若加 partial-name,则符合要求的模块将被列出.输出如下:module handle: 16位的句柄.base : 线性基址.pe-header : 选择符:偏移量格式的pe文件头.module name : 模块名.(编程序时在.def中用name或 library命名的.)file name : 文件的路径(全名). 点评: 无. 命令: o 作用: 向i/o端口输出数据. 语法: o[size] port value 用法: size : b 字节(缺省值);w 字;d 双字port : 端口地址.value: 要输出字节,字,或双字.o 命令将立即输出到硬件端口(当然那两个21h和a1h要等退出softice窗口时才执行)(?) 点评: 关于21h和a1端口,二者是关系到中断的, pdf文档在这写得不是很详细.实际操作情况是多种多样的. 命令: p 作用: 单步执行程序. 语法: p [ret] 用法: p 命令将单步执行程序.在汇编模式中,当遇到 call,int,loop,rep指令时,p将不跟踪进去,直到这些指令执行完毕,控制才返回softice,换句话说,p命令是"跨"过这些指令的.p 后加ret 参数,softice将一直单步执行直到它找到一条返回语句(ret,retf).在源程序模式中,p 命令将执行一个源程序表达式. 但也不跟踪到子例程中去.p 命令实际上是利用了单步标志, 大多数情况下是如此.但碰到call,int,loop,rep指令时,就用int 3(一次性) 在这些指令的后面设一下.p 命令有快捷键 f10; p ret 命令有快捷键 f12. 点评: f10可能是按得最多的键了,好好保护你的键盘吧!