IDA加载文件过程
在IDA中打开可执行文件时使用静态分析器分析该文件,也称为Loader。在这种装载程序模式下,该程序将不会执行而是交给IDA静态分析,并最终创建一个.idb文件,分析过程中存储信息(包括重命名)的数据库。变量,函数名,标题...都存在这个文件里。
而.idb文件将是分析过程间产生成的5个文件(.id0,.id1,.nam,.id2和.til)融合在一起:
IDA不具有“撤消”功能,分析过程中所做的任何更改都不会撤消,而是直接保存。但是这些更改仅是存储在idb文件里,不会直接影响到正在分析的原始二进制文件。
在加载程序模式下,没有“寄存器”窗口,“堆栈”等窗口以及加载程序使用的内存模块列表。在Debugger模式下执行和调试程序时,这些信息才会出现。
寄存器知识
寄存器被称为内置在处理器中的小型存储区(易失性内存-仅在计算机仍处于活动状态时才保存数据)。CPU执行命令时,必须从内存中检索指令和对指令进行解码,然后执行与指令目的相对应的操作。
在32位架构中,使用的寄存器是EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI和EIP,而64位架构会多出几个寄存器。
通用寄存器:
- EAX(寄存器寄存器-累加器):最常用于算术,逻辑和数据传输指令、乘法和除法运算使用此寄存器。对于Windows API函数,函数的返回值通常将存储在EAX寄存器中。
- EBX(基址寄存器):EBX寄存器可以直接访问存储器数据,它也是一个通用寄存器。
- ECX(计数寄存器):ECX是一个共享寄存器,可以用作各种命令的计数器。它还可能包含内存中的数据未对齐。使用计数器的命令是顺序,循环和LOOP / LOOPD指令。
- EDX(数据寄存器):是一个通用寄存器,用于包含乘法结果或除法结果的一部分。它还可以直接访问内存中的数据地址。
- EDI(目标索引):EDI通常用于处理字符串或数组的工作。该寄存器将指向目标字符串。此外它也是一个通用寄存器。
- ESI(源索引):与EDI一样,ESI也经常用于处理字符串或数组的操作。该寄存器将指向源字符串。
- EBP(基本指针):EBP指向内存位置,除了被共享外,还用作访问函数堆栈中的参数和局部变量的帧指针。
- ESP(堆栈指针):该寄存器始终指向当前堆栈顶部。根据堆栈的工作原理,该寄存器将被定向到低位地址。
因此共有8个通用的32位寄存器,即EAX,EBX,ECX,EDX,ESP,EBP,ESI和EDI。另外这些寄存器可以细分为16位和8位寄存器,如下所示:
例如,如果EAX寄存器的值为0x12345678,则AX是包含最后四位数字的16位寄存器:
AX寄存器可以被分成2个8位寄存器,它们是一对寄存器:AH包含两个数字5和6以及AL所包含的最后两个数字7和8: