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 \n", 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 \n", 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 \n", 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 \n", 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;
}

 

转载于:https://www.cnblogs.com/Proteas/p/3631925.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值