监控线程的 Mach 异常

xnu 采用了微内核的架构,

因此 Mach Message 与各模块都有着千丝万缕的联系,

异常也不例外。

如果想详细的学习 Mach Exception 是如何工作的,

其与 Unix Signal 的关系,

大家可以去阅读:

《Mac OS X Internals: A Systems Approach》

《Mac OS X and iOS Internals: To The Apple's Core》


这里给出一个监控某个线程 Mach Exception 的代码,

主要用于在发生异常时分析其他线程的状态,

并且可以用来构建基于异常的反调试机制。


#import <mach/mach.h>
#import <mach/port.h>
#import <mach/exception.h>
#import <mach/exception_types.h>
#import <mach/task.h>
#import <stdio.h>
#import <pthread/pthread.h>

mach_port_t gExceptionPort = 0;

static void *ExceptionHandler(void *ignored)
{
    mach_msg_return_t rc;
    printf("--------->Exc handler listening\n");
    
    typedef struct {
        mach_msg_header_t Head;
        mach_msg_body_t msgh_body;
        mach_msg_port_descriptor_t thread;
        mach_msg_port_descriptor_t task;
        NDR_record_t NDR;
        exception_type_t exception;
        mach_msg_type_number_t codeCnt;
        integer_t code[2];
        int flavor;
        mach_msg_type_number_t old_stateCnt;
        natural_t old_state[144];
    } Request;
    
    Request exc;
    for(;;) {
        rc = mach_msg(&exc.Head,
                      MACH_RCV_MSG | MACH_RCV_LARGE,
                      0,
                      sizeof(Request),
                      gExceptionPort,
                      MACH_MSG_TIMEOUT_NONE,
                      MACH_PORT_NULL);
        
        if(rc != MACH_MSG_SUCCESS) {
            return 0;
        };
        
        printf("--------->Got Message\n");
        exit(1);
    }
}

static void CatchMACHExceptions()
{
    kern_return_t rc = 0;
    exception_mask_t excMask = EXC_MASK_BAD_ACCESS; // !!!这里只是监控了异常读写,实际使用时需要根据需要进行修改!!!
    
    rc = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &gExceptionPort);
    if (rc != KERN_SUCCESS) {
        fprintf(stderr, "------->Fail to allocate exception port\n");
        exit(-1);
    }
    
    rc = mach_port_insert_right(mach_task_self(), gExceptionPort, gExceptionPort, MACH_MSG_TYPE_MAKE_SEND);
    if (rc != KERN_SUCCESS) {
        fprintf(stderr, "-------->Fail to insert right");
        exit(-2);
    }
    
    rc = thread_set_exception_ports(mach_thread_self(), excMask, gExceptionPort, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE);
    if (rc != KERN_SUCCESS) {
        fprintf(stderr, "-------->Fail to  set exception\n");
        exit(-3);
    }
    
    pthread_t thread;
    pthread_create(&thread, NULL, ExceptionHandler, NULL);
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Mach CNC STM是一个非常流行的数控机床控制系统。它由三个组成部分组成:Mach3,CNC Controller和STM32控制器。 Mach3是一款功能强大的计算机软件,用于控制数控机床的运动。它具有用户友好的界面和丰富的功能,可以处理多轴运动,支持各种运动控制卡和驱动器。Mach3可以接收G代码和M代码,这是一种常用的数控编程语言,用于指导机床的运动和操作。 CNC Controller是一个硬件设备,它与计算机和机床连接,起到数据传输和控制信号传递的作用。它负责将计算机上的指令转化为机床上的实际运动,通过驱动器控制电机的转动。CNC Controller还有一些输入输出接口,可以连接不同的传感器和执行器,实现对机床的全面控制。 STM32控制器是一款微控制器,具有高性能和低功耗的特点。它通常用于替代传统的运动控制卡,为数控机床提供更强大的计算和控制能力。STM32控制器可以实时地解析和处理G代码,实现高速、精准的数控运动。 总之,Mach CNC STM是一种先进的数控机床控制系统,它的组成部分包括Mach3软件、CNC Controller硬件和STM32控制器。它能够实现数控机床的高精度运动和复杂加工,广泛应用于各种制造行业。 ### 回答2: Mach CNC STM是一种机械控制系统,它结合了Mach控制软件、CNC控制硬件和STM(即步进电机)驱动器。这个系统主要用于控制和驱动数控机床。 Mach控制软件是一款强大的通用机床控制软件,它可以在计算机上运行,并通过与其他硬件组件的连接来实现对机床的控制。这个软件提供了丰富的功能和灵活性,可以支持各种不同类型的机床,如车床、铣床、钻床等。 CNC控制硬件是Mach CNC STM系统的关键部分,它包括了各种输入输出接口、控制卡和运动控制器。这些硬件组件与Mach控制软件相互配合,实现对机床的调度、运动轨迹控制和信号输入输出等功能。 STM是指步进电机,它是一种常用的驱动器类型,用于控制机床的各个轴向运动。步进电机通过电信号驱动来实现微小步进运动,从而准确地控制机床的位置和速度。STM驱动器与CNC控制硬件相连,通过接收来自硬件的指令来驱动步进电机的运动。 总的来说,Mach CNC STM系统是一种先进的数控机床控制系统,它通过软件、硬件和驱动器的完美结合,实现了对机床的高精度运动控制。这个系统不仅具备灵活的功能和丰富的扩展性,而且操作简便,适用于各种不同规格和类型的机床加工工艺。 ### 回答3: "Mach CNC STM" 是一个功能强大的软件及硬件系统,用于控制计算机数控(CNC)机床以进行精密加工和制造。 "Mach" 是该系统的英文缩写,意味着机械自动化(Machinery Automation Control Hardware)。它具有友好的用户界面和强大的实时控制功能。使用Mach,操作者可以通过计算机指令来控制和监控CNC机床的运行。这使得加工过程更加精确和高效。 "CNC" 意味着计算机数控(Computer Numerical Control),是一种通过计算机指令控制机床运动的自动化技术。与传统的手工操作相比,CNC技术能够提供更高的精度和效率。"Mach CNC STM" 系统提供了一种方便和可靠的方法来实现CNC机床的自动化操作。 "STM" 是"Mach CNC STM"系统的特定功能之一。它代表着步进电机(Stepper Motor)技术。步进电机是一种特殊的电机类型,可实现精确的位置控制。"Mach CNC STM" 系统通过使用STM技术,可以实现更准确、更灵活的CNC机床控制,确保加工过程的精度和稳定性。 总之,"Mach CNC STM" 是一种先进的软硬件系统,用于控制CNC机床进行高精度的加工和制造。通过该系统,操作者可以通过计算机指令来实现对机床的全面控制和监控。这种系统的应用使得加工过程更加精确、高效,并显著提高了生产效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值