下面是我努力的细节,它们仅与我的问题部分相关:
在内核版本为 2.6.37.6 的嵌入式 linux (arm) 上的 /proc/pid/maps 映射中,第一行的偏移量(可执行文件本身的代码段)似乎是错误的。
我总是看到这样的一行:
00008000-00061000 r-xp 00000000 00:10 8073509 myprog
(范围是进程地址空间中的地址,权限后面的数字应该是文件的偏移量)
但是,实际偏移量似乎是 0x8000 - 至少,使用此假设的解释看起来更可信。nm 告诉我 myprog 在 0x8000 之前没有代码,所以这也是有道理的。
有人可以指点我在哪里可以找到更多关于此的信息吗?我什么也找不到。
我在做什么:我编写了一个工具来解释 mtrace() 生成的日志,找到可能的内存泄漏,并将它们追溯到分配数据的代码。对于后一步,我从日志中获取指令指针,在 /proc/pid/maps 的运行时映射中查找它以找到有问题的可执行文件或库,并使用它们的 nm-map 来查找实际函数做分配。
这对除可执行文件本身之外的所有内容都具有吸引力。