KTL 用C++14写公式的K线工具 - 0.9.3版 (二)

当前版本,使用wechat的mmmojo。导出其c接口abi并使用。所以是十分底层的支持。不支持mojom层,不支持上层的远程对象调用,远程服务调用。c接口abi的好处。轻便兼容性好。对接的子服务进程,可以用msvc也可以用gcc,可以是x86也可以是x64。

三种主要的通讯手段,MessagePipe, DataPipe, SharedBuffer。配合高效的Arm等机制。具体请看逆向WeChat(五,mmmojo, wmpfmojo)

本patch完整包括如何使用abi进行IPC通讯的程序框架。完整展示所有运作机理。

 

因为所有代码以插件方式,运行在宿主KTL程序,所以点击child按键后,会打开一个子进程宿主KTL程序,然后需要手动加载插件运行子服务。(主要原因,KTL设计,不主动加载任何外在代码运行,除非手动点击加载。)

因为是非IPCZ的mojo,只支持一种星形网络拓扑,并且是只有一个主心即父进程。MessagePipe是两个进程最基本的通讯手段。两个进程需要建立DataPipe,或者传递SharedBuffer,都必须通过MessagePipe完成。本patch代码不包含孤岛连接,通过孤岛连接的两个mojo终端(进程),只能使用MessagePipe通讯手段。

下面示图,父进程20708跟子进程29900之间,建立DataPipe,传递SharedBuffer。

子服务或子进程之间要通讯,可以通过父进程作为中间人建立DataPipe。DataPipe,是可以作为Mojo句柄,附加到MessagePipe消息传递给目标终端。流程如下,子进程29900先跟父进程20708建立DataPipe。父进程作为comsumer,然后将consumer传递给另一个子进程31392。最后子进程299000能够发送消息到兄弟进程31392。

上图对一个句柄右键打开功能菜单。它们分别是MessagePipe, DataPipeConsumer, DataPipeProducer, Trap,SharedBuffer。

另外,DataPipe跟SharedBuffer都基于共享内存。DataPipe是流方式访问,SharedBuffer则是随机直接访问。要用哪一种根据现场需要。你不能两次踏进同一条河流,但可以无数次踏进同一块地。然而一块地会有大小限制,一条河流却可以无限。

posted on 2025-04-07 23:10  bbqz007  阅读(59)  评论(0)    收藏  举报