必备工具

一 OllyDbg

基本功能快捷键:

F8         单步执行          遇见 call 语句时不进入 call

F7         单步执行          遇见 call 语句时进入 call

F2         设置断点          在一条指令上按下 F2 将设置为断点 , 再次按下将取消断点

F4         执行到当前光标选中的指令

F9        运行程序,直到遇到断点

Ctrl + G 查看任意位置的数据

 

二 SoftICE

初始化命令的含义:

Faults off        关闭错误提示。SoftICE 在加载进程时总是会发出一些错误警告

set font 2        设置 2 号字体。SoftICE 有 3 种字体, 默认情况为小号字 , 2 号字体为 中号

Lines 44         Lines 命令用于设置界面显示的行数 , 显示范围是 25 ~ 128 , 这里总共显示 44 行

data 3            打开 3 号窗口

Dd                 按照 DWORD 显示数据

dex 3 ss:esp 在 3 号窗口中显示栈信息

data 0           设置 0 号窗口(命令输入窗口) 为当前窗口

wc 20            代码窗口占 20 行

Code on        显示机器代码

X                   显示调用界面

基础调试命令:

[单步执行]  

t 或 F8         step into , 单步执行 , 遇到 call 函数进入执行

p 或 F10        step over , 单步执行 , 遇到函数不跟入

p ret 或 F12   step out , 执行到当前函数结束

[执行到指定位置 go]

g [内存虚拟地址]       如不跟地址 , 将把控制权交还进程持续执行 ; 如跟地址 , 则执行到指定地址所在的指令后停下

[断点命令]

bl                   列出当前所有断点(breakpoint list)

be [断点 ID | * ]         激活断点,其中, 断点 ID 可以是多个, 用空格或逗号隔开 , 如果用 * , 则激活所有断点(breakpoint enable)

bd [断点 ID | * ]          禁用断点 , 参数同上 (breakpoint disable)

bc [断点 ID | * ]           清除断点 , 参数同上 (breakpoint clear)

bpx [地址 | 函数名]     为指定的地址 或 API 函数下断点

bpm [数据类型][地址][访问类型]       内存断点 。 数据类型可以是 b 字节 , w 字(双字节) , d 双字(四字节) ; 访问类型可以是 r(只读) , w(写) , rw(读写)

信息查看与编辑命令:

[数据显示(Display)]

db [地址]             按照字节模式显示内存数据(display byte)

dw [地址]             按照字(双字节) 模式显示内存数据(display byte)

dd                       按照双字(四字节) 模式显示内存数据(display byte)

ds                       按短整型模式显示内存数据(display byte)

dl                        按照长整型模式显示内存数据(display byte)

[数据编辑(Edit)]

eb [地址][数据]    按字节模式将数据写入内存任意地址 (edit byte)

ew [地址][数据] 按字模式将数据写入内存任意地址 (edit word)

ed [地址][数据]   按双字模式将数据写入内存任意地址 (edit dword)

es [地址][数据] 按照短整型模式将数据写入内存任意地址 (edit short)

el [地址][数据]    按照整型模式将数据写入内存任意地址 (edit long)

[栈侦显示]

stack                显示当前栈侦信息

[编辑寄存]

r [寄存器名][值] 修改或查看寄存器的值 , 如 r eax 0

[反汇编]

u [地址]              对指定地址的二进制进行反汇编并显示

三 WinDbg

调试功能的命令:

[单步调试]

t 或 F11            单步 , 遇到函数(call) 跟进(step into)

p 或 F10           单步 , 遇到函数(CALL) 跳过 (step over)

Shift + F11         跳出当前函数(step out)

[执行到指定位置(Go)]

g [地址 | 函数名]    持续执行到指定位置的指令

gh [地址 | 函数名] 持续执行时 , 如果遇到异常则中断

gn [地址 | 函数名] 持续执行时 , 即使遇到异常也忽略

[断点功能(Break Point)]

bl                           列出已设置的断点 , 显示结果中 , 第一列为断点的 ID , 第二列为断点当前状态 , e 表   示断点处活动状态(enable) , d 表示断点暂时被禁用 , 第三列为断点的位置(breakpoint list)

be [断点ID]            激活断点 (breakpoint enable)

bd [断点ID]            禁用断点 (breakpoint disable)

bc [断点ID]            清除断点 (break point clear)

bp [地址|函数名]    设置断点 . 如不指定地址, 则在当前指令上下断点 . 注意这里介绍的是最基础的断点方式, WinDbg 中可以结合地址 , 函数名 , 消息等各种条件设置很复杂的断点 . 此外 bu , bm 等命令也可以设置断点

[反汇编功能]

u                            反汇编当前指令后的几条指令

u [起始地址]            从指定的地址开始反汇编

u [始址] [终止]         反汇编指定地址区间的机器代码

信息显示与编辑功能:

[数据显示(Display)]

d [地址]                   显示内存数据. 默认情况下按照字节和ASCII显示, 即等同于 DB 命令. 如果修改了显示模式,再次使用时则与最后一次数据显示命令所使用的显示模式相同

db [地址]                 按照字节模式显示内存数据 (display byte)

dd [地址]                 按照双字节模式显示内存数据 (display dword)

dD                          按双精度浮点数的模式显示内存数据. 注意这条命令和前面一条命令是区别大小写的

da                          按 ASCII 模式显示

du                          按 Unicode 模式显示

ds                           按字符串模式显示. 注意在没有 "\0" 作为字符串结束时 , 不要轻易用这条命令打印内存,否则 WinDbg 会将遇到的第一个 NULL 前的东西都打印出来

dt                           套用已知的数据结构模板显示内存,这个命令很有用,列如,在调试堆时可以直接用这个命令把内存按照堆表的格式显示出来

[数据编辑(Edit)]

e [地址] [数据]         修改任意内存地址的值

Eb                           以字节形式写入

ed [地址][数据]         以双字节的形式写入

ea [地址][数据]        以 ASCII 字符形式写入,注意 ASCII 字符串需要加双引号

eu [地址][数据]         以 Unicode 字符形式写入, 注意 Unicode 字符串需要加引号

[栈侦的显示]

k [x]                         由栈顶开始列出当前线程中的栈侦 , x 为需要回朔的栈侦数

kb [x]                       栈侦回朔命令带上 'b' 后 , 可以额外显示 3 个传递给函数的参数

[寄存器的显示]

r [寄存器名]             r 命令显示当前所有寄存器值 , 也可以用来显示指定寄存器的值

[模块显示]         

lm                           列出当前已经读入的所有模块

[反汇编功能]

u                           反汇编当前指令后的几条指令并显示

u [起始地址]          从指定的地址开始反汇编

u [始址][终址]        反汇编指定的地址范围区间的机器代码

四 IDA Pro

常用的快捷命令:

;                             为当前指令添加全文交叉引用的注释

n                            定义或修改名称 , 通常用来标注函数名

g                            跳转到任意地方观察代码

Esc                        返回到跳转的位置

D                           分别按字节 , 字(双字节) , 双字(四字节) 的形式显示数据

A                           按照 ASCII 形式显示数据

你可能感兴趣的:(工具)