天天看点

0day安全学习笔记-第一章

1.2.1 PE文件格式

.text 由编译器产生,存放二进制机器代码,是反汇编和调试的对象

.data 初始化的数据库,如宏定义、全局、静态变量。

.idata 可执行文件所使用的动态连接库等外来函数与文件的信息

.rsrc 存放的是程序的资源,如图标、菜单

1.2.2 虚拟内存

     通过虚拟内存管理器的映射,可以使得每个进程都以为自己有大量的内存空间可以访问,但是每个进程在运行时并不会用到太大的内存空间,所以当它们不适用那些“虚拟地址”的时候,这些地址对于进程来说就是一笔“无形的财富”当需要进行实际的内存操作时,内存管理器才会把“虚拟地址”和“物理地址”联系起来。  可以将其类比为银行与储户

1.2.3 PE文件与虚拟内存之间的映射

   1)文件偏移地址(File Offset): 数据在PE文件中的地址叫文件偏移地址,是文件在磁盘上存放时相对于文件开头的偏移

   2)装载基址(Image Base): PE文件装入内存时的基地址。默认情况下,EXE文件在内存中的基地址时0x00400000,DLL文件是0x10000000。这些位置可以通过修改编译选项来更改。

   3)虚拟内存地址(Virtual Address,VA): PE文件中的指令被装入内存后的地址

   4)相对虚拟地址(Relative Virtual Address,RVA): 相对虚拟地址是内存地址对于映射基址的偏移量

 虚拟内存地址、装载基址、相对虚拟内存地址三者之间的关系:                           VA = Image + RVA

 PE文件存放:PE数据节的大小永远为0x200的整数倍 内存中的节的大小永远为0x1000的整数倍 例:若虚拟内存中0x00404141处的一条指令,那么若要换算出这条指令载文件中的偏移量,

则有: 文件偏移量 = 0x00404141 - 0x00400000 -(0x1000 - 0x400) = 0x3541、

           文件偏移地址和RVA之间的对应关系如下图所示:

0day安全学习笔记-第一章

节偏移是由于存储单元差异引起的节地址差,其值为:RVA-文件偏移量

文件偏移地址与虚拟内存地址之间换算关系为:

文件偏移地址 = VA - Image Base - 节偏移

      = RVA - 节偏移

OllyDbg部分快捷键

F8 单步执行 遇到函数调用指令不跟入

F7 单步执行 遇到函数调用指令跟入

F2 设置断点 两次取消断点

F4 执行到当前光标所选中的命令 遇到循环可以执行到循环结束后的指令

F9 运行程序 运行程序直到断点

Ctrl + G 查看任意位置处的数据 指令区、栈区、内存区都可以用

IDA Pro 部分快捷键

快捷键功能

; 为当前指令添加全文交叉引用的注释

n 定义或修改名称,通常用来标注函数名

g 跳转到任意地方观察代码

Ese 返回到跳转之前的位置

D 分别按字节、字、双字的形式显示数据

A 按照ASCII形式显示数据

ida中左侧的.text地址为VA,即虚拟地址

lea 指令

LEA reg16,mem LEA指令将存储器操作数mem的4位16进制偏移地址送到指定的寄存器。这里,源操作数必须是存储器操作数,目标操作数必须是16位通用寄存器。因该寄存器常用来作为地址指针,故在此最好选用四个间址寄存器BX,BP,SI,DI之一。

je与jne

je = jmp equal jne = jmp not equal

继续阅读