首页 > 解决方案 > 在linux或android中获取文件/照片的物理内存地址

问题描述

我在android中有一个文本文件(或jpg照片),它本质上是一个修改过的linux系统(我有一些使用NDK在android中编写本机C代码的经验)。我只是想找到这个文件/照片开头的物理内存地址。所以得到一个类似的返回值:0x9abcdef0。我的理解是文件/照片存储在物理内存地址空间的某个地方,如果这个假设是错误的,请告诉我。

我研究了诸如 mmap 之类的调用和一些 SO 帖子,但它们并没有真正做我想要的,只是返回地址。我也不需要诸如 open() 之类的函数或与文件描述符相关的东西,以获取较低级别的真实地址。

如何从 Linux 中的用户空间访问物理地址?

linux内核 - 如何获取物理地址(内存管理)?

在 C 中使用 mmap 写入内存。

标签: androidclinuxmemorymemory-management

解决方案


我的理解是文件/照片存储在物理内存地址空间的某个地方,如果这个假设是错误的,请告诉我。

这个假设是错误的。

文件在“磁盘”上永久存储——在典型的 Android 设备上,这将是 eMMC,本质上是焊接在主板上的 SD 卡。磁盘上的文件存储在文件系统中,这是一组数据结构,可让您从路径名到文件以及从文件和偏移量获取文件偏移量所在的物理存储位置。

文件通常不会永久存在于物理内存中。当被访问时,它们的一部分将临时驻留在内存中不同的物理地址。如果mmapped 作为共享映射,它们将在映射的生命周期内在进程中的固定虚拟地址处可寻址,但此映射背后的物理内存可以随时变化。


推荐阅读