接触一点amd64

本文深入探讨了AMD64架构的核心特性,包括寄存器扩展、寻址模式和内存模型。详细介绍了长模式、64位模式、兼容模式和遗产模式,以及64位模式下的内存组织和转译机制。特别强调了内存分页和canonicaladdressform的概念,为理解AMD64提供了全面视角。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前没接触过,看那篇patchGuard的文章之后翻了翻手册和wiki,整理的东西放上来

概述

一、寄存器

通用寄存器扩展到64位,通用寄存器数目由原有8个扩展到16个

• Sixteen 8-bit low-byte registers (A L,BL, CL, DL, SIL, DIL, BPL, SPL, R8B, R9B, R10B, R11B,

R12B, R13B, R14B, R15B).

• Four 8-bit high-byte registers (A H,BH, CH, DH), addressable only when no REX prefix is used.

• Sixteen 16-bit registers (AX, BX, CX,DX, DI, SI, BP, SP, R8W, R9W, R10W, R11W, R12W,

R13W, R14W, R15W).

• Sixteen 32-bit registers (EAX, EB X,ECX, EDX, EDI, ESI, EBP, ESP, R8D, R9D, R10D, R11D,

R12D, R13D, R14D, R15D).

• Sixteen 64-bit registers (RAX, RBX,RCX, RDX, RDI, RSI, RBP, RSP, R8, R9, R10, R11, R12,

R13, R14, R15).

rip可以用来寻址: mov,rax,qwordptr [rip+100]

具体情况就是这样了……

 

二、寻址模式

 

Long Mode (保护模式扩展,包括64位模式和x86兼用模式两种子模式,不支持实模式和虚拟8086模式,不支持硬任务切换)

 

-虚拟地址扩展到64位

- 64位的rip – 相对于x86的eip

- Instruction-pointer-relati ve data-addressing mode.  – rip来做数据寻址基址?

- 依然是平坦地址空间

 

64-Bit Mode

     寄存器增加、64位地址、rip相对寻址

Compatibility Mode

     兼用模式,对于win32程序,一切如旧;对于系统而言,地址转译 中断 异常处理以及数据结构则是64位模式下的了。

Legacy Mode

     让amd64运行在x86的模式下,也就是可以运行x86的系统

 

 

内存模型

一、内存组织

64位模式下是平坦模式,Compatibility mode下是分段的(当然x86 windows也没分段)

 

64位下是只支持平坦模式了


 

二、内存转译

64位模式下,没有用到64位寻址那么大的空间(2^64 = 16EB)。只有虚拟地址的最低48位才会在地址转换(页表查询)时被使用。但是,任何虚拟地址的48位至63位必须与47位一致(按照符号位扩展的方式),否则处理器将会报告一个general-protection 异常。符合这一规则的地址被称作“canonical address form”。传统格式将从0至00007FFF`FFFFFFFF,以及从FFFF8000`00000000至FFFFFFFF`FFFFFFFF总计256TB的地址范围作为可以使用的虚拟地址空间。

 

 

操作系统通常以此来划分ring0和ring3的界限。【1】

 

寻址方式上除了多出rip方式:Instruction-RelativeAddresses 以外,其他和以往一样。


关于内存分页,采用了4级寻址。


一口气搞懂amd64是不太现实。。。手册好长。。。


另:这哥们的书单不错,mark 有空看看 http://blog.youkuaiyun.com/cndvdc/article/details/5084747


参考:amd64手册,wiki,http://hi.baidu.com/andimeo/item/5978216aee06f236ad3e830b


【1】PatchGuard2利用了这个技巧向常规DPC历程中传递非法指针。这个指针不是canonical address,从而通过#GP异常将patchGuard请求捕获。

 这个指针只能在非canonical address区 。否则会引发PAGEFAULT_IN_NONPAGED_AREA or IRQL_NOT_LESS_OR_EQUAL而直接BSOD。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值