#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. Java和Flex积分误差(一个)

    1.错误叙述性说明 at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency( ...

  2. 词组缩写(isalpha()的应用)

    Problem Description 定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写.比如,C语言里常用的EOF就是end of file的缩写.   Input 输入的第一行是一个整数 ...

  3. jquery.validate1.13

    jquery.validate新的写法(jquery.validate1.13.js) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  4. linux_增加用户组_删除用户

    添加账号组 /usr/sbin/groupadd iknow 添加账号 /usr/sbin/useradd  -g iknow -d /home/iknow/ iknow 更改密码 passwd 选项 ...

  5. Oracle 指数 一个简短的引论

    1 索引创建语法: CREATE UNIUQE | BITMAP INDEX <schema>.<index_name>       ON <schema>.< ...

  6. 私人定制javascript中对象小知识点(Only For Me)

    废话不多讲,先上笑话,然后再,.看懂这个的说明你的节操已经不再了. 晚饭后去理发店理发...割了吧...老板问我怎么剪,我悠悠的来一句往帅了剪...高潮往往令人想不到....旁边一在焗油烫头发的大妈说 ...

  7. 多线程编程 (1) -NSThread

    每个iOS应用程序都有个专门用来更新显示UI界面.处理用户触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就是将那 ...

  8. cocos2d-x-lua基础系列教程三(lua面向对象)

    lua 类 Lua 事实上不是面向对象语言 我们能够用table 模拟仿照面向对象编程 lua 中的this 类似的是self  table 也具有生命周期 2,使用table  创建类 projed ...

  9. Appium Android Bootstrap源码分析之命令解析执行

    通过上一篇文章<Appium Android Bootstrap源码分析之控件AndroidElement>我们知道了Appium从pc端发送过来的命令如果是控件相关的话,最终目标控件在b ...

  10. Yii2中如何使用CodeCeption

    Yii2和CodeCeption CodeCeption是一个全栈的PHP测试框架,关于CodeCeption的介绍见:CodeCeption官方文档. Yii2官方增加了对CodeCeption的支 ...