【问题标题】:Seeing available dictionaries in a XPC service daemon?在 XPC 服务守护进程中查看可用的字典?
【发布时间】:2012-08-27 23:33:47
【问题描述】:

在支持 xpc 的 osx 机器上运行着许多启动守护进程和代理。要查看它们是否支持 IPC over xpc,我会查找任何 xpc 函数,尤其是 xpc_connection_create。我的理解是,为了与这些进程对话,必须通过 xpc api 制作字典,然后将其传递给广告的 com.* 服务。除了传入随机的东西,有什么方法可以查看每个进程的字典参数应该是什么?

如果我有任何上述逻辑错误,请随时纠正。任何建议或意见都会有所帮助,谢谢。

【问题讨论】:

    标签: objective-c c osx-mountain-lion inter-process-communicat xpc


    【解决方案1】:

    XPC 连接用于创建与 XPC 服务的连接或与另一个发布 mach 服务的进程进行 IPC。

    "xpc_connection_create" 创建用于向连接的其他对等方发送消息的连接。应该定义通信的协议,因此,通常两个对等点属于同一方。

    换句话说,如果您不拥有这些守护程序/代理,并且没有关于与它通信的协议的公共文档(无论是否通过 XPC)。用这些流程进行 IPC 几乎是不可能的。

    【讨论】:

    • XPC通信和字典中使用的字符串,是在编译时序列化还是从二进制文件中提取出来?
    • 不确定在编译时序列化是什么意思。 XPC 连接消息始终是一个 XPC 对象,它是消息的 XPC 序列化。您定义通信协议(在编译时),但序列化本身发生在运行时。
    • 感谢您的帮助。尝试分析服务器代码以查找反序列化字符串的比较似乎对此不切实际
    【解决方案2】:

    上面的答案充其量是不正确的,最坏的情况是错误的。

    虽然两个对等点确实应该由同一方拥有,但事实并非如此。许多 Apple 的守护程序确实通过 XPC 进行通信,唯一的问题是,它们是否可以从沙箱的范围内访问。一个惊人的数字是。几乎没有“几乎不可能”——非常有可能,而且对于 Apple 文档之外的调试和调整非常有用。

    要获取协议,您可以创建一个库来插入 xpc_connection_send_message_[with_reply/syc],然后使用 DYLD_INSERT_LIBRARIES。通过这种方式,您将获得完整的字典转储。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 2015-03-24
      相关资源
      最近更新 更多