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

物理地址读写驱动

正文 没有用MmMapIoSpace,用了映射的方式对物理地址数据进行读写,之前测试MmMapIoSpace在win10较高版本用不了,貌似是不支持了。...用法和效果如下,加载驱动后,Read.exe用来读取物理地址的数据,限制为0x100字节大小,当然可以通过修改驱动代码来读取任意字节,我这里只是给了个demo;Write.exe则是对指定的物理地址进行写操作...注 不是驱动大佬,可能驱动代码写的并不是很好,如果有什么意见或者驱动存在了蓝屏的问题,欢迎指出和指导 /* function 读取物理地址,大小为FF argv MapAddress:物理地址映射出来的地址...//取低12位作为偏移使用 SectionOffset.QuadPart = (ULONGLONG)(Physicaladdress); // 映射物理内存地址到当前进程的虚地址空间 status...PhysicalAddress & 0xFFF; //取低12位作为偏移使用 SectionOffset.QuadPart = (ULONGLONG)(PhysicalAddress); // 映射物理内存地址到当前进程的虚地址空间

2.4K40

物理地址和虚拟地址的分布

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

2K31
您找到你想要的搜索结果了吗?
是的
没有找到

物理地址和虚拟地址的分布

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

2K111

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

MAC(Media Access Control,介质访问控制)地址 (物理地址)是识别LAN(局域网)节点的标识。...就是你的电脑的身份证啦~这个地址是由网卡决定的,但是可以在注册表里面改动系统读取的网卡物理地址。...Mac地址就是在媒体接入层上使用的地址,通俗点说就是网卡的物理地址,现在的Mac地址一般都采用6字节48bit(在早期还有2字节16bit的Mac地址)。   ...MAC地址也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。...IP地址是跟据现在的IPv4标准指定的,不受硬件限制比较容易记忆的地址,而Mac地址却是用网卡的物理地址,多少与硬件有关系,比较难于记忆。

1.3K10

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

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

771110

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

好了,回归这题,本篇文章主要给大家讲述一下物理地址和逻辑地址的概念,以及它们之间的联系与区别。ps:本文以Intel8086处理器为例讲述。...以上过程中的[0001]就是我们所要说的物理地址,它是一个绝对的固定的地址。 ? 那假如我们指令中的地址用的是物理地址(绝对地址),会产生怎样的问题呢?...如果我们将[0001]当成物理地址的话,那么mov ax,[0001]这句指令读取到的将会是错误的内容。...由此,便诞生了我们将要说的逻辑地址的概念,物理地址它是固定不变的,而逻辑地址会随着程序加载到内存中的位置而变化。好,我们接下来看一下什么是逻辑地址。 ?...首先来看一下mov ax,[0001]这条指令,其实呢,我们的编译器会将其转化为mov ax,[0000],而并不是像上文所讲的那样,将[0001]看作一个物理地址然后直接去寻址,上文所讲只是为了说明其问题所在

4K40

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

【操作系统复习】 物理地址虚拟地址 物理地址和虚拟地址的区别 物理地址 逻辑地址 线性地址 为什么要分成物理地址和虚拟地址 物理内存及虚拟内存定义 为什么要有虚拟内存 虚拟内存的实现(可以在页式或段式内存管理的基础上实现...虚拟地址转换为物理地址的过程 快表是存储在哪里的 物理地址和虚拟地址的区别 操作系统有物理地址、逻辑地址、线性地址(也叫虚拟地址)三种地址 物理地址 在存储器里以字节为单位存储信息,为正确地存放或取得信息...逻辑地址往往不同于物理地址(physical address),通过地址翻译器(address translator)或映射函数可以把逻辑地址转化为物理地址。...为什么要分成物理地址和虚拟地址 物理内存及虚拟内存定义 ​ 物理内存是相对于虚拟内存而言的。物理内存指通过物理内存条而获得的内存空间,而虚拟内存则是指将硬盘的一块区域划分来作为内存。...虚拟技术基本特征: 大的用户空间(物理内存和外存相结合形成虚拟空间)、部分交换(调入和调出是对部分虚拟地址空间进行的)、不连续性(物理内存分配的不连续,虚拟地址空间使用的不连续)。 逻辑地址呢?

2K20

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

物理地址: 这里说的物理地址是内存中的内存单元实际地址,不是外部总线连接的其他电子元件的地址!...物理地址属于比较好理解的,物理地址就是内存中每个内存单元的编号,这个编号是顺序排好的,物理地址的大小决定了内存中有多少个内存单元,物理地址的大小由地址总线的位宽决定!...,虚拟内存里的所有地址都是不直接的,所以你有时候可以看到一个虚拟地址对应不同的物理地址,比如A进程里的call函数入口虚拟地址是0x001,而B也是,但是它俩对应的物理地址却是不同的,操作系统采用这种内存管理方法...是防止程序对物理地址写数据造成一些不可必要的问题,比如知道了A进程的物理地址,那么向这个地址写入数据就会造成A进程出现问题,在虚拟内存中运行程序永远不知道自己处于内存中那一段的物理地址上!...+段偏移地址轻易得到物理地址

3K00

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

线性地址: 线性地址是逻辑地址物理地址之间的一个中间层变换,程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址,逻辑地址是如何知道自己的段基的址?...如果启用了分页机制,那么MMU内存管理单元会在内存映射表里寻找与线性地址对应的物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。...7.内存中有一个叫MMU(内存管理单元)的电子元件负责从操作系统已经初始化好的内存映射表里查询与虚拟地址对应的物理地址并转换, 8.逻辑地址由两部份组成,段标识符和段内偏移量。...逻辑地址即程序中的段地址,比如说0x1到0x4为一个页面,那么0x1-0x4之间的段地址称为逻辑地址,逻辑地址可以通过内存中的段数组里寻找段选择符+段偏移地址轻易得到物理地址。...线性地址是逻辑地址物理地址之间的一个中间层变换,程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址

1.9K00

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

本文是关于操作系统中逻辑地址物理地址之间的区别。计算机操作系统中的内存使用两种不同类型的地址物理地址是内存的实际地址,如RAM,虚拟地址只是缓存和RAM之间的逻辑地址映射。...虚拟地址也称为指向主存储器中实际或物理地址的引用或指针。...然而,内存单元存储在由物理地址(用户未知)访问的主内存中,我们所知道的只是进程的逻辑地址。那么当我们需要访问进程的时候我们将如何访问物理地址呢?...下面给出了逻辑地址物理地址的一般比较。...物理地址 逻辑地址 定义 物理内存地址 虚拟地址 空间 内存空间所在的实际内存地址 引用物理地址/实际地址,称为逻辑地址空间 可见性 只对开发人员可见,对程序员不可见 只对用户可见 访问 用户在任何情况下都无法访问

2.4K30

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

一般我们不需要从用户态得到进程虚拟地址对应的物理地址,因为一般来说用户进程是完全不关心物理地址的。 少数应用场景下,用户可能会关心,比如在用户态做DMA的场景(如DPDK之类的)。...从用户态得到虚拟地址对应的物理地址,我们不可能去walk进程的page table,也没有权限。不过还好内核给我们提供了一个接口,叫pagemap,而且,这个接口与硬件的体系架构无关。...在/proc/pid/下面有个文件叫pagemap,它会每个page,生成了一个64bit的描述符,来描述虚拟地址这一页对应的物理页帧号或者SWAP里面的便宜,详见文档: linux/Documentation...下面我们忽略swap的影响(假设关闭了swap或者page一直是pin的状态),从DPDK抄一段虚拟地址转换为物理地址的代码: #define phys_addr_t uint64_t #define...,之后加上virtaddr % page_size的页内偏移,得到最终的物理地址

3.5K21

程序优化之”变量名长短”,内存逻辑地址,物理地址

原文博客 地址 程序如何确认内存地址 我们都知道,所有内存数据都是储存在我们硬件内存条上面的,那么它的空间是固定的,并且某个位置被占用的时候,应该是不能被其他程序使用的,否则将会内存冲突。...(一个空教室,小明已经坐了一个位置,其他同学不能坐在他大腿上了诶) 物理内存地址 上面这个概念就是物理内存地址,描述说明在硬件中实际的储存位置(好比 二排三列) 逻辑内存地址 那么我们的程序在编译完成之后...,怎么确定它在运行时到底使用哪一块内存地址呢?...php $a = 1; $b = 3; 那么编译后的程序可能如下(用文字描述) Location = 向系统申请内存地址,并返回物理内存地址 申请一块内存,储存代码$a的值,对应的物理内存地址为 ·Location...+ 1· 申请一块内存,储存代码$b的值,对应的物理内存地址为 ·Location + 1 + 1· 这里用1来代表一个变量需要占用的大小(仅仅为了说明,每个语言的数据结构不同) 这就是相对的逻辑内存地址

57210

通过linux0.11源码理解进程的虚拟地址、线性地址物理地址

进程的地址有三种,分别是虚拟地址(逻辑地址)、线性地址物理地址。在分析之前先讲一下进程执行的时候,地址的解析过程。...然后根据cs的值选择idt表格中的一项,从而得到代码段的基地址和限长,用基地址加上ip指向的偏移得到一个线性地址,这个线性地址分为三个部分,分别是页目录索引,页表索引,物理地址偏移。...然后到页目录吧和页表中找到物理地址地址,再加线性地址中的偏移部分,得到物理地址。下面我们看看这些内容是怎么设置的,使得执行的时候能正确找到我们想要的地址去执行代码。我们从fork函数开始。...用线性地址的首地址加上ip 中的偏移,得到线性地址,然后再通过页目录和页表得到物理 地址物理地址还没有分配则进行缺页异常等处理。...然后计算进程的代码和数据的线性地址地址和限长,写到ldt的描述符中。接着复制页表,但是不分配物理地址。最后把tss结构和ldt结构挂载到GDT中。fork函数就完成了。

1.4K60

Linux下内存空间分配、物理地址与虚拟地址映射

phys_to_virt只是计算出某个已知物理地址所对应的虚拟地址。将内核物理地址转化为虚拟地址。 virt_to_phys :将内核虚拟地址转化为物理地址。...(注意ioaddr是虚拟地址,而mmio_start是物理地址,它是BIOS得到的,肯定是物理地址,而保护模式下CPU不认物理地址,只认虚拟地址),ioaddr+0就是第一个寄存器的地址,ioaddr+...2、ioremap 允许对一个物理地址进行多次映射,而且分配的虚拟空间地址各不相同(多个虚拟地址对应于同一个物理地址)。而且,ioumap相互不影响。 ‬...与虚拟地址空间和虚拟地址相对应的则是物理地址空间和物理地址,大多数时候我们的系统所具备的物理地址空间只是虚拟地址空间的一个子集。...5.3 虚拟地址物理地址介绍 1)虚拟地址/物理地址 如果处理器没有MMU,CPU内部执行单元产生的内存地址信号将直接通过地址总线发送到芯片引脚,被内存芯片接收,这就是物理地址(physical address

2.9K31

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

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

47820
领券