IDA Pro 代码破解揭秘 (一) 逆向工程基础

一,汇编语言

汇编是与计算机交换的一种有趣的方法。就其本身来说,汇编是指与处理器指令集一一对应指令助记符的使用


二,寄存器

预分配的,物理上存在于处理器中的变量。可以用来保存整数,偏移量,立即数,指针等。

简单的介绍几个32位通用寄存器:

EAX, EBX, ECX, EDX,ESI, EDI, EBP, ESP, EIP。

他们都可以用来存储用户数据,但有些有着自己专门的用途。

ECX: 用作计数器

EXI:  用作源指针

EDI: 用作目的指针

EIP: 指向处理器将要执行的下一条指令。


详细信息可以参见汇编语言相关书籍。

三,操作系统模式和内存使用

在IA-32中,有3种操作系统模式(保护模式,实地址模式,系统管理模式)和一种伪操作模式(虚拟8086模式)。其中保护模式是关注的重点。

-        实地址模式:老的DOS系统支持这种模式,在重启或冷启动IA-32系统时系统处于这种模式。

-        系统管理模式:出现在80386的Inter架构里,用于电源管理,系统控制等地方。它基本阻塞系统其它的操作,并切换到新的地址空间。

-        保护模式:在80286中引入,在80386中得到完善。之前老的处理器只支持一种模式,不能在硬件上强制保护指令和内存。 在保护模式里有四个环的特权级,从而限制了程序对系统数据的访问。


保护模式中内存的使用

在保护模式中,有三种不同的内存模型:平坦,分段,实地址。

-        实地址    :长用于启动时保持向后兼容。

-        平坦地址:操作系统内存看起来像一片连续的地址空间,这里的地址空间被称为线性空间,任何单独的地址都会被认为是线性的地址。在这种内存模型中,所有的段--代码,栈,数据段等,都属于同一个地址空间。先在操作系统都使用这种模型。保护模式中,对平坦模型的段设定了限制。

-        分段地址:用于较早的操作系统,但现在有复苏的迹象。在某些地方它意味着速度和安全性的增加。在分段内存模型中,系统内存被分成成为段的小块。段之间相互独立。


现代操作系统寻址方式

现代操作系统能使用的地址空间往往比物理内存更大一些,而寻址的数据并不一定保存在物理内存里。主要是通过分页和虚拟内存实现的。

分页利用了这样的事实,在操作系统中,只有当前必须的数据才保存在物理内存中,暂时不用的数据则保存在硬盘上,把数据从磁盘读入内存或从内存写入磁盘的过程称为数据交换,Windows 系统中有交换文件,Linux系统中有交换分区。当不启用分页时线性地址和物理地址一一对应,地址空间之间没有转换。当启用分页后虚拟地址和物理地址不存在了一一对应的关系。这也就是为什么保护模式里,平坦内存模型中,两个应用程序使用分页访问完全一样的地址,却不会彼此破坏。

使用分页技术时,处理器把物理地址分为 4KB, 2MB, 4MB大小的页。线性地址可以转换为页地址,如果当前线性地址的页不在物理内存中,则抛出page-fault异常,系统捕获异常后会把目标页载入内存,然后继续执行刚才导致异常的指令。

虚拟地址转换为物理地址依赖于页面的大小,下图展现了一个4K页面的地址转换过程:

1) 通过页面基地址寄存器(Page Directory Base Register) 或 CR3查找页面目录并定位页表入口

2) 通过页面表查找并定位页面

3) 在页面中通过偏移量定位物理地址





你可能感兴趣的:(杂谈)