逆向工程之汇编基础

1.1 寄存器

以下是通用寄存器(除了非通用寄存器还有EIP指令指针寄存器)

多数字符串指令通常把ECX用作计数器,把ESI作为源指针,把EDI作为目的指针,通常情况下栈操作会使用EBP和ESP。除了通用寄存器和EIP指令寄存器外还有6个16位段寄存器

代码段:CS

数据段:DS

栈段: SS

额外段:ES、FS及GS 三个为额外通用目的段

段寄存器包含我们称之为段选择子的指针,通常以偏移量的基地址形式出项例如:

mov DS:[eax],ebx

ebx 寄存器中的内容被复制到eax制定的数据段里的一个偏移地址,这个地址解释为“DS的地址加上EAX的值”段选择子是16位段标识符,也就是说段选择子不直接指向段,而是指向定义段的段描述符。因此段寄存器指向段选择子,用于确定8192个可能标识段的段描述符中的一个

段选择子结构相对简单,3-15位用作描述表的索引(三个内存管理寄存器之一),第2位指定正确的描述符表,低两位指定请求的特权级。

EFLAGS 寄存器也很重要它包含了各种标志,指示当前指令执行后的状态、情形、当前的特权级、以及是否允许中断等内容。

1.2  IA-32处理器操作模式

     IA-32处理器有三种操作模式和一种伪操作模式,分别是保护模式、实地址模式、体统管理模式、以及保护模式子集的伪模式,我们着重介绍常见的保护模式

     保护模式里,有四个称为环( ring )的特权级。一般用 0 至 3 表示它们,数越小表示特权级越高。环 O 一般是操作系统使用,而应用程序一般运行在环 3 ,这将通过中止恶意程序运行来防止它们修改操作系统的数据结构和对象,也限制应用程序可以运行的指令。在 IA32 里,在三个地方可以找到特权级: CS 寄存器的低 2 位 ― CPL ( Current Privilege Lcvel ,当前特权级),段描述符的低 2 位 ― DPL ( Descriptor Privilege Levcl ,描述符特权级),段选择子的低 2 位 ― RPL ( Requestor ' 5 Privilege Level ,请求特权级)。 CPL 是当前正在执行代码的特权级, DPL 是给定描述符的特权级,而 RPL 则显然是创建段的代码的特权级。

      保护模式下有三个不同的内存模型:平坦、分段及实地址。实地址模式常用干启动时且保持向后兼容,不过,你很有可能从来不会(或很少)碰到它,模型和它名字表述含义差不多:它是平坦的! 因此,本章不准备讨论它。平坦内存这意味着系统内存看起来像一片连续的地址空间.通常是地址 0 - 4294967296 。这里的地址空间被称为线性地址空间任何单独地或应用程序中的表现形式。在这两种情形下,数据仍是以线性的方式保存,但数据的视图改变了。对分段内存来说,不是以线性地址访问内存,而是使用了逻辑地址(也称为 far 指针)。逻辑地址是基址保存在段选择子里加上偏移 t 的结合。两者(基址及偏移最)相加后对应段里的一个地址,然后映射到线性地址空间里。这样可以保证高度分离由处理器强制执行,确保一个进程不会跑到另一个进程的地址空间里(不过,在平坦内存模型里,由操作系统做同样的事情)。因此,基址加上偏移等于处理器地址空间里的线性地址。此外,除了每个应用程序被给定它自己的段集及段描述符外,多段模型也可以用于使用单一分段模型的地方。不过目前我想不起来还有哪个操作系统在使用它,因此,进一步讨论它怎样工作也没什么意义。

       现代操作系统能使用的地址空间往往比物理内存更大一些,而寻址的数据井不一定保存在物理内存里。这是如何做到的呢?答案是分页和虚拟内存 ,只有当前必需的数据才需要随时保存在物理内存里。它把需要的数据保存在物理内存里,把暂时用不上的数据保存到硬盘上。把数据从磁盘读入内存的过程,或向磁盘写数据,被称为交换数据,这就不难理解 Windows 为什么会有交换文件,而 Linux 有交换分区。当不启用分页时,线性地址(不管它是否由 far 指针组成)与物理地址一一对应,它和使用的地址空间之间没有转换。然而.当启用分页时,应用程序使用的所有指针都是虚拟地址。(这就是为什么在保护模型里平坦内存模型中的两个应用程序使用分页访问完全一样的地址却不会彼此破坏。)这些虚拟地址与物理内存地址间不存在一一对应的关系。使用分页技术时.处理器把物理内存分成 4KB 、 2MB 或 4MB 大小的页。地址转换成线性地址时,将通过分页机制查找它,如果这个地址不在当前的物理内存里,将抛出page-fault(页面故障)异常,操作系统收到此异常后,将把指定的页面加载到内存里,然后接着执行刚才导致此异常的指令。把虚拟地址转换成物理地址的过程依赖使用的页面大小,但基本概念是一样的。线性地址分成 2 个或 3 个部分。首先用 PDBR ( Page Directory Base Register ,页面目录基址寄存器)或 CR3 ( control Rcgister 3 .控制寄存器 3 )查找 Page Directory(页面目录)&#

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值