zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    数列分段 II
    Best Cow Fences
    愤怒的牛
    linux 查看文件
    糖果传递
    BL刀片更换主板设置raid
    glance启停
    depot制作
    刀片服务器密码过期, console无法登录解决方案
    DP无法删除失效的多路径链路方法
  • 原文地址:https://www.cnblogs.com/Proteas/p/3631925.html
Copyright © 2011-2022 走看看