常用的IDA的快捷键如下表所示。
按 键 |
作 用 |
---|---|
空格 |
切换显示方式 |
C |
转换为代码 |
D |
转换为数据 |
A |
转换为字符 |
* |
转换为数组 |
U |
未定义 |
O |
提取操作数的偏移量 |
H |
把立即数转换为10进制数 |
R |
把立即数转换为字符 |
B |
把立即数转换为2进制数 |
Q |
把立即数转换为16进制数 |
N |
为标签重命名 |
? |
计算器 |
G |
跳转到地址 |
: |
添加注释 |
Ctrl-X |
查看当前函数、标签、变量的参考(显示栈) |
X |
查看当前函数、标签、变量的参考 |
Alt-I |
搜索常量constant |
Ctrl-I |
再次搜索常量 |
Alt-B |
搜索byte序列 |
Ctrl-B |
再次搜索byte序列 |
Alt-T |
搜索文本(包括指令中的文本) |
Ctrl-T |
再次搜索该文本 |
Alt-P |
编辑当前函数 |
Enter |
跳转到函数、变量等对象 |
Esc |
返回 |
Num − |
收缩(函数代码或区域代码) |
Num + |
展开 |
如果您明白函数的具体作用,就可以使用IDA的“收缩”功能把函数的代码隐藏起来。笔者编写的IDA脚本程序(https://github.com/yurichev/IDA_scripts
)可自动隐藏经常使用的内联代码。
OllyDbg常用的快捷键如下表所示。
快 捷 键 |
作 用 |
---|---|
F7 |
单步步入/单步调试 |
F8 |
单步步过 |
F9 |
执行至断点处 |
Ctrl-F2 |
重新启动程序 |
本书常用的MSVC选项如下表所示。
选 项 |
作 用 |
---|---|
/O1 |
创建尺寸最小的文件 |
/Ob0 |
禁止內联展开 |
/Ox |
启用最大优化 |
/GS- |
禁用安全检查(缓冲区溢出) |
/Fa(file) |
创建汇编文件(设置文件名) |
/Zi |
生成完整的调试信息 |
/Zp(n) |
使封装结构体向n字节边界对齐 |
/MD |
令可执行程序使用MSVCR*.DLL |
有关MSVC的详细介绍,请参见本书的55.1节。
本书用到的GCC选项如下表所示。
选 项 |
作 用 |
---|---|
-Os |
优化目标文件大小 |
-O3 |
打开所有-O2的优化选项 |
-regparm= |
设定传递参数的寄存器的数量 |
-o file |
指定输出的文件名 |
-g |
产生带有调试信息的目标代码 |
-S |
仅编译到汇编指令,不进行汇编和链接 |
-masm=intel |
汇编指令采用intel语体 |
-fno-inline |
禁止內联函数 |
本书用到的GDB指令如下表所示。
选 项 |
作 用 |
---|---|
break filename.c:number |
在源程序第n行处设置断点 |
break function |
在函数入口处设置断点 |
break *address |
在某地址设置断点 |
b |
同break |
p variable |
显示变量的值 |
run |
运行 |
r |
同run |
cont |
继续运行 |
c |
(同上) |
bt |
打印当前栈的所有信息 |
set disassembly-flavor intel |
设置为intel语体 |
disas |
查看当前函数程序的汇编指令 |
disas function |
查看函数的汇编指令 |
disas function,+50 |
查看函数的部分汇编指令 |
disas/r |
查看接下来的几条指令 |
info registers |
查看opcode |
info float |
显示CPU各寄存器的值 |
info locals |
显示FPU各寄存器的值 |
x/w ... |
列出全部的局部变量(如果能识别出来) |
x/w $rdi |
读取内存,并显示为word型数据 |
x/10w ... |
从RDI指定的地址读取数据,显示为word |
x/s ... |
读取并显示10个word型数据 |
x/i ... |
读取内存并显示为字符串 |
x/10c ... |
读取内存并显示为汇编代码 |
x/b ... |
读取内存,并显示10个字符 |
x/h ... |
读取内存,并显示为byte |
x/g ... |
读取并显示16位halfword型数据 |
finish |
读取并显示giant words(64位) |
next |
执行到函数退出位置 |
step |
单条语句执行指令,(不步入函数) |
set step-mode on |
单步步入的跟踪调试指令 |
frame n |
打开step-mode模式 |
info break |
切换栈帧 |
del n |
查看断点 |
set args ... |
删除断点 |