Snoop 进程间通信
Posted
技术标签:
【中文标题】Snoop 进程间通信【英文标题】:Snoop interprocess communications 【发布时间】:2010-11-06 12:39:55 【问题描述】:有没有人尝试过创建进程间通信的日志文件?有人可以就实现这一目标的最佳方法给我一些建议吗?
【问题讨论】:
什么样的沟通方式? TCP 套接字? Unix套接字?总线?共享内存? 谢谢大家。其实我不知道!我想把一张接口卡换成另一张。我希望将 API 调用记录到原始驱动程序并分析输出以了解它的来龙去脉,然后将其转换为另一张卡的 API 网卡控制不是IPC,是在内核里面。 您好,谢谢。这实际上是与科学仪器一起使用的 GPIB 卡,但您是绝对正确的,它可能在内核中。你能帮我改一下我的问题吗?我应该只说“如何记录与内核驱动程序的通信”吗?再次感谢! 我不是内核专家,但我会将问题重新表述为您提出的问题。 【参考方案1】:这个问题不是很清楚,cmets说的不太清楚,但不管怎样……
首先要尝试的两件事是ipcs 和 strace -e trace=ipc。
【讨论】:
不错的工具。我不清楚您将如何使用 ipcs。【参考方案2】:如果你想记录所有的 IPC(看起来很密集),你应该考虑插桩。
他们有很多很好的工具,特别是查看PIN,手册的this section;
在这个例子中,我们展示了如何做 更有选择性的仪器 检查说明。这个工具 生成所有内存的跟踪 程序引用的地址。 这对于调试和 用于模拟数据缓存 处理器。
如果您正在做一些重量级的调整和分析,请查看TAU(调整和分析实用程序)。
【讨论】:
【参考方案3】:与内核驱动程序的通信可以采用多种形式。通常有一个特殊的设备文件用于通信,或者可以有一个特殊的套接字类型,如 NETLINK。如果幸运的话,有一个字符设备,其中 read() 和 write() 是唯一的交互方式 - 如果是这种情况,那么这些调用很容易被各种方法拦截。如果运气不好,很多事情都是用 ioctl 或者更难的东西来完成的。
但是,在使用内核驱动程序进行通信的程序上运行“strace”可以揭示它所做的一切——尽管如果程序恰好有用于通信的库,“ltrace”可能更具可读性。通过将参数调整为“strace”,您可能会得到一个只包含您需要的信息的转储:
首先,只关注调用并尝试找出内核通信的方式 然后,将过滤器添加到 strace 调用以仅记录内核通信调用 最后,确保 strace 记录所有调用的完整字符串,这样您就不必处理截断的数据指向 IPC 调试的答案可能无关紧要,因为与内核的通信几乎与 IPC 没有任何关系(至少与不同的 UNIX IPC 设施无关)。
【讨论】:
以上是关于Snoop 进程间通信的主要内容,如果未能解决你的问题,请参考以下文章