Skip to content

Instantly share code, notes, and snippets.

Created February 20, 2015 01:42

Revisions

  1. @invalid-email-address Anonymous created this gist Feb 20, 2015.
    23 changes: 23 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,23 @@
    #include <unistd.h>
    #include <mach/mach.h>
    #include <mach/mach_vm.h>
    #include <mach-o/dyld.h>

    int
    main (int argc, char * argv[])
    {
    volatile char * library;
    const mach_vm_size_t page_size = getpagesize ();
    const mach_vm_size_t buffer_size = 3 * page_size;
    char buffer[buffer_size];
    mach_vm_size_t result_size;

    library = (char *) _dyld_get_image_header (1);
    mach_vm_protect (mach_task_self (), (mach_vm_address_t) (library + page_size), page_size, FALSE, VM_PROT_READ | VM_PROT_WRITE | VM_PROT_COPY | VM_PROT_EXECUTE);
    library[page_size]++;
    library[page_size]--;
    result_size = 0;
    mach_vm_read_overwrite (mach_task_self (), (mach_vm_address_t) library, buffer_size, (mach_vm_address_t) buffer, &result_size);

    return 0;
    }