首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【计算物理地址】计算存储器操作数物理地址时候如何选择DS还是SS

先看例题 DS=3000H,ES=4000H,SS=5000H,BX=0300H,BP=0050H,SI=0200H计算下列指令中存储器类型操作数物理地址。...(1)MOV AL,[BP+5] (2)ADD AL,5[BX+SI] (3)MOV BP,[2000H](4)ADD [BP][SI]+20H,AX并详细解释如何选择DS还是SS 要计算给定指令中存储器类型操作数物理地址...MOV BP,[2000H] 段寄存器:此指令中偏移量是显式(2000H),没有使用BP或其他偏移寄存器,所以段寄存器为默认DS。...总结 MOV AL,[BP+5]: 物理地址 = 50055H (使用SS) ADD AL,5[BX+SI]: 物理地址 = 30505H (使用DS) MOV BP,[2000H]: 物理地址 = 32000H...(使用DS) ADD [BP][SI]+20H,AX: 物理地址 = 50270H (使用SS) 在计算物理地址时,选择DS还是SS关键在于是否使用了BP寄存器:如果使用BP,则默认使用SS;否则使用

6010

物理地址读写驱动

正文 没有用MmMapIoSpace,用了映射方式对物理地址数据进行读写,之前测试MmMapIoSpace在win10较高版本用不了,貌似是不支持了。...然后利用映射方式测试时候可以在win10下运行。...用法和效果如下,加载驱动后,Read.exe用来读取物理地址数据,限制为0x100字节大小,当然可以通过修改驱动代码来读取任意字节,我这里只是给了个demo;Write.exe则是对指定物理地址进行写操作...注 不是驱动大佬,可能驱动代码写并不是很好,如果有什么意见或者驱动存在了蓝屏问题,欢迎指出和指导 /* function 读取物理地址,大小为FF argv MapAddress:物理地址映射出来地址...Physicaladdress:指定读取物理地址 return 返回状态 */ NTSTATUS ReadPhysicalAddress(PVOID MapAddress, DWORD64 Physicaladdress

2.5K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    物理地址和虚拟地址分布

    物理地址空间布局 Linux系统在初始化时,会根据实际物理内存大小,为每个物理页面创建一个page对象,所有的page对象构成一个mem_map数组。...之所以需要单独管理 DMA 物理页面,是因为 DMA 使用物理地址访问内存,不经过 MMU,并且需要连续缓冲区,所以为了能够提供物理上连续缓冲区,必须从物理地址空间专门划分一段区域用于 DMA。...Linux物理地址和虚拟地址关系 ? Linux 将 4G 线性地址空间分为2部分,0~3G 为 user space,3G~4G 为 kernel space。...由于开启了分页机制,内核想要访问物理地址空间的话,必须先建立映射关系,然后通过虚拟地址来访问。为了能够访问所有的物理地址空间,就要将全部物理地址空间映射到 1G 内核线性空间中,这显然不可能。...虽然这样存在效率问题,但是内核毕竟可以正常访问所有的物理地址空间了。 到这里我们应该知道了 Linux 是如何用虚拟地址来映射物理地址,最后我们用一张图来总结一下: ?

    2.1K31

    物理地址介绍「建议收藏」

    大家好,又见面了,我是你们朋友全栈君。...物理地址介绍 在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个唯一存储器地址,称为物理地址(Physical Address),又叫实际地址或绝对地址。...下图为一个1M flash(0x0—>0x100000)分区实例,至于下图起始地址0x8000000是有关地址映射问题了。...补充: 关于rom 和ram RAM:随机存储器,与cpu直接交换数据内部存储器,也叫内存,他可以随时读写,速度快,通常作为操作系统或其他正在运行程序临时数据存储媒介,其断电时不能保存数据(掉电数据丢失...),对于需要保存数据需要存储到rom中。

    85520

    给你系统增加对物理地址验证

    给你系统增加对物理地址验证 我们开发出一个系统之后,经常有很多方法来保护我们系统不受别人非法使用,比如说采用注册码,根据IP地址进行限制等。...,因为电脑物理地址已经改变,所以原来所使用注册码将失效,这样可以防止了系统非法拷贝。...开发原理 其中这个原理比较简单,首先我们是根据用户提供物理地址制作出一个license文件(或者是注册码,这个注册码是根据保护了物理地址信息,不过最好是要先通过编码),就是通过系统命令来获得电脑物理地址...,比如说windows系统“ipconfig /all”命令,这样就可以获得该电脑物理地址;然后我们根据这个物理地址跟注册码中获得物理地址进行比较,如果相同的话,就允许使用系统,否则,不允许使用系统...接下来我们就要对这个信息跟注册码里面的信息进行比较了,不过这里有个问题,就是不同系统获得物理地址命令是不同,windows系统是采用ipconfig /all命令,而linux和unix系统是采用

    49820

    物理地址和虚拟地址分布

    物理地址空间布局 Linux系统在初始化时,会根据实际物理内存大小,为每个物理页面创建一个page对象,所有的page对象构成一个mem_map数组。...之所以需要单独管理 DMA 物理页面,是因为 DMA 使用物理地址访问内存,不经过 MMU,并且需要连续缓冲区,所以为了能够提供物理上连续缓冲区,必须从物理地址空间专门划分一段区域用于 DMA。...Linux物理地址和虚拟地址关系 ? Linux 将 4G 线性地址空间分为2部分,0~3G 为 user space,3G~4G 为 kernel space。...由于开启了分页机制,内核想要访问物理地址空间的话,必须先建立映射关系,然后通过虚拟地址来访问。为了能够访问所有的物理地址空间,就要将全部物理地址空间映射到 1G 内核线性空间中,这显然不可能。...虽然这样存在效率问题,但是内核毕竟可以正常访问所有的物理地址空间了。 到这里我们应该知道了 Linux 是如何用虚拟地址来映射物理地址,最后我们用一张图来总结一下: ?

    2.1K111

    80386分段机制、分页机制和物理地址形成

    ,把某一段寄存器(段基址)左移4 位,然后与地址ADDR 相加后被直接送到内存总线上,这个相加后地址(20位)就是内存单元物理地址,而程序中这个地址ADDR就叫逻辑地址(或叫虚地址)。...(3)段属性(Attribute): 表示段特性。例如,该段是否可被读出或写入,或者该段是否作为一个程序来执行,以及段特权级等。 1、逻辑地址、线性地址和物理地址 ?...(3)将段描述符中32 位段基地址和放在ESI、EDI 等中32 位有效地址相加,就形成了32 位物理地址。 ?...分页机制通过把线性地址空间中页,重新定位到物理地址空间来进行管理,因为每个页面的整个4K 字节作为一个单位进行映射,并且每个页面都对齐4K 字节边界,因此,线性地址低12 位经过分页机制直接地作为物理地址低...由于每个页面为4K 个字节,所以,存储器大小正好最多为4GB。 当访问一个操作单元时,如何由分段结构确定32 位线性地址通过分页操作转化成32位物理地址呢?

    1K30

    使用WinDbg查看保护模式分页机制下物理地址

    才能找到映射该内存地址物理地址,下面让我们使用WinDbg工具来看一下系统如何通过虚拟地址找到真正物理地址: 首先要构建一个双机调试环境(见另一篇文章看,本文使用虚拟机为Win7 x86...我们取第一个虚拟地址0x001ee148,求出此地址在计算机内存内所对应物理地址。...通过 r cr3命令查看cr3寄存器值,得到cr3=7eaf6540,即为页目录基址(注意,cr3保存物理地址,用WinDbg查看物理地址时要在最前面加上!...可以得到物理地址所在页基址为3cefc000,而字节索引为0x148 使用!db 3cefc000+0x148查看该地址内容 ?...正好是我们Hello World字符串,所以我们成功地根据虚拟地址通过分页机制找到了物理地址

    1.8K10

    80386分段机制、分页机制和物理地址形成

    ,这个相加后地址(20位)就是内存单元物理地址,而程序中这个地址ADDR就叫逻辑地址(或叫虚地址)。...(3)段属性(Attribute): 表示段特性。例如,该段是否可被读出或写入,或者该段是否作为一个程序来执行,以及段特权级等。 1、逻辑地址、线性地址和物理地址 ?...(3)将段描述符中32 位段基地址和放在ESI、EDI 等中32 位有效地址相加,就形成了32 位物理地址。 ?...分页机制通过把线性地址空间中页,重新定位到物理地址空间来进行管理,因为每个页面的整个4K 字节作为一个单位进行映射,并且每个页面都对齐4K 字节边界,因此,线性地址低12 位经过分页机制直接地作为物理地址低...由于每个页面为4K 个字节,所以,存储器大小正好最多为4GB。 当访问一个操作单元时,如何由分段结构确定32 位线性地址通过分页操作转化成32位物理地址呢?

    1.3K50

    WCF后续之旅(15): 逻辑地址和物理地址

    在WCF中,每个终结点都包含两个不同地址——逻辑地址和物理地址。逻辑地址就是终结点Address属性表示地址。...至于物理地址,对于消息发送放来讲,就是消息被真正发送目的地址;而对于消息接收放来讲,就是监听器真正监听地址。 一、服务端物理地址 在默认情况下,终结点逻辑地址和物理地址是同一个URI。...换句话说,终结逻辑地址是必须,如何物理地址没有指定,默认使用逻辑地址作为物理地址。...上面我们介绍了基于消息接收端终结点物理地址指定,现在我们来介绍对于消息发送端终结点,物理地址如何指定。...ClientViaBehavor定义Uri代表该物理地址

    801110

    IP地址和物理地址有什么区别

    MAC(Media Access Control,介质访问控制)地址 (物理地址)是识别LAN(局域网)节点标识。...网卡物理地址通常是由网卡生产厂家烧入网卡EPROM(一种闪存芯片,通常可以通过程序擦写), 它存储是传输数据时真正赖以标识发出数据电脑和接收数据主机地址。...就是你电脑身份证啦~这个地址是由网卡决定,但是可以在注册表里面改动系统读取网卡物理地址。...Mac地址就是在媒体接入层上使用地址,通俗点说就是网卡物理地址,现在Mac地址一般都采用6字节48bit(在早期还有2字节16bitMac地址)。   ...IP地址是跟据现在IPv4标准指定,不受硬件限制比较容易记忆地址,而Mac地址却是用网卡物理地址,多少与硬件有关系,比较难于记忆。

    1.5K10

    操作系统中逻辑地址和物理地址区别

    本文是关于操作系统中逻辑地址和物理地址之间区别。计算机操作系统中内存使用两种不同类型地址。物理地址是内存实际地址,如RAM,虚拟地址只是缓存和RAM之间逻辑地址映射。...虚拟地址也称为指向主存储器中实际或物理地址引用或指针。...2、物理地址简介 物理地址是进程及其内容放置在主内存或硬盘中地址。每当我们运行一个进程或将一些数据存储在计算机主存储设备或辅助存储设备中时,我们总是将其存储起来以备将来随时访问。...然而,内存单元存储在由物理地址(用户未知)访问主内存中,我们所知道只是进程逻辑地址。那么当我们需要访问进程时候我们将如何访问物理地址呢?...图1.2:逻辑地址到物理地址映射 这个内存管理单元对逻辑地址上物理地址执行所有必需映射。由MMU执行非常基本映射是由一种称为界限和基址方案执行。这是执行映射可以使用最简单方法。

    2.8K30

    手动玩转虚拟地址到物理地址转化

    我们这次来根据dump动手来实际转化一个虚拟地址到物理地址,此次地址不是线性地址映射。...__| | C:FFFFFF8008015000| A:C549F000 上面0xFFFFFF8008015000就是虚拟地址,而我们努力方向就是物理地址...根据PTE基地址+PTE_Index获取直接页表基地址 根据直接页表地址+offset就可以获取真正物理地址 转化之前先确认是此地址是属于用户空间还是内核空间。...0x17AC060A8 PTE_entry_phy = rd(0x17AC060A8) = 0xE00000C549F793 pfn = 0xE00000C549F793 >> 12 = 0xC549F 物理地址...present意思是页是否是有效,无效代表虚拟到物理地址之间转化无效,当访问虚拟地址时候就会page fault protection :权限之类,是否读写执行权限之类

    2.3K20

    【操作系统复习】物理地址虚拟地址

    【操作系统复习】 物理地址虚拟地址 物理地址和虚拟地址区别 物理地址 逻辑地址 线性地址 为什么要分成物理地址和虚拟地址 物理内存及虚拟内存定义 为什么要有虚拟内存 虚拟内存实现(可以在页式或段式内存管理基础上实现...虚拟地址转换为物理地址过程 快表是存储在哪里 物理地址和虚拟地址区别 操作系统有物理地址、逻辑地址、线性地址(也叫虚拟地址)三种地址 物理地址 在存储器里以字节为单位存储信息,为正确地存放或取得信息...,每一个字节单元给以一个唯一存储器地址,称为物理地址(Physical Address),又叫实际地址或绝对地址。...地址从0开始编号,顺序地每次加1,因此存储器物理地址空间是呈线性增长。它是用二进制数来表示,是无符号整数,书写格式为十六进制数。...如果没有启用分页机制,那么线性地址直接就是物理地址。 为什么要分成物理地址和虚拟地址 物理内存及虚拟内存定义 ​ 物理内存是相对于虚拟内存而言

    2.1K20

    「linux」物理地址,虚拟地址,内存管理,逻辑地址之间关系

    物理地址: 这里说物理地址是内存中内存单元实际地址,不是外部总线连接其他电子元件地址!...物理地址属于比较好理解物理地址就是内存中每个内存单元编号,这个编号是顺序排好物理地址大小决定了内存中有多少个内存单元,物理地址大小由地址总线位宽决定!...,虚拟内存里所有地址都是不直接,所以你有时候可以看到一个虚拟地址对应不同物理地址,比如A进程里call函数入口虚拟地址是0x001,而B也是,但是它俩对应物理地址却是不同,操作系统采用这种内存管理方法...是防止程序对物理地址写数据造成一些不可必要问题,比如知道了A进程物理地址,那么向这个地址写入数据就会造成A进程出现问题,在虚拟内存中运行程序永远不知道自己处于内存中那一段物理地址上!...当我们要对物理地址做操作时比如if语句要根据CPU状态标志寄存器来做不同跳转,那么这个时候就要对CPU额状态寄存器做操作了就必须知道它物理地址,内存中有一个电子元件叫MMU负责从操作系统已经初始化好内存映射表里查询与虚拟地址对应物理地址并转换

    3.2K00

    用户态进程如何得到虚拟地址对应物理地址

    一般我们不需要从用户态得到进程虚拟地址对应物理地址,因为一般来说用户进程是完全不关心物理地址。 少数应用场景下,用户可能会关心,比如在用户态做DMA场景(如DPDK之类)。...还有一些场景,比如想调试剖析每一页内存占用情况,是否swap出去了等。 从用户态得到虚拟地址对应物理地址,我们不可能去walk进程page table,也没有权限。...不同体系架构MMU不同,页表格式也不同,但是pagemap这个接口与具体页表格式无关,可以说都被抽象化了。...下面我们忽略swap影响(假设关闭了swap或者page一直是pin状态),从DPDK抄一段虚拟地址转换为物理地址代码: #define phys_addr_t uint64_t #define...得到这页起始物理地址,之后加上virtaddr % page_size页内偏移,得到最终物理地址

    3.8K21

    你真的懂物理地址和逻辑地址吗?

    好了,回归这题,本篇文章主要给大家讲述一下物理地址和逻辑地址概念,以及它们之间联系与区别。ps:本文以Intel8086处理器为例讲述。...以上过程中[0001]就是我们所要说物理地址,它是一个绝对固定地址。 ? 那假如我们指令中地址用物理地址(绝对地址),会产生怎样问题呢?...如果我们将[0001]当成物理地址的话,那么mov ax,[0001]这句指令读取到将会是错误内容。...因为,我们想要读取数据是[0003]和[0004]所拼接而成数据,而该条指令读取却是[0001]和[0002]内容,[0001]和[0002]中所存放内容未知,因此,如果我们把[0001]当作物理地址时...由此,便诞生了我们将要说逻辑地址概念,物理地址它是固定不变,而逻辑地址会随着程序加载到内存中位置而变化。好,我们接下来看一下什么是逻辑地址。 ?

    5.2K41
    领券