/******************************************************************************* mach_inject.h Copyright (c) 2003-2005 Jonathan 'Wolf' Rentzsch: Some rights reserved: ***************************************************************************/ /***************************************************************************//** @mainpage mach_inject @author Jonathan 'Wolf' Rentzsch: This package, coded in C to the Mach API, allows you to "inject" code into an arbitrary process. "Injection" means both 1) copying over the necessary code into the target's address space and 2) remotely creating a new thread to execute the code. ***************************************************************************/ #ifndef _mach_inject_ #define _mach_inject_ #include #include #include #include // for ptrdiff_t #ifdef __cplusplus extern "C" { #endif #define err_threadEntry_image_not_found (err_local|1) #define INJECT_ENTRY injectEntry #define INJECT_ENTRY_SYMBOL "injectEntry" typedef void (*mach_inject_entry)( ptrdiff_t codeOffset, void *paramBlock, size_t paramSize, void* dummy_pthread_data ); /***************************************************************************//** Starts executing threadEntry in a new thread in the process specified by targetProcess. @param threadEntry -> Required pointer to injected thread's entry point. @param paramBlock -> Optional pointer to block of memory to pass to the injected thread. @param paramSize -> Optional size of paramBlock. @param targetProcess -> Required target process ID. @param stackSize -> Optional stack size of threadEntry's thread. Set to zero for default (currently 8K usable). @result <- mach_error_t ***************************************************************************/ mach_error_t mach_inject( const mach_inject_entry threadEntry, const void *paramBlock, size_t paramSize, pid_t targetProcess, vm_size_t stackSize ); /***************************************************************************//** Given a pointer, returns its Mach-O image and image size. @param pointer -> Required pointer. @param image <- Optional returned pointer to image (really a mach_header). @param size <- Optional returned size of the image. @param jumpTableOffset <- Optional returned offset of jump table within image (useful on intel) @param jumpTableSize <- Optional returned size of jump table (useful on intel) @result <- mach_error_t ***************************************************************************/ mach_error_t machImageForPointer( const void *pointer, const void **image, unsigned long *size, unsigned int *jumpTableOffset, unsigned int *jumpTableSize ); #ifdef __cplusplus } #endif #endif // _mach_inject_