• vm_write


    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <mach/mach.h>
    
    int write32(vm_address_t offset, unsigned int data) {
      data = CFSwapInt32(data);
      kern_return_t err;
      mach_port_t port = mach_task_self();
      err = vm_protect(port, (vm_address_t) offset, sizeof(data), NO,
                       VM_PROT_READ | VM_PROT_WRITE | VM_PROT_COPY);
      if (err != KERN_SUCCESS) {
        NSLog(@"prot error: %s 
    ", mach_error_string(err));
        return 0;
      }
    
      vm_write(port, (vm_address_t) offset, (vm_address_t) & data, sizeof(data));
      err = vm_protect(port, (vm_address_t) offset, sizeof(data), NO,
                       VM_PROT_READ | VM_PROT_EXECUTE);
      if (err != KERN_SUCCESS) {
        NSLog(@"prot error: %s 
    ", mach_error_string(err));
        return 0;
      }
    
      NSLog(@"all is well here shipmate");
      return 1;
    }
    
    int write16(vm_address_t offset, unsigned short data) {
      data = CFSwapInt16(data);
      kern_return_t err;
      mach_port_t port = mach_task_self();
      err = vm_protect(port, (vm_address_t) offset, sizeof(data), NO,
                       VM_PROT_READ | VM_PROT_WRITE | VM_PROT_COPY);
    
      if (err != KERN_SUCCESS) {
        NSLog(@"prot error: %s 
    ", mach_error_string(err));
        return 0;
      }
    
      vm_write(port, (vm_address_t) offset, (vm_address_t) & data, sizeof(data));
      err = vm_protect(port, (vm_address_t) offset, sizeof(data), NO,
                       VM_PROT_READ | VM_PROT_EXECUTE);
      if (err != KERN_SUCCESS) {
        NSLog(@"prot error: %s 
    ", mach_error_string(err));
        return 0;
      }
    
      NSLog(@"all is well here shipmate");
      return 1;
    }
    
    bool getType(unsigned int x) {
      int a = x & 0xffff8000;
      int b = a + 0x00008000;
      int c = b & 0xffff7fff;
    
      return c; //true = 32bit false = 16bit
    }
    
    int writeData(vm_address_t offset, unsigned int data) {
      if (getType(data)) {
        write32(offset, data);
      } else {
        write16(offset, (unsigned short) data);
      }
    
      return 0;
    }
  • 相关阅读:
    # MYSQL 8.0 远程 clone
    MySQL-07-备份恢复
    迁移表空间
    2. MYSQL 数据库的介绍安装
    Percona Xrabackup 应用
    4.2.5 案例:通过mysqldump全备+binlog实现PIT数据恢复
    Mysql Innodb 表碎片整理
    关于_vsnprintf
    算法:华为面试代码题
    platform设备驱动框架
  • 原文地址:https://www.cnblogs.com/Proteas/p/3631925.html
Copyright © 2020-2023  润新知