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;
    }
  • 相关阅读:
    Decode函数说明以及纵横表的转化
    数据库系统实现学习笔记二(数据库关系建模)--by穆晨
    数据库系统实现学习笔记一(数据库需求与ER建模)--by穆晨
    数据库—锁以及死锁的处理
    关系型数据库和非关系型数据库的区别
    数据库的一些基本概念(键、事务)
    ns2.34 移植MFLOOD协议时出现的问题
    第6章 函数
    第4章 表达式
    字符数组 & 字符串
  • 原文地址:https://www.cnblogs.com/Proteas/p/3631925.html
Copyright © 2011-2022 走看看