我尝试在我的嵌入式Linux(ARM)上使用内核版本2.6.37.6中的/proc/pid/maps映射,但似乎第一行(可执行文件本身的代码段)的偏移量有误。
我总是看到这样一行:
00008000-00061000 r-xp 00000000 00:10 8073509 myprog
(范围是进程地址空间中的地址,权限后面的数字应该是文件中的偏移量)
然而,实际的偏移量似乎是0x8000-至少,使用这个假设的解释更加可信。 nm向我展示myprog在0x8000之前没有代码,所以这也是说得通的。
有人可以给我指点一下,告诉我在哪里可以找到更多关于这个问题的信息吗?我找不到任何东西。
我正在做什么:我编写了一个工具来解释由mtrace()生成的日志,找到可能的内存泄漏,并将其追溯到分配数据的代码。对于后一步,我从日志中获取指令指针,在/proc/pid/maps中查找运行时映射,以找到相关的可执行文件或库,并使用它们的nm-map来找到实际执行分配操作的函数。这个方法对除了可执行文件本身之外的所有情况都非常有效。