gpt4 book ai didi

c - linux 内存管理 - 如何获得 "Random xxx offset"?

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:44 25 4
gpt4 key购买 nike

我正在研究进程内存管理。

我读了一篇关于进程地址空间布局的文章。

我引用了以下 URL.

processMemlayout

在linux中,start_data、end_data、start_brk、brk等都是struct mm_struct的成员变量。

但是我想知道如何计算Random brk, stack, mmap offset。

这三个值(Random xxx offset)似乎没有在 struct mm_struct 中定义。

是否有任何函数或宏来计算这些值?

我使用的是 linux 内核版本 4.4 和 x86-64 架构。

谢谢。

最佳答案

操作系统已经实现了/proc/< pid >/maps,它显示了该进程的所有 VMA,包括堆栈、堆,当然还有 mmap 化的。

如果你想检查所有这些信息填充的位置,你可以检查内核源代码,相关代码(查找给定 PID 的 VMA)似乎在这里:fs/proc/task_mmu.c .

而且,是的,“[heap]”确实是由上述 src 文件(内核版本 3.10.24)中的代码片段标记的:

fs/proc/task_mmu.c:show_map_vma()

... 
if (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk)
{
name = "[heap]"; goto done; }
...

还有一件事,如果你想检查特定段的起始地址,请检查 mm_struct 是在 .你会得到以下东西:-

struct mm_struct{
......
unsigned long start_code, end_code, start_data, end_data;
unsigned long start_brk, brk, start_stack;
......
}
  1. start_code,end_code代码段的起止地址;

  2. start_data, end_data 数据段的起始地址和结束地址;

  3. start_brk, brk 堆的起止地址;

  4. start_stack 可以预见,堆栈区域的开始;

关于c - linux 内存管理 - 如何获得 "Random xxx offset"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41077209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com