|
命令: |
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可能是按得最多的键了,好好保护你的键盘吧! |
查看所有0条评论>>