diff options
author | Memphiz <memphis@machzwo.de> | 2013-02-20 19:13:25 +0100 |
---|---|---|
committer | S. Davilla <davilla@4pi.com> | 2013-02-25 12:53:38 -0500 |
commit | 6485d75ff3ad16bbfa6f2ab1318ab99894954080 (patch) | |
tree | 7760f26029a7e5201f516634ece0cf7fcc9a4b50 | |
parent | 7e62ff2f6a4c0f50b3ac3716f4594145985fcafd (diff) |
- added substrate.h - needed for hooking methods and ivars at runtime
-rw-r--r-- | xbmc/osx/atv2/substrate.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/xbmc/osx/atv2/substrate.h b/xbmc/osx/atv2/substrate.h new file mode 100644 index 0000000000..3cdb88b4bb --- /dev/null +++ b/xbmc/osx/atv2/substrate.h @@ -0,0 +1,31 @@ +#include <string.h> +#include <sys/types.h> +#include <objc/runtime.h> +#ifdef __cplusplus +#define _default(x) = x +extern "C" { +#else +#define _default(x) +#endif +typedef const void *MSImageRef; +void MSHookFunction(void *symbol, void *replace, void **result); +void *MSFindSymbol(const void *image, const char *name); +MSImageRef MSGetImageByName(const char *file); + +#ifdef __APPLE__ +#ifdef __arm__ +IMP MSHookMessage(Class _class, SEL sel, IMP imp, const char *prefix _default(NULL)); +#endif +void MSHookMessageEx(Class _class, SEL sel, IMP imp, IMP *result); +#endif +#ifdef __cplusplus +} +#endif + +template <typename Type_> Type_ &MSHookIvar(id self, const char *name) { + Ivar ivar(class_getInstanceVariable(object_getClass(self), name)); + void *pointer(ivar == NULL ? NULL : reinterpret_cast<char *>(self) + ivar_getOffset(ivar)); + return *reinterpret_cast<Type_ *>(pointer); +} + + |