我有一个未知的void* bufferpointer
。有没有找到缓冲区的内存大小。我没有访问malloc.h
,但是我可以在Freebsd内核中访问sys/malloc.h
。在内核中查找未知类型内存的大小
1
A
回答
1
在Linux内核中,如果你有指向某个虚拟内存,它可以逆转回struct page *
还有struct vmap_area
或struct vm_area_struct
这表明它所指向mmap
-ed区域(从你知道的大小)。
操作系统需要这些类型的反向映射,因为如果没有它们,它将无法执行诸如处理页面错误之类的事情,然后映射内存,然后扩展自动增长映射,如果必要的等等。
如果你怀疑的地址是由vmalloc
(内核自己的分配器内核拥有的虚拟内存)分配的空间,你可以尝试find_vmap_area
其中通过vmalloc
领域的红黑树搜索,并返回一个指向struct vmap_area
。如果在那里找不到地址,那将是空的。
如果您怀疑该地址是常规进程虚拟内存,则find_vma
也许能够找到它。它返回一个struct vma_struct *
指针,如果查找失败,则该指针为null。
这两个结构都为您提供有关包含地址的映射的起始和结束地址的信息。
你不会得到细粒度的信息,比如一个用户空间malloc
块被一个指针引用。
此外,我不认为你可以反转指向从kmalloc
到分配信息的内存的随机地址。
+0
不知道你为什么接受这个,因为你的问题是关于FreeBSD的。 – Kaz
相关问题
- 1. 内核内存转储大小Linux
- 2. 类型和内存分配的大小
- 3. 启动大内核大小时出现未知错误
- 4. 查找表,其内容取决于整数类型的大小
- 5. 如何查找表格的当前大小(在内存中)?
- 6. 如何在内存中查找对象的大小?
- 7. 使用内核的大小
- 8. 在c中动态分配内存与未知类型
- 9. 如何在Unix中查找虚拟内存块大小
- 10. 如何在Java中查找物理内存大小?
- 11. 在24小时内查找最大值
- 12. 查找对内存来说太大的列表的大小?
- 13. 内存大小
- 14. OpenCV卷积内核大小
- 15. Java:找出对象的内存大小?
- 16. ActivePivot:找到当前的内存大小?
- 17. 查找内存中单个对象的大小
- 18. 在CentOS 6.3上查找postgres共享内存段的大小
- 19. Linux内核的虚拟内存大小占用48GB内存,64位机器的大小是多少?
- 20. 如何查找SQL Server中文件组的内容的类型和大小?
- 21. 如何缩小linux内核的大小?
- 22. 在4.x.x内核中找到64位内存的系统调用表内核
- 23. 确定内存中的Fortran派生类型大小
- 24. Android中的字节数据类型内存大小
- 25. 在内核模块中查找目录
- 26. 在CUDA内核中查找三元组
- 27. AxiomSoapMessageCreationException:未知内容类型'application/wsdl + xml'
- 28. 当我们不知道它的大小时如何为类型分配内存?
- 29. 查找内核的内存页面所有权
- 30. 未知的内存泄漏
哪个内核?如何未知?你知道它是否是虚拟内存吗?等 – Kaz
我不能从malloc使用这些函数,因为它在内核中,但我有权访问sys/malloc.h,它是malloc.h的有限版本。这是我使用的Freebsd。它不是虚拟内存,它只是一个用户空间缓冲区。 – lostdong12
@ lostdong12 FreeBSD是否经常拥有物理地址为物理内存的“用户空间缓冲区”? – Kaz