OD 快捷键与命令:

n. M# y6 Q4 e2 U# r

无论当前的OllyDbg窗口是什么,这些快捷键均有效:
$ S( k* A# d  l* g# l; A6 N0 f8 R, r

Ctrl+F2 - 重启程序,即重新启动被调试程序。如果当前没有调试的程序,OllyDbg会运行历史列表[history list]中的第一个程序。程序重启后,将会删除所有内存断点和硬件断点。
译者注:从实际使用效果看,硬件断点在程序重启后并没有移除。

Alt+F2 - 关闭,即关闭被调试程序。如果程序仍在运行,会弹出一个提示信息,询问您是否要关闭程序。

F3 - 弹出“打开32位.EXE文件”对话框[Open 32-bit .EXE file],您可以选择可执行文件,并可以输入运行参数。

Alt+F5 - 让OllyDbg总在最前面。如果被调试程序在某个断点处发生中断,而这时调试程序弹出一个总在最前面的窗口(一般为模式消息或模式对话框[modal message or dialog]),它可能会遮住OllyDbg的一部分,但是我们又不能移动最小化这个窗口。激活OllyDbg(比如按任务栏上的标签)并按 Alt+F5,OllyDbg将设置成总在最前面,会反过来遮住刚才那个窗口。如果您再按一下Alt+F5,OllyDbg会恢复到正常状态。 OllyDbg是否处于总在最前面状态,将会保存,在下一次调试时依然有效。当前是否处于总在最前面状态,会显示在状态栏中。
& a: B6 |  X7 j2 i- G
F7 - 单步步入到下一条命令,如果当前命令是一个函数[Call],则会停在这个函数体的第一条命令上。如果当前命令是是含有REP前缀,则只执行一次重复操作。

Shift+F7 - 与F7相同,但是如果被调试程序发生异常而中止,调试器会首先尝试步入被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。/ P* w& _( N( T. S, j5 ?

Ctrl+F7 - 自动步入,在所有的函数调用中一条一条地执行命令(就像您按住F7键不放一样,只是更快一些)。当您执行其他一些单步命令,或者程序到达断点,或者发生异常时,自动步入过程都会停止。每次单步步入,OllyDbg都会更新所有的窗口。所以为了提高自动步入的速度,请您关闭不必要成窗口,对于保留的窗口最好尽量的小。按Esc键,可以停止自动步入。
. h% J' p/ p2 i% n
F8 - 单步步过到下一条命令。如果当前命令是一个函数,则一次执行完这个函数(除非这个函数内部包含断点,或发生了异常)。如果当前命令是含有REP前缀,则会执行完重复操作,并停在下一条命令上。

Shift+F8 - 与F8相同,但是如果被调试程序发生异常而中止,调试器会首先尝试步过被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。4 S9 _+ J6 c! N

Ctrl+F8 - 自动步过,一条一条的执行命令,但并不进入函数调用内部(就像您按住F8键不放一样,只是更快一些)。当您执行其他一些单步命令,或者程序到达断点,或者发生异常时,自动步过过程都会停止。每次单步步过,OllyDbg都会更新所有的窗口。所以为了提高自动步过的速度,请您关闭不必要成窗口,对于保留的窗口最好尽量的小。按Esc键,可以停止自动步过。

F9 - 让程序继续执行。
1 n, W) B/ d7 B5 P0 H% a
Shift+F9 - 与F9相同,但是如果被调试程序发生异常而中止,调试器会首先尝试执行被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。

Ctrl+F9 - 执行直到返回,跟踪程序直到遇到返回,在此期间不进入子函数也不更新CPU数据。因为程序是一条一条命令执行的,所以速度可能会慢一些。按Esc键,可以停止跟踪。
& q8 q3 _0 P1 A- m# m6 {
Alt+F9 - 执行直到返回到用户代码段,跟踪程序直到指令所属于的模块不在系统目录中,在此期间不进入子函数也不更新CPU数据。因为程序是一条一条执行的,所以速度可能会慢一些。按Esc键,可以停止跟踪。
6 w, W) R7 ?; e
Ctrl+F11 -Run跟踪步入,一条一条执行命令,进入每个子函数调用,并把寄存器的信息加入到Run跟踪的存储数据中。Run跟踪不会同步更新CPU窗口。1 z/ v0 Y4 ^4 m7 {7 Y
4 c2 `# s# `' w5 A
F12 - 停止程序执行,同时暂停被调试程序的所有线程。请不要手动恢复线程运行,最好使用继续执行快捷键或菜单选项(像 F9)。

Ctrl+F12 - Run跟踪 步过,一条一条执行命令,但是不进入子函数调用,,并把寄存器的信息加入到Run跟踪的存储数据中。Run跟踪不会同步更新CPU窗口。: T  a5 w+ V/ \1 z+ @2 S+ S1 N
2 P+ W; C3 V5 m
Esc - 如果当前处于自动运行或跟踪状态,则停止自动运行或跟踪;如果CPU显示的是跟踪数据,则显示真实数据。

Alt+B - 显示断点窗口。在这个窗口中,您可以编辑、删除、或跟进到断点处。/ D2 d( }) a4 j. \# m
& R, o9 V# ^+ n# y- c% a; U
Alt+C - 显示CPU窗口。* ^- x0 R3 t- U+ J
) y. K/ ~: t+ J2 W0 x" i. e9 s
Alt+E - 显示模块列表[list of modules]。. V3 N# C8 D9 v* r2 Y3 B0 Z
# x% _, S2 z" S8 r- N( U! T
Alt+K - 显示调用栈[Call stack]窗口。
) ]  f8 Q* {+ m* K) I, L) K* T* p
Alt+L - 显示日志窗口。% ?( A* W5 Y/ P% I7 m6 A
4 n" I# h& M- D& k5 y4 v3 E
Alt+M - 显示内存窗口。

Alt+O - 显示选项对话框[Options dialog], b5 f; L2 c8 i- a
- d% r: t& [( l! i  c3 x7 l
Ctrl+P - 显示补丁窗口。
; y4 b, {3 \8 v6 B
Ctrl+T - 打开 暂停 Run跟踪 对话框1 c5 I5 y( i: r5 V. p+ A

Alt+X - 关闭 OllyDbg。' g3 u8 g( i6 ]: a! J' [  i; T
) p# E7 e/ w# m. W
大多数窗口都支持以下的键盘命令:
# ]4 [6 Y  e0 N" ?/ U# g5 ]

Alt+F3 - 关闭当前窗口。2 p% E# k1 y7 e2 K# z5 Q6 P
) ^. L7 G$ L% E5 P* W: P3 N
Ctrl+F4 - 关闭当前窗口。' [1 j& ~) W% l$ q
% r# M" W: Y% E/ o. \+ a; b
F5 - 最大化当前窗口或将当前窗口大小改为正常化。- h. b& {3 L$ e/ i, l  Q# ?
) p1 f- i+ s: `
F6 - 切换到下一个窗口。- g5 Z) L2 W0 X/ V- N% M8 {

Shift+F6 - 切换到前一个窗口。6 V7 e8 g( Z- U. u" Z2 U; P

F10 - 打开与当前窗口或面板相关的快捷菜单。
2 t( @5 g# R9 g% J9 ]
左方向键 - 显示窗口左方一个字节宽度的内容。' c4 ~1 K& C$ a3 b
, {# ?" u, u& f7 B7 Y. N
Ctrl+左方向键 - 显示窗口左方一栏的内容。
- f- J1 |; {. r# T2 ]* x. B
右方向键 - 显示窗口右方一个字节宽度的内容

Ctrl+右方向键 - 显示窗口右方一栏的内容- |; d( W0 Y' i0 J8 \! d' I
5 b1 X& J8 A  S* N( x

反汇编窗口中的快捷键[Disassembler shortcuts]6 u1 k4 V6 O2 s, {0 Z

当CPU窗口中的反汇编面板[Disassembler pane]处于激活状态时,您可以使用以下快捷键:  _( l+ q# H1 ^; b9 m
( Q1 N. R" o' {2 N
回车键 - 将选中的命令添加到命令历史[command history]中,如果当前命令是一个跳转、函数或者是转换表的一个部分,则进入到目的地址。

退格键 - 移除选中部分的自动分析信息。如果分析器将代码误识别为数据,这个快捷键就非常有用。请参考解码提示[decoding hints].

Alt+退格键 - 撤消所选部分的修改,以备份数据的相应内容替换所选部分。仅当备份数据存在且与所选部分不同时可用。
0 s6 G$ X$ m4 P& D
Ctrl+F1 -如果API帮助文件已经选择,将打开与首个选择行内的符号名相关联的帮助主题。% Z" _* k2 o. b9 s9 j9 B

F2 -在首个选择的命令上开关INT3 断点[Breakpoint],也可以双击该行第二列。

Shift+F2 -在首个选择命令设置条件断点,参见忽略Kernel32中内存访问异常[Ignore memory access violations in Kernel32]。
1 U& F' J) i* \2 i+ H4 S/ s# K
F4 -执行到所选行,在首个选择的命令上设置一次性断点,然后继续执行调试程序,直到OllyDbg捕获到异常或者停止在该断点上。在程序执行到该命令之前,该一次性断点一直有效。如有必要,可在断点窗口[Breakpoints window]中删除它。

Shift+F4 -设置记录断点(一种条件断点,当条件满足时一些表达式的值会记录下来), 详情参见断点[Breakpoint]。. v: E" j) D$ W) r3 G  T
' A, K- I4 {2 r$ z+ b
Ctrl+F5 -打开与首个选择的命令相对应的源文件。
# [' ?; Z1 G# |
Alt+F7 -转到上一个找到的参考。8 l+ O9 X5 V. x6 \5 ~. J8 z  T, [
  L$ J( W2 R' s! M& t; |
Alt+F8 -转到下一个找到参考。
# p/ ^9 P3 \" S( c: s
Ctrl+A -分析当前模块的代码段。
" |/ m5 \3 c5 }
Ctrl+B - 开始二进制搜索。! \" r9 s4 _% T

Ctrl+C -复制所选内容到剪贴板。复制时会简单地按列宽截断不可见内容,如果希望排除不需要的列,可把这些列的宽度调整到最小。; R' D  F' K" A5 p$ l& f2 t
& D9 X7 u# H6 K. d7 z  m7 L. R* A
Ctrl+E -以二进制(十六进制)格式编辑所选内容。

Ctrl+F -开始命令搜索。6 E: ~, S* Z5 h8 Y3 z" z6 h

Ctrl+G -转到某地址。该命令将弹出输入地址或表达式的窗口。该命令不会修改 EIP。  n2 A( L3 T: }% V
% @, W: }) L. a5 K) ~! ~9 g0 p
Ctrl+J -列出所有的涉及到该位置的调用和跳转,在您用这个功能之前,您必须使用分析代码功能。

Ctrl+K - 查看与当前函数相关的调用树[Call tree]。在您用这个功能之前,您必须使用分析代码功能。* X. q) l6 X- N
2 c# B( q' b9 |# e1 p# Y
Ctrl+L - 搜索下一个,重复上一次的搜索内容。

Ctrl+N - 打开当前模块的名称(标签)列表。% x% @1 A: N) p7 a7 @  ]. ]* d

Ctrl+O - 扫描object文件。扫描Object文件。该命令会显示扫描Object文件对话框,您可以在该对话框中选择Object文件或者lib文件,并扫描这个文件,试图找到在实际代码段中用到的目标模块。
, W7 y" P+ h1 y" j
Ctrl+R -搜索所选命令的参考。该命令扫描激活模块的全部可执行代码,以找到涉及到首个选中的命令的全部相关参考(包括:常量、跳转及调用),您可以在参考中使用快捷键 Alt+F7 和 Alt+F8来浏览这些参考。为便于您使用,被参考的命令也包含在该列表中。5 |" x6 }& X, _& F- b! ?+ n. M

Ctrl+S -命令搜索。该命令显示命令查找[Find command]对话框供您输入汇编命令,并从当前命令开始搜索。9 F' k* w+ E! S& f& y; y$ b# o2 b

星号[Asterisk](*) -转到原始位置(激活线程的EIP处)。2 f: O( H$ a  W
/ _; L0 h9 Z7 }6 l
Ctrl+星号(*) - 指定新的起始位置,设置当前所选线程的EIP为首个选择字节的地址。您可以在选择EIP并撤消该操作。
: I, v  C/ k" ]9 }7 G
加号[Plus](+) -如果run跟踪[run trace] 没有激活,则根据命令历史[command history]跳到下一条运行过命令的地方;否则跳到Run跟踪的下一个记录。' D" q' j* A9 J2 d# x; w) G# J
9 l- e) V# x- \
Ctrl+加号 - 跳到前一个函数开始处。(注意只是跳到,并不执行)" Q5 F: _+ K& b3 a, W
) }: M& e5 G0 ^2 O; ~
减号[Minus](-) - 如果run跟踪[run trace] 没有激活,则根据命令历史[command history]跳到前一条运行过命令的地方;否则跳到Run跟踪的前一个记录。* |7 D8 U- m4 F. ?) u, s" Q
" p* h8 c1 G( e/ Y
Ctrl+减号 - 跳到下一个函数开始处。(注意只是跳到,并不执行)$ f. R  j+ l% e- U
) k4 n2 S4 |/ R+ p
空格[Space] - 修改命令。您可在显示对话框中以汇编语言修改实际指令或输入新指令,这些指令将替换实际代码,您也可以在想要修改的指令处双击鼠标。

冒号[Colon]( - 添加标签。显示添加标签窗口[Add label]或修改标签窗口[Change label],您可在此输入与首个选择的命令中的第一个字节相关联的标签(符号名)。注意,在多种编程语言中,冒号可以是标签的一部分。! ?5 X& f2 T- w9 p! _: N

分号[Semicolon](;) - 添加注释[comment]。显示添加注释窗口[Add label]或修改注释窗口[Change label],您可在此输入与首条所选命令的第一个字节相关联的注释(注释串会显示在最后一列中)。注意,多种汇编语言使用分号作为注释开始。您也可以在注释列双击需要注释的命令行。
+ m% @9 b3 N" N' ?  ^
9 V, c0 a! z8 R2 t1 R% P) d+ u
命令行插件支持的命令* f& t8 X1 v. Z3 K, ~0 m
. M6 O6 [2 a& m- o) v: |
CALC9 W; U; T5 o. j) r" A
判断表达式( u' ^$ C$ c  f- V0 h& Y2 C5 ]

WATCH
添加监视表达式

AT
在指定地址进行反汇编% ^7 l5 y- E. I" q

FOLLOW
跟随命令
; |6 v3 w5 Q  @! {$ N
ORIG8 r. p! B1 j5 E4 R% x3 R' ~+ n& {
反汇编于 EIP
  k' k  y2 z9 X7 h6 y/ i) o* K
DUMP5 `9 l/ i5 A% c2 z' s" }- s5 x
在指定地址进行转存

DA
转存为反汇编代码
, X" q: B7 b% w, A; i" F
DB
使用十六进制字节格式转存

DC' U: S) h4 S9 R+ s; I. D$ {
使用 ASCII 格式转存
/ R& L1 E4 I7 p9 W5 q9 j6 e# v
DD
转存在堆栈格式  {, a8 z5 L7 O2 s) ]: M% A; R3 t
2 `+ M! S7 \5 q, o. Z
DU' l, V/ D( a2 A: Y  `. ^9 k! l) [
转存在 UNICODE 格式' P, @; E9 k, K
( v" U0 l  U: S, j# m
DW9 E3 |. @5 s  T/ \/ q+ X& a, A( B
使用十六进制字词格式转存0 B* B" U5 @- M' ~5 O& @: S6 P
, w9 l7 P+ A- c( q! O1 g+ l+ n+ H- k
STK) O2 Z0 _) w7 u( d; q
前往堆栈中的地址
/ a& @3 ~1 ?, ~- @7 g3 W
AS" ~  m/ h" V: `0 z9 ~- E7 U. g1 S
(AS + 地址 + 字符串)! E1 t( y2 T# m. Y
在指定地址进行汇编' _( U; ]2 M/ _8 R" R" Q( S0 A

BP
进行条件中断(有条件的断点)

BPX5 Y1 F+ ^, M+ [# w3 }, U3 X
中断在全部调用 (Call)
! N" i6 l0 c7 s* e, v" N
BPD) q7 S& H, y2 T+ S" N/ G- w
清除全部调用中的断点
6 E! [7 j4 r& s7 i( y8 o4 t
BC. s3 \* I) c7 C& o5 d( U
清除断点1 C/ L6 X4 H" D2 R

MR6 U- T' ~, o2 n& z* ?: v
内存断点于访问时
; a6 ^$ B4 I+ }9 @9 l7 p: J) _
MW3 j* Q  n* U6 J! i
内存断点于写入时
0 u; J) Q8 w; M/ z( D
MD
清除内存断点, g9 v  E6 L# D! B* b/ w1 F
7 S; y. V+ t, I& s
HR
访问时进行硬件中断

HW
写入时进行硬件中断
. v% R) S( n: j( B7 L
HE
执行时进行硬件中断

HD
清除硬件断点$ X8 Q% A+ C4 S" e
" T: R  `: _1 @, i2 H1 l
STOP% S" E+ |" G  y/ U, v
停止运行程序调试2 g% ?2 W. P+ o, ~% W
7 i4 |9 \6 a7 o1 `0 U4 i
PAUSE; \! c8 J, r- e9 n0 f* T1 I" y
暂停执行程序调试

RUN9 b  d, J( l( R
运行程序进行调试

GE
运行和通过例外- R/ h4 p( w( [; e- s

SI
单步进入 Call 中
& I5 x7 g) R, Z8 W; k/ [. L
SO
步过 Call' m% _3 N" V+ ?3 b6 \* p! u$ ]
- n/ J% J' V& G/ ], Y
TI) x( t/ }. V" k0 C
跟踪进入直到地址, C7 ^, L" f+ P1 j4 \9 q

TO
跟踪步过直到地址

TC( d& W# _  j4 A" W" P/ m; e
跟踪进入直到满足条件1 w% H- G- c; }) M

TOC
跟踪步过直到满足条件

TR0 D- j1 y3 b1 u* E2 f
运行直到返回
8 E' Q5 m/ t/ }, {. ]
TU
运行直到用户代码# I3 {! n8 g: r2 D+ b& F
" N, n2 x' Y3 x- H4 u
LOG
查看记录窗口
5 E, q  z% e2 y1 K/ L2 {
MOD, x( H- g# x- E$ |' m5 Q
查看模块窗口1 \7 F- T& q, u; K% r
/ K7 D' Z* ]: D$ j' A( q! O, y5 X
MEM
查看内存窗口

CPU0 \2 |0 n$ G' g  g: s5 G
查看 CPU 窗口
" A' ?+ y) z5 k( x3 A! {' s
CS
查看 Call 堆栈& s  [& g' [3 f& j
, q8 y5 \8 g# H: D; A# `* e# I
BRK
查看断点窗口" S% w' p$ F+ q9 r3 D, }! Y

OPT
打开选项设置窗口( I9 r" h+ M- n5 P& @, h0 e

EXIT. X2 V/ M2 Y; U  U5 h6 w, O
退出 OllyDbg1 z  E/ J* q; z; @

QUIT- |6 U1 c; J1 |' f. ]# `9 S/ x4 o
退出 OllyDbg! @* b5 m- [$ J- ?3 |4 e

OPEN
打开一个可执行文件. L+ r- e% c$ ?4 w) n" {  {  r' A

CLOSE
关闭可执行文件1 ~% q4 K( }0 N- ]
2 }/ B/ n, a+ a4 [1 u, ^2 ?
RST* F( q, e/ j' l+ l& J+ @! a2 F
重新运行当前程序4 ]: I0 J. W2 J+ l7 M
) }. R3 d5 u- p" X& l0 V, l
HELP  y1 I. b( J  u6 |2 _% W
查看 API 函数的帮助

猜你喜欢

转载自winter8.iteye.com/blog/1423456
今日推荐