#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 ;
} 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 ;
} NSLog(@"all is well here shipmate");
return ;
} 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 ;
} 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 ;
} NSLog(@"all is well here shipmate");
return ;
} 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 ;
}

vm_write的更多相关文章

  1. 《Linux内核设计与实现》读书笔记(十五)- 进程地址空间(kernel 2.6.32.60)

    进程地址空间也就是每个进程所使用的内存,内核对进程地址空间的管理,也就是对用户态程序的内存管理. 主要内容: 地址空间(mm_struct) 虚拟内存区域(VMA) 地址空间和页表 1. 地址空间(m ...

  2. Linux LSM(Linux Security Modules) Hook Technology

    目录 . 引言 . Linux Security Module Framework Introduction . LSM Sourcecode Analysis . LSMs Hook Engine: ...

  3. linux内核数据结构学习总结

    目录 . 进程相关数据结构 ) struct task_struct ) struct cred ) struct pid_link ) struct pid ) struct signal_stru ...

  4. 【转载】linux内核笔记之进程地址空间

    原文:linux内核笔记之进程地址空间 进程的地址空间由允许进程使用的全部线性地址组成,在32位系统中为0~3GB,每个进程看到的线性地址集合是不同的. 内核通过线性区的资源(数据结构)来表示线性地址 ...

  5. 内核源码分析之进程地址空间(基于3.16-rc4)

    所谓进程的地址空间,指的就是进程的虚拟地址空间.当创建一个进程时,内核会为该进程分配一个线性的地址空间(虚拟地址空间),有了虚拟地址空间后,内核就可以通过页表将进程的物理地址地址空间映射到其虚拟地址空 ...

  6. linux内核分析之进程地址空间管理

    1.struct task_struct 进程内核栈是操作系统为管理每一个进程而分配的一个4k或者8k内存大小的一片内存区域,里面存放了一个进程的所有信息,它能够完整的描述一个正在执行的程序:它打开的 ...

  7. 通过WriteProcessMemory改写进程的内存

    http://www.cnblogs.com/feiyucq/archive/2009/10/21/1587628.html 以PROCESS_ALL_ACCESS权限打开进程以后既能够使用ReadP ...

  8. Linux了解进程的地址空间

    供Linux了解虚拟内存,非常好的引导了.原文链接:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=26683523&i ...

  9. 把握linux内核设计思想(十三):内存管理之进程地址空间

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet.文章仅供学习交流,请勿用于商业用途] 进程地址空间由进程可寻址的虚拟内存组成,Linux 的虚拟地址空间为0~4G字 ...

随机推荐

  1. Codeforces 10C Digital Root 法冠军

    主题链接:点击打开链接 #include<stdio.h> #include<iostream> #include<string.h> #include<se ...

  2. SQL ROW_NUMBER() OVER函数的基本用法用法

    语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW ...

  3. Linux下df与du两个命令的差别?

    Linux下df与du两个命令的差别? 一.df显示文件系统的使用情况,与du比較,就是更全盘化. 最经常使用的就是 df -T,显示文件系统的使用情况并显示文件系统的类型. 举比例如以下: [roo ...

  4. Introducing Visual Studio’s Emulator for Android

    visual studio 2015支持Android开发了. Microsoft released Visual Studio 2015 Preview this week and with it ...

  5. 将firebug安装在chrome浏览器上

    一直很喜欢火狐浏览器,原因是火狐的插件很喜欢,几天突然发现firebug这个插件能够安装在chrome浏览器上,震惊,更震惊的是这个好似已经很长时间了,而我猜发现. 具体的具体页面地址是 http:/ ...

  6. VisualStudio2012轻松把JSON数据转换到POCO的代码

    原文:VisualStudio2012轻松把JSON数据转换到POCO的代码       在Visual Studio 2012中轻松把JSON数据转换到POCO的代码,首先你需要安装Web Esse ...

  7. 仿JQ插件

    <!DOCTYPE html> <html> <head>     <title></title>     <style type=& ...

  8. Python_生成測试数据

    本文出自:http://blog.csdn.net/svitter 生成1~10的随机数1000个: import random fp = open("test", 'w'); f ...

  9. DB2数据类型

    DB2数据库的内置数据类型主要分成数值型(numeric).字符串型(character string).图形字符串(graphic string).二进制字符串型(binary string)或日期 ...

  10. JS判断字符串是否全为中文

    //第一种代码(全为中文则返回"true",不全为中文则返回"false"): <script language="javascript&quo ...