c - 我们如何区分进程内存的不同部分?

标签 c memory process operating-system xv6

我试图转储进程的内存并区分不同的部分,例如代码页、保护页、堆栈和堆。我可以通过调用添加系统调用来转储进程内存,在这个系统调用中,我使用 memmove 将进程内存转储到缓冲区。然后在我的用户级函数中打印缓冲区。但我无法弄清楚这段内存的不同部分。现在我的初步想法是找到一些特殊的指针来指向这些部分的边界。但我很困惑什么指针可以做到这一点?或者我应该尝试计算这些部分的大小并打印(下一部分是代码/保护页)?我可以确保有一个 4k 页表用于保护页表,但我不知道如何获取其他部分的大小,例如代码页或堆栈。

我还想让我的用户级函数可以通过将 pid 作为参数来转储其他进程的内存,但我很困惑如何开始。如何找到其他进程的页表并将它们输入到我的内核级转储函数中?

最佳答案

你面临的问题是内存就是内存。一个进程可以有多个堆和多个栈。它们只是看起来像内存。

在某些系统上,您可以检查可执行文件以了解应用程序在内存中的结构。然而,现代加载经常随机化内存中进程的加载。

关于c - 我们如何区分进程内存的不同部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47599872/

相关文章:

c - 这相当于 C 中的复合赋值吗?

java - 如何真正对 Java 应用程序的内存使用情况进行基准测试

c++ - 如何使用 fork 和 execv 获取程序的 pid

c - 如何根据用户的输入计算账单?

C编程: Dereferencing pointer to incomplete type error

matlab - 如何在 MATLAB 中加载大文件(~150MB)?

multithreading - 堆栈内存分配

bash - 如何杀死shell的所有子进程?

c# - 如何获取真正运行的进程名?

c - 在 char 设备中,我应该把 ioread 放在哪里?