在程序中可以直接使用物理地址吗?如直接使用寄存器的物理地址。

时间:2022-10-20 17:06:26
各位大神,想请教一下,我们平时写的程序可以直接对物理地址进行操作吗?若赋值之类的?

10 个解决方案

#1


指针的内容本质就是一个逻辑地址

#2


可以。你可以用os提供的接口或者用第三方驱动作为代理

#3


可以。 
   操作可以参考内核代码 

#4


当然可以的  汇编都支持的

#5


应用肯定不行,只能在内核操作。

#6


lz所说的“平时写的程序”,可以理解为系统中的应用程序了,而不是驱动程序,更不是内核本身。
所以,不可以直接操作物理内存。即使是C的指针,对应的也是经过操作系统内存管理的虚拟内存。

#7


看LZ所说的是什么一般程序了,要是简单的51里或者是M0系列里跑的无系统程序,那就可以直接操作。

要是说的是带有系统的用户态程序,那是操作不到物理地址的,因为你操作的本身就是一个内核给你虚拟的地址空间,是一个映射。

#8


可以,寄存器随便用,只是有些特殊寄存器需要在特权模式才能访问。至于对物理地址操作的话,应用程序是无法实现的,因为有虚拟内存的存在,访问的地址不是真实的物理地址,要在特权模式即内核下通过映射把真实的物理地址映射到指定的页面(虚拟内存)进行访问。

#9


搂主应该先介绍一下运行环境。
不同的运行环境有不同的答案。

#10


如果有操作系统,无论是驱动还是应用程序都是不能直接操作物理地址的,但是可以操作虚拟地址。裸机代码可以直接操作物理地址的

#1


指针的内容本质就是一个逻辑地址

#2


可以。你可以用os提供的接口或者用第三方驱动作为代理

#3


可以。 
   操作可以参考内核代码 

#4


当然可以的  汇编都支持的

#5


应用肯定不行,只能在内核操作。

#6


lz所说的“平时写的程序”,可以理解为系统中的应用程序了,而不是驱动程序,更不是内核本身。
所以,不可以直接操作物理内存。即使是C的指针,对应的也是经过操作系统内存管理的虚拟内存。

#7


看LZ所说的是什么一般程序了,要是简单的51里或者是M0系列里跑的无系统程序,那就可以直接操作。

要是说的是带有系统的用户态程序,那是操作不到物理地址的,因为你操作的本身就是一个内核给你虚拟的地址空间,是一个映射。

#8


可以,寄存器随便用,只是有些特殊寄存器需要在特权模式才能访问。至于对物理地址操作的话,应用程序是无法实现的,因为有虚拟内存的存在,访问的地址不是真实的物理地址,要在特权模式即内核下通过映射把真实的物理地址映射到指定的页面(虚拟内存)进行访问。

#9


搂主应该先介绍一下运行环境。
不同的运行环境有不同的答案。

#10


如果有操作系统,无论是驱动还是应用程序都是不能直接操作物理地址的,但是可以操作虚拟地址。裸机代码可以直接操作物理地址的