我有一个未知的void* bufferpointer
。有没有找到缓冲区的内存大小。我无法访问malloc.h
,但我可以访问Freebsd内核中的sys/malloc.h
。
答案 0 :(得分:1)
在Linux内核中,如果你有指向某个虚拟内存的指针,它可以反转回struct page *
以及struct vmap_area
或struct vm_area_struct
,它指示{{1}它指向的ed区域(从中你知道大小)。
操作系统需要这些反向映射,因为如果没有它们,它就不能执行诸如处理页面错误,然后映射内存,然后扩展自动增长映射之类的事情,如果有必要等等。
如果您怀疑地址是由mmap
(内核拥有的内核虚拟内存分配器)分配的空间,您可以尝试vmalloc
搜索红黑树find_vmap_area
个区域,并返回指向vmalloc
的指针。如果在那里找不到地址,那将为null。
如果您怀疑该地址是常规进程虚拟内存,那么struct vmap_area
可能会找到它。它返回一个find_vma
指针,如果查找失败,则为null。
这两个结构都为您提供有关包含地址的映射的起始和结束地址的信息。
您不会获得细粒度的信息,例如指针引用了多大的用户空间struct vma_struct *
块。
此外,我不认为您可以将指向malloc
的内存的随机地址反转为分配信息。