OllyDb g的hel p-怎样开始调试(翻译)
最简单的方法是启动Ol lyDbg,点击Fi le|Op en,然后选择你想调试的程序。程序需要命令行参数输入对话框下方的文本栏。 重新开始调试最后一个程序的快捷键是C trl+F2,并且O llyDb g使用相同的参数。你也可以点选历史记录。把程序拖入Olly Dbg也可以开始调试。
当然,当启动Ol lyDbg时,你在命令行中也能指定被调试的程序名和参数。比如:你可以创建桌面快捷方式指向OllyD bg,选择属性,到快捷方式,把程序名加入目标栏。每次你双击这个快捷图标,Oll yDbg自动装载被调试程序。
你可以at tachOllyD bg到某个正在运行的进程。点击File|Attac h,从列表中选择
该进程。注意:当你关闭OllyD bg,这个进程也会终止。不要试图atta ch系统进程,这很可能使系统完全SI机。(事实上,大多数情况下,OS不允许at tach敏感进程)
Olly Dbg能作为just-in-t ime d ebugg er。这需要在注册表中登记。点击
Opt ions|Just-in-ti me de buggi ng,在对话框中按“MakeOllyD bg ju st-in-time
deb ugger”。现在,当一些程序崩溃,你会被询问是否调试它。这样,操作系统
可以启动Olly Dbg并直接停在异常发生处。如果你选择a ttach ing w ithou t
co nfirm ation,Olly Dbg不会询问直接启动。要恢复原来的ju st-in-time
deb ugger,在出现的对话框中按相应的按纽就行了。
其它方法还有,把Ol lyDbg加入可执行文件的弹出式菜单。点击Opti ons|A dd to
Exp lorer,按“Ad d Oll yDbgto me nu in Wind ows E xplor er”。以后你可以右击
可执行文件点选O llyDb g。这个选项创建注册表键
HK EY_CL ASSES_ROOT/exef ile/s hell/OpenwithOllyD bg an d
HKE Y_CLA SSES_ROOT/exefi le/sh ell/O pen w ith O llyDb g/com mand
OllyD bg可以调试控制台(基于文本)程序。
注意:Win dowsN T或Win dows2000下,你必须有管理员权限
OllyD bg的he lp-通用快捷键(翻译)
Go lbalshort cuts(通用快捷键)
这些快捷键在Ol lyDbg中通用,不依赖于当前活动窗口。
Ctrl+F2---Olly Dbg重置,重新开始调试。如果没有活动程序,Oll yDbg装入历史列表中的第一个程序。Ol lyDbg重置会释放内存移除硬断点。
A lt+F2--关闭被调试的程序。如果程序还在活动状态,你会被询问是否执行该操作。
F3--显示“Op en 32-bit.exefile”对话框,这里可以选择可执行文件和指定参数
Alt+F5--使OllyD bg显示在屏幕最前方。如果被调试程序中断时显示窗口遮住Oll yDbg的一些区域,不继续运行又不能移动或最小化它。激活Ol lyDbg按Alt+F5可以解决。如果你再次按Al t+F5,OllyD bg会恢复为普通窗口。Olly Dbg的当前状态显示在状态栏。
F7--stepinto,执行下一条简单命令。如果该命令是一个函数调用,进入调用函数内部。如果命令有REP前缀,执行该命令的一步操作。
Shift+F7--与F7相同,除了当被调试程序遇到某些异常时,首先尝试调用程序自己的异常处理过程。 Ctrl+F7--anima te in to,一步一步执行程序,也进入函数调用(就象你一直按着F7,不过更快)。当你执行一些单步或继续命令,程序到达有效断点,一些异常发生时,Ani matio n终止。每步执行,O llyDb g重画所有窗口。要加速anim ation,关闭所有窗口而不要只改变现有窗口的大小。终止an imati on,也可按Esc。
F8-s tep o ver,执行下一条简单命令。如果该命令是一个函数调用,立刻执行完该函数(除非函数内部有断点或产生异常)如果命令有REP前缀,执行所有重复操作,并停于下一条命令。
Shif t+F8--与F8相同,除了当被调试程序遇到某些异常时,首先尝试调用程序自己的异常处理过程。
Ctr l+F8--anim ate o ver,一步一步执行程序,但不进入函数调用(就象你一直按着F8,不过更快)。当你执行一些单步或继续命令,程序A nimat ion到达有效断点或异常发生时,Anim ation终止。每步执行,Ol lyDbg重画所有窗口。要加速anima tion,关闭所有窗口而不要只改变现有窗口的大小。终止ani matio n也可
按E sc。
F9--继续执行程序。
Shif t+F9--与F9相同。除了当被调试程序遇到某些异常时,首先尝试调用程序自己的异常处理过程。
Ctr l+F11--run trac e int o,一步一步执行程序,要进入函数调用,记录寄存器内容。Run trac e 不重绘CPU窗口.
F12-悬挂所有线程以停止程序执行。最好用继续键和菜单命令(像F9)恢复执行线程,而不要用其它手动方法恢复。
Ctr l+F12--run trac e ove r,一步一步执行程序,不进入函数调用,记录寄存器内容。Run trac e不重绘C PU窗口。
ESC--如果an imati on或跟踪正在进行,将被终止。如果CPU窗口显示跟踪时的数据,此时转为显示实际数据。
Al t+B--打开或恢复Break point窗口。这里可以编辑,删除和观察断点。
A lt+C--打开或恢复CPU窗口。
Al t+E--打开或恢复模块列表
Alt+E--打开或恢复Cal l sta ck窗口。
Alt+L--打开或恢复Lo g窗口。
Alt+M--打开或恢复Mem ory窗口。
Alt+O--打开Opti on对话框
Ctrl+P--打开Patc h窗口。
Ctrl+T--打开Pause runtrace对话框
A lt+X-中断Oll yDbg。
多数窗口可以使用下列快捷键:
Alt+F3--关闭活动窗口。
Ctr l+F4--关闭活动窗口。
F5--最大化或恢复活动窗口。
F6--激活下一个窗口。
Sh ift+F6--激活前一个窗口。
F10--打开激活窗口或面板的右键菜单。
Le ftArr ow--左移一个字符。
Ctr l+Lef tArro w--左移一行。
R ightA rrow--右移一个字符。
C trl+R ightA rrow--右移一行。
Ol lyDbg的help-分析模块介绍(翻译) 分析
OllyD bg集成了快速超强的代码分析器。装载它,可以用弹出式菜单或者CPU窗口 的反汇编栏按Ctr l+A或者在执行模块选“Ana lyzeall m odule s”。
分析器非常有用。它在数据中分辨代码,标记入口点和ju mp的目标,辨认sw itchtabl es,AS CII和U NICOD E字符串,定位过程、循环、高级switc h语句和解码标准A PI函数参数(看范例)。Oll yDbg的其它部分也广泛用于数据分析。
这怎么可能呢?我稍微介绍一下原理。首先,OllyD bg反汇编代码区所有可能的地址,记下所有发现的调用及指向的目标。当然,许多这样的调用不正确,但是未必会有两个错误的调用指向同一条命令,并且三个或三个以上更不可能。这样,三个或更多调用指向同一地址,我就确信该地址是经常使用的子过程入口。从这个入口开始,我跟踪所有的跳转和调用,反复操作。这种方法使我99.9%确定所有命令。然而,某些字节不在这条链中,我采用大约20个更高效的方法(最简单的如:“MOV [RA],Ra"是无效命令).
过程检测也简单。过程,从分析器的角度看,就是从入口开始的代码的连续区域,(理论上)可以到达其它命令(除N OP或对齐填充外)。你可以指定三种识别级
。Str ict级严格确认一个入口和至少一个出口。heuri stica l级,分析器尝试确认
入口。如果你选择f uzzy级,或多或少相容的代码区被分离为过程。现代编译器把过程分成几个部分作公用代码优化。这种情况下,fuz zy级特别有用!然而,误解的概率也相当高。
类似的,loo p是一个封闭的连续命令序列,这里最后的命令跳到开头、一个入口几个出口。Loop相当于高级操作语言中的do,w hile和for。O llyDb g能认识任何复杂的嵌套循环。在反汇编区,他们用长长的大括号标记。如果入口不是循环的第一条命令,O llyDb g用个小三角形作标记。
实现s witch语句,多数编译器把s witch变量装入寄存器,然后减去一部分,像下
面代码序列一样:
MO V EDX,<swi tch v ariab le>
S UB ED X,100
JB D EFAUL TCASE
JE C ASE100 ; C ase 100
DE C EDX
JNEDEFAU LTCAS E
... ; Ca se 101
这些序列也可能包含一级或两级swit ch表,直接比较,优化,填充等等。如果你
深入研究比较和跳转树,很难说哪一条命令是某个ca se语句。OllyD bg为你代劳。它标记所有的c ase语句,包括de fault,甚至尝试猜测cas e的意思,如'A',
WM_PAINT或者E XCEPT ION_A CCESS_VIOL ATION。如果命令序列不修改寄存器(只
由比较命令构成),那么不大可能是swi tch语句,但可能是if嵌套:
if (i==0) {...}
els e if(i==5) {...}
el se if (i==10) {...}
让Olly Dbg解码if嵌套为switc h,选择A nalys is1中相应的选项。
Olly Dbg预置超过1900个常用A PI函数的描述。包括KERNE L32,GDI32, USE R32,ADVA PI32, COMD LG32, SHEL L32,VERSI ON, S HLWAP I, CO MCTL32, WI NSOCK, WS2_32和 MSV CRT。你也可以加入自己的描述。如果分析器遇到已知函数名的
调
用(或跳转到该函数),它尝试解码调用跟前的PUS H命令。因此,你可以粗略
翻
译该调用的功能。Oll yDbg也内置大约400个标准C函数的描述。如果你利用新
库,
我建议你分析前先扫描对象文件。这种情况下,Oll yDbg也会解码已知的C函数参数。
如果选项“G uessnumbe r ofargum entsof un known func tions”被设置,分析
器尝试确认调用过程进栈的双字数目,并标记他们为参数Ar g1,Ar g2等等。注意:如果有寄存器参数,Ol lyDbg还是不认识也不包括在上面的统计中。分析器采用了一个安全的方法。例如,它不分辨无参数过程和返回前用P OP恢复寄存器代替舍
弃
参数的case语句。然而,能分辨出的函数数目相当多,并非常有助于提高代码的
可读性。
分析器能跟踪寄存器的值。现代优化编译器,特别是面向Penti um的,经常把常量和地址装入寄存器便于重复使用或减小内存占用空间。如果一些常量装入寄存器
,分析器会注意它,并用于解码函数及其参数。还能执行简单的算术计算跟踪
push和pop命令。
分析器不能区别不同类型的名字。如果你用已有的名字命名一些函数,O llyDb g会解码所有该地址的调用为原过程。Wi nMain,DllE ntryP oint和WinPr oc是特殊的预
定义名。你可以使用这些标号标记主程序入口,D LL入口指针和win dow过程(注意
:OllyD bg不会检查用户定义标号的唯一性)。当然,最好的方法是显示已定义的参数。
非常不幸,没有一般的规则用于100%的准确分析。有些情况下,例如当模块包含p-代码或者代码区嵌入大量数据,分析器可能认为部分数据是代码。如果统计分
析显示代码可能被打包或加密,分析器会警告你。如果你想用hit跟踪方式,我建
议你不要用fuzz y分析方式,否则断点被设置在被误认为代码的数据上的几率很
高。
自解压文件通常在主体代码外有解压代码。如果你选择SFX选项“Exte nd co de
s ectio n toinclu de se lf-ex tract or”,O llyDb g会扩大代码区,形式上允许分
析它并跟踪。
Ol lDbg的一般原理(翻译)部分
我希望你熟悉80x86兼容C PU的内部结构,并且有汇编写程序的经历。我也希望你
熟悉Mi croso ft Wi ndows.
Oll yDbg是一个单进程多线程的“机器代码级”debu gger,用于Win dows环境下的32位程序。它允许你de bug和p atchPE格式的可执行程序。OllD bg仅仅使用列入文档的Win32 API调用,所以可用于下一代32位W indow s系统。O llDbg看来也可工作于Win dowsXP,但是我没有详尽的测试,因此不能保证功能完整。
Olly Dbg不是面向编译器。它不含特别的规则显示某些情况下特定的编译程序生成哪些代码序列。因此,你可以一样对待任何编译器编译的,或者汇编书写的任何代码。
O llyDb g与被调试的程序同时工作。你可以浏览代码和数据、设置断点、停止或继续线程,甚至运行期修改内存(有时这叫作软调试方式)。当然,如果被请求的操作不是最基本的,Oll yDbg就会短时暂停程序,但这对用户透明。有时不在调试状态运行的程序会意外崩溃。OllyD bg,这个“及时”d ebugg er,会指出异常发生的位置。
OllyD bg强烈面向模块。模块这里指启动时加载的或动态加载的主执行文件或动态连接库。在调试区,你可以设置断点,定义新标号和注释汇编语句。当一些模块从内存卸载后,Olly Dbg保存这些信息到扩展名为.UDD名字同被调试模块的文件中。下次当装载这些模块时,Oll yDbg自动复原所有调试信息,不论程序是否使用这些模块。比如:你调试使用Mydl l的程序M yprog1,并且在Mydll中设置一些断点。那么当你调试M yprog2时,也使用Mydl l,你会发现所有在M ydll中的断点还在那里,不管Mydll是否装载在不同的位置。
一些调试器把被调试进程的内存视为单个2**32字节区域。OllyD bg做了别的处理方法。内存由几个独立的块组成。任何内存操作都限制于块内。在大多数案例中,这工作优良并且容易调试。但是模块包含几个执行部分等等,你将不能立刻看到整个代码。然而这些例外不常见。
OllyD bg是内存消耗大户。启动时就要分配3MB内存,甚至更多。每次分析,备份,跟踪或文件转储另外再分配。所以当你调试大工程时消耗40或60M内存很正常。
要有效的调试一些无源代码的程序,你首先必须理解它是如何工作的。OllyD bg提供了大量的手段使理解更容易
[本帖最后由渔歌子于 2005-12-22 23:16 编辑 ]
转Drar en总结的ollyd bg v1.09d中文版使用说明
一点一滴的积累,也就会了.