如果选项“猜测未知函数的参数个数”开启,分析器将会决定这个调用函数过程使用的长度为双字的参数个数。并且标记他们为参数1[Arg1],参数2[ Arg2],等等。注意:无论如何,寄存器参数是无法识别的,所以不会增加参数的数目。分析器使用了一种比较安全的方法。例如,它不能识别的没有参数的函数过程,或者该过程POP命令直接做返回前的寄存器恢复,而不销毁参数。然而,识别出来的函数参数数目通常非常高,这大大加大了代码的可读性。
分析器能够跟踪整型寄存器的内容。现代优化编译器,特别是奔腾系列,频繁地使用寄存器读取常量和地址,或使用尽量少的使用内存。如果某个常量读取到寄存器中,分析器会注意它,并尝试解码函数和其参数。分析器还能完成简单的算术计算,甚至可以跟踪压栈和出栈。
分析器不能区分不同类的名称[different kinds of names]。如果你将某些函数指定为已知的名称,OllyDbg将会解码所有到该地址的调用。这是几个预定义的特殊名称WinMain, DllEntryPoint and WinProc。你可能使用这些标签标记主程序、DLL的的入口以及窗口过程(注意:OllyDbg不检查用户自定义的标签是否唯一)。另外,假定预定义参数assumepredefined arguments是一种更好的方法,不幸的是,没有一般规则能够做到100%的准确分析。在某些情况下,例如当模块包含了P—Code或代码段中包换了大量的数据,分析器可能将一些数据解释成代码。如果统计分析显示代码部分很可能是压缩包或者经过加密了,分析器会发出警告。如果你想使用Hit跟踪[Hit trace],我建议你不要使用模糊分析[fuzzy ysis],因为设置断点的地方可能正是数据部分。
自解压文件[Self—extractablefiles] 通常有一个自提取器,在“正式”代码段之外。如果你选择自解压选项[SFX option]中的“扩展代码段,包含提取器[Extend code section to include self—extractor]”,OllyDbg将会扩展代码段,形式上允许分析它,并可以使用Hit跟踪[Hit] trace和Run跟踪[Run trace]。
四、Object扫描器[Objectscanner]
扫描器将特定的目标文件或者目标库(包括OMF和COFF两种式),提取出代码段,然后将这些段定位在当前模块的代码节[Codesection]中.如果段定位好了,扫描器将从目标文件中的调试信息提取名称(也就是所谓的库标签[librarylabels])。这极大的增加了代码与数据的可读性。扫描器并不会对已识别的目标文件进行标签匹配,所以它不能识别非常小或相的函数(比如:两个函数只是在重定位有区别)。因此要经常检查扫描器发送到登陆窗口的警告列表!
五、Implib扫描器 [Implibscanner]
某些DLL的输出符号仅仅是一个序号。许多符号都是井号加数字(比如:MF2.#1003),这非常不便于理解。ollydbg幸运的是,软件零售商提供了输入连接库(implibs),它与序号符号名相关。
使用implib扫描器的方法:从主菜单中选择调试[Debug]—>选择输入链接库[Select importlibraries]。当你加载应用程序时,OllyDbg会读取链接库并从内置表[internal tables]中提取符号名。每次遇到序号符号,而对应的链接库已经注册到OllyDbg中时,这个序号符号会被替换。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-41789-10.html
台湾执政者也是明白之人
就拿美国练练手