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;
    }
  • 相关阅读:
    JMeter
    MeasureSpec介绍及使用详解
    AS中一些不经常用到的快捷键
    gradle 构建工具,与Ant Maven关系
    关于runOnUiThread()与Handler两种更新UI的方法
    关于new Handler()与new Handler(Looper.getMainLooper())区别
    RTSP协议详解
    overridePendingTransition的简介
    Android获取手机分辨率DisplayMetircs类
    RTSP消息交互过程
  • 原文地址:https://www.cnblogs.com/Proteas/p/3631925.html
Copyright © 2011-2022 走看看