0

我正在编写一个程序来跟踪子进程调用的每个系统调用并确定它的确切内存使用情况(不包括共享内存)。

这是我的计划。

让父进程跟踪子进程,

如果子进程进行系统调用,父进程将收到 SIGTRAP,

然后使用 ptrace(PTRACE_PEEKUSER, child_pid, 4*ORIG_EAX, NULL) 获取系统调用 ID。

当 id 等于 SYS_brk、SYS_sbrk、SYS_mmap2、SYS_mmap、SYS_mremap、SYS_munmap 时,

我能够获取调用参数并计算内存使用量。

但这让我很困扰

  1. 我不确定如何计算。

  2. SYS_mmap2 有超过 6 个参数,我该如何获取呢?

4

1 回答 1

2

要确定 pid 1234 进程的内存使用情况,我建议按顺序读取并解析/proc/1234/mapsor/proc/1234/smaps伪文件。下的其他文件/proc/1234/也可能是相关的(例如/proc/1234/statm/proc/1234/status

从进程内部,您可以读取/proc/self/maps/proc/self/smaps(例如/proc/self/statm/proc/self/status)。

有关详细信息,请阅读proc(5)手册页。

还有pmap命令

于 2012-02-27T17:01:18.287 回答