
Untitled
By: a guest on
May 2nd, 2012 | syntax:
None | size: 1.60 KB | hits: 71 | expires: Never
#include <mach/mach_init.h>
#include <mach/vm_map.h>
#include <mach/vm_region.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
int main() {
void *mem = malloc(getpagesize() + 15);
void *ptr = (void *)(((uintptr_t)mem+15) & ~ 0x0F);
vm_size_t vmsize = getpagesize();
vm_address_t address = (uintptr_t)ptr / getpagesize() * getpagesize();
mach_msg_type_number_t info_count = VM_REGION_BASIC_INFO_COUNT;
vm_region_basic_info_data_t info;
vm_region_flavor_t flavor = VM_REGION_BASIC_INFO;
memory_object_name_t object;
task_t the_task = mach_task_self();
kern_return_t kr;
kr = vm_protect(
the_task,
(vm_address_t) address,
vmsize,
FALSE,
VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE);
if (kr != KERN_SUCCESS)
printf("vm_protect() failed\n");
else
printf("vm_protect() success\n");
kr = vm_region(
the_task,
&address,
&vmsize,
VM_REGION_BASIC_INFO,
&info,
&info_count,
&object);
if (kr != KERN_SUCCESS)
printf("vm_region() failed\n");
else
printf("vm_region() success\n");
printf("%c%c%c %c%c%c\n",
(info.protection & VM_PROT_READ) ? 'r' : '-',
(info.protection & VM_PROT_WRITE) ? 'w' : '-',
(info.protection & VM_PROT_EXECUTE) ? 'x' : '-',
(info.max_protection & VM_PROT_READ) ? 'r' : '-',
(info.max_protection & VM_PROT_WRITE) ? 'w' : '-',
(info.max_protection & VM_PROT_EXECUTE) ? 'x' : '-');
}