1 / 7
文档名称:

IDA调试器跟踪功能.doc

格式:doc   大小:710KB   页数:7页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

IDA调试器跟踪功能.doc

上传人:文库旗舰店 2020/3/30 文件大小:710 KB

下载得到文件列表

IDA调试器跟踪功能.doc

文档介绍

文档介绍:使用IDA的跟踪功能上一篇调试器教程给出了如何用常用的调试命令来调试一个小程序。本教程将给出另一种方法。下面我们利用IDA调试器的跟踪功能来调试这个小程序。一个小bug程序这个小程序只是简单的计算了一下一组数据(1,2,3,4,5)的平均值。这组数据被保存在两个数组里,一个是8bit的数值,一个是32bit数值表示。#include<>charchar_average(chararray[],intcount){inti;charaverage;average=0;for(i=0;i<count;i++)average+=array[i];average/=count;returnaverage;}intint_average(intarray[],intcount){inti,average;average=0;for(i=0;i<count;i++)average+=array[i];average/=count;returnaverage;}voidmain(void){charchars[]={1,2,3,4,5};intintegers[]={1,2,3,4,5};printf("chars[]-average=%d\n",char_average(chars,sizeof(chars)));printf("integers[]-average=%d\n",int_average(integers,sizeof(integers)));}运行它,我们得到如下结果:chars[]-average=3integers[]-average=1054228可以看出在整数方式下计算的结果是错误的,我们用IDA的调试器来分析一下吧。什么是跟踪跟踪允许你记录应用程序运行时的变化信息。我们把跟踪信息称为“跟踪事件”。IDA记录把跟踪事件记录在一个跟踪缓存区中。跟踪缓存区的大小可以设定为无限大(此时你需要很多内存),或者固定的大小(这种情况下,新的跟踪事件会覆盖老的跟踪事件)。在我们这个例子中,由于我们调试的程序非常小,我们把它设定为无穷大:选择在Debugger主菜单下的Trace子菜单中的Tracingoptions,设定TracingBufferSize为0。IDA提供几种不同的跟踪机制:指令跟踪:IDA将会记录每一条指令的执行,并保存寄存器数值,通过使用这些信息,你可以找出应用程序的执行过程,并可找出哪条指令修改了哪个寄存器。函数跟踪:IDA将会记录所有的函数调用和函数返回。读写-写-执行跟踪:IDA将会记录一个对指定地址的所有访问。这种机制相当于是不停止的断点。对每种跟踪机制,都会记录相应的跟踪事件到跟踪缓存区,也可以保存到一个txt的文件中,同样可以通过Tracingoptions里的选项来设定。指令和函数跟踪为了定位在程序中的bug所在,我们要记录所有程序的执行指令,函数调用和函数返回。我们不想记录在main()函数之前的指令。因此我们把光标放置在main()的开始位置(0x4011A1),使用快捷键F4,开始运行程序并执行到光标位置。我们再通过点按跟踪工具条上的相应图标打开指令和函数跟踪功能,然后我们继续运行程序直到到达main()函数的结尾(0x40120A)。注意Runto(执行到…)命令在调试菜单和鼠标右键菜单中都可选择。