美文网首页iOS
Mach message结构浅谈

Mach message结构浅谈

作者: 木易林1 | 来源:发表于2019-07-12 09:56 被阅读0次

基础消息格式:(消息头和消息体)

typedef struct{
    mach_msg_header_t       header;
    mach_msg_body_t         body;
} mach_msg_base_t;

消息头mach_msg_header_t

typedef struct{
    mach_msg_bits_t       msgh_bits;
    mach_msg_size_t       msgh_size;
    mach_port_t           msgh_remote_port;
    mach_port_t           msgh_local_port;
    mach_port_name_t      msgh_voucher_port;
    mach_msg_id_t         msgh_id;
} mach_msg_header_t;

消息体mach_msg_body_t

typedef struct{
    mach_msg_size_t msgh_descriptor_count;
} mach_msg_body_t;

消息尾mach_msg_trailer_t

typedef struct{
    mach_msg_trailer_type_t       msgh_trailer_type;
    mach_msg_trailer_size_t       msgh_trailer_size;
} mach_msg_trailer_t;

消息描述

typedef union{
    mach_msg_port_descriptor_t            port;
    mach_msg_ool_descriptor_t             out_of_line;
    mach_msg_ool_ports_descriptor_t       ool_ports;
    mach_msg_type_descriptor_t            type;
} mach_msg_descriptor_t;

mach_msg_port_descriptor_t (结构如下):
typedef struct{
    mach_port_t                   name;
// Pad to 8 bytes everywhere except the K64 kernel where mach_port_t is 8 bytes
    mach_msg_size_t               pad1;
    unsigned int                  pad2 : 16;
    mach_msg_type_name_t          disposition : 8;
    mach_msg_descriptor_type_t    type : 8;
} mach_msg_port_descriptor_t;


mach_msg_ool_descriptor_t (结构如下):
typedef struct{
    void*                         address;
#if !defined(__LP64__)
    mach_msg_size_t               size;
#endif
    boolean_t                     deallocate: 8;
    mach_msg_copy_options_t       copy: 8;
    unsigned int                  pad1: 8;
    mach_msg_descriptor_type_t    type: 8;
#if defined(__LP64__)
    mach_msg_size_t               size;
#endif
} mach_msg_ool_descriptor_t;



mach_msg_ool_ports_descriptor_t (结构如下):
typedef struct{
    void*                         address;
#if !defined(__LP64__)
    mach_msg_size_t               count;
#endif
    boolean_t                     deallocate: 8;
    mach_msg_copy_options_t       copy: 8;
    mach_msg_type_name_t          disposition : 8;
    mach_msg_descriptor_type_t    type : 8;
#if defined(__LP64__)
    mach_msg_size_t               count;
#endif
} mach_msg_ool_ports_descriptor_t;


mach_msg_type_descriptor_t (结构如下):
typedef struct{
    natural_t                     pad1;
    mach_msg_size_t               pad2;
    unsigned int                  pad3 : 24;
    mach_msg_descriptor_type_t    type : 8;
} mach_msg_type_descriptor_t;

Mach是iOS的XNU内核中最为核心的部分,称为核心中的核心。
Mach中,所有东西都是通过自己的对象实现的。进程、线程和虚拟内存都是对象,所有的对象都有自己的属性。Mach采用消息传递的方式实现对象与对象之间的通信。Mach对象不能直接调用另一个对象,只能传递消息,源对象发送一条消息,这条消息加入到目标对象的队列中等待处理。如果产生应答,则通过另一条消息传递回去,消息遵从FIFO方式。

相关文章

  • Mach message结构浅谈

    基础消息格式:(消息头和消息体) 消息头mach_msg_header_t 消息体mach_msg_body_t ...

  • 浅谈 SDK 开发(一)五种 Mach-O 类型的凛冬之战

    浅谈 SDK 开发(一)五种 Mach-O 类型的凛冬之战 浅谈 SDK 开发(一)五种 Mach-O 类型的凛冬之战

  • 性能优化

    启动性能分析 Mach-o Mach-o文件的类型: Mach的结构 1:Header2:Load Command...

  • Mach-O文件格式

    Mach-O文件结构 Mach-O(Mach Object)是一种基于Mach内核的文件格式。iOS系统生成的可执...

  • 四 iOS逆向- Mach-O

    Mach-O文件类型 Mach-O文件基本结构 通用二进制文件 Mach-O是Mach object的缩写,是Ma...

  • Mach-O二进制文件结构及其应用

    1. Mach-O 文件结构 Mach-O(Mach Object) 文件格式是 OS X 与 iOS 系统上的可...

  • Mach-O文件结构

    主要内容: 理解可执行文件 理解Mach-O文件 Mach-O文件结构 Mach Header Load Comm...

  • 浅谈Mach Exceptions

    前言 大家都可能都在自己的应用中集成Crash收集服务,通常使用NSSetUncaughtExceptionHan...

  • Mach-O

    开头 研究Mach-O结构有段时间,尝试了解Mach-O结构体对fishhook实现原理的理解有帮助,看了很多分析...

  • 6.MachO

    MachO文件 MachO文件 MachO文件结构 DYLD Mach-O其实是Mach Object文件格式的缩...

网友评论

    本文标题:Mach message结构浅谈

    本文链接:https://www.haomeiwen.com/subject/cowskctx.html