Skip to content

dyld DYLD_INTERPOSE marco

hewigovens edited this page Apr 15, 2014 · 4 revisions

LD_PRELOAD library interposition(cf unix and linux.) equivalent.

from http://opensource.apple.com/source/dyld/dyld-210.2.3/include/mach-o/dyld-interposing.h

#if !defined(_DYLD_INTERPOSING_H_)
#define _DYLD_INTERPOSING_H_

/*
 *  Example:
 *
 *  static
 *  int
 *  my_open(const char* path, int flags, mode_t mode)
 *  {
 *    int value;
 *    // do stuff before open (including changing the arguments)
 *    value = open(path, flags, mode);
 *    // do stuff after open (including changing the return value(s))
 *    return value;
 *  }
 *  DYLD_INTERPOSE(my_open, open)
 */

#define DYLD_INTERPOSE(_replacement,_replacee) \
   __attribute__((used)) static struct{ const void* replacement; const void* replacee; } _interpose_##_replacee \
            __attribute__ ((section ("__DATA,__interpose"))) = { (const void*)(unsigned long)&_replacement, (const void*)(unsigned long)&_replacee };

#endif

##Examples

#####Back to Hook & Inject methods

Clone this wiki locally