首先,OllyDbg包含一个内置的代码分析器。分析器遍历整个代码,分出指令和数据,识别出不同的数据类型和过程,分析出标准API函数(最常用的大约有1900个)的参数并且试着猜出未知函数的参数数目。你也可以加入自己的函数说明[yourown function descriptions]。它标记出程序入口点和跳转目的地,识别出跳转表[table—drivenswitches]和指向字符串的指针,加入一些注释,甚至标示出跳转的方向等等。在分析结果的基础上,调用树[call tree]显示哪些函数被指定过程调用(直接或间接)并且识别出递归调用、系统调用和叶子过程[leaf procedures]。如果需要的话,你可以设置解码提示[decoding hints]来帮助分析器解析那些不明确的代码或数据。
OllyDbg还包含Object扫描器[Object Scanner]。如果你有库文件[libraries]或目标文件[object files],扫描器会在被调试的程序中定位这些库函数。在全部函数调用中,对标准函数的调用占很重要的一部分(据我估计可达70%)。如果你知道正要被调用的函数的功能,你就不必把注意力集中在这个函数上,可以简单地单步步过[step over]这个call。分析器知道400多个标准C函数,比如fopen和memcpy。然而我必须承认当前版本的OllyDbg不能定位很短的函数(比一个return命令多不了多少的)或相的函数(只在重定位上有不同)。Object扫描器[Object scanner]也能够识别输入库[import libraries]。如果某个DLL是按序号输出的,你不会看到函数名,只会发现一堆无意义的神秘数字。这种DLL的开发者通常会提供一个输入库来实现函数符号名与序号间的对应。让OllyDbg使用这个输入库,它就会恢复原始的函数符号名。
面向对象的语言(如C),使用了一种叫做名称修饰[namemangling]的技术,把函数类型和参数都加入函数名中。ollydbgOllyDbg 可以解码[demangle]这种函数名,使程序更易读。译者注:C的名称修饰是编译器将函数的名称转变成为一个唯一的字符串的过程,这个字符串会对函数的类、其命名空间、其参数表,以及其他等等进行编码。 C的名称修饰适用于静态成员函数,也适用于非静态成员函数。静态函数的名称修饰的一个好处之一,是能够在不同的类里使用同一个名称来声明两个或者更多的静态成员函数————而不会发生名称上的冲突。
OllyDbg完全支持 UNICODE,几乎所有对 ASCII 字符串的操作都可以同样应用于 UNICODE。
汇编指令都是很相的。你经常会搞不清自己是不是已经跟踪过某一段代码。在OllyDbg中你可以加入自己的标签[labels]和注释[comments]。这些极大地方便了调试。注意一旦你注释了某个DLL,以后每次加载这个DLL时,注释和标签都有效————尽管你在调试不同的程序。
现代的面向对象应用程序广泛地使用了一种叫做结构化异常处理[Structured Exception Handling,SHE]的技术。SHE窗口[SEH window] 可以显示异常处理链。
多种不同的搜索[search]选项可以让你找到二进制代码或数据、命令或命令序列、常量或字符串、符号名或在 Run跟踪中的一条记录。
对于任何地址或常量,OllyDbg 可以找出参考[referencing]到该地址或常量的全部命令的列表。然后你可以在这个列表里找出对你来说是重要的参考。举例来说,某个函数可能被直接调用,或者经过编译器优化后把地址放入寄存器间接调用,或者把地址压入堆栈作为一个参数————没问题,OllyDbg 会找出所有这样的地方。它甚至能找到并列出所有和某个指定的位置有关的跳转。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-41789-6.html
毕竟是中国先到美国十二海里
钓鱼岛本身就是我国领土呀
水军太多了