IDA动态调试
调试进程
程序运行过程中会生成一些关键的数值,而人力分析这些数值可能很麻烦。所以我们可以让程序运行起来,得到中间过程的数值,这就是动态调试。核心是调试器捕获所选择进程的内存快照,以此创建一个临时数据库。
点击Debugger-->Select Debugger或按F9,EXE文件一般使用Local Windows Debugger
(可能会出现小问题,属于是IDA7.0版本问题,遇到了搜搜)
debugger菜单以新的形式展开,点击带有绿色三角符号的“Start process”或按F9即可开始调试程序
选择yes,进入了调试器界面(包括命令行窗口)
调试器界面与指令
在这里点击f5,可以进入伪代码调试。下面的“hex view”顾名思义,右边从上到下分别是级寄存器/标志寄存,加载到进程内存空间中的可执行文件和共享库(双击模块名称可打开该模块输出的符号表)再向下是栈窗口
Pause 暂停一个正在运行的进程
Terminate 终止一个正在运行的进程
F4 Run to Cursor 执行进程,直到执行到达当前的光标位置
F7 Step into 执行下一条指令,如果下一条是函数调用,就进入函数第一条
F8 Step over 执行下一条指令 如果下一条是一个函数调用,会跨过
F9 Continue 继续执行一个暂停的进程。执行将继续,直到遇到一个断点暂停
Ctrl+F7 Run Until Return 执行当前函数到返回
断点
IDA调试器支持软件断点和硬件断点
软件断点:软件断点是通过修改程序指令进行实现的。在软件断点设置的位置上,调试器会将指令替换为特殊的中断指令,当程序执行到这个位置时,触发中断,使得程序暂停执行。
硬件断点:硬件断点则是通过处理器内部的调试功能实现的。处理器提供了一些专门的调试寄存器,可以设置断点的地址和触发条件。当程序执行到设定的断点位置时,处理器会自动触发中断,使得程序暂停执行。
按F2或点击代码前圆圆的标志设置软件断点
点击Add breakpoint设置硬件断点,再点击Edit breakpoint(原位置)
location栏是断点地址,condition栏则是条件断点的表达式
选Hareware,按照需求选择读写或者执行断点
监视
可以持续监视一个或几个变量的值,不需要每次进程暂停后导航到相关内存的位置。需要监视的数据一般在栈或者数据块中,如果需要删除,则按Delete
注:ida还支持另一种调试方式,即将目标文件附加到一个正在运行的进程上,以调试某些无法独立运行的文件,点击Attach to process后即可选择附加进程