From e582e5ee1ada9a3d24b4eca5a954ca326c54872a Mon Sep 17 00:00:00 2001 From: comex Date: Sat, 10 Jan 2015 14:00:50 -0500 Subject: nah - this is nice looking but nonportable --- lib/substitute.h | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 lib/substitute.h (limited to 'lib/substitute.h') diff --git a/lib/substitute.h b/lib/substitute.h new file mode 100644 index 0000000..cadfa80 --- /dev/null +++ b/lib/substitute.h @@ -0,0 +1,39 @@ +/* + libsubstitute - https://github.com/comex/substitute + This header file is in the public domain. +*/ + +#pragma once + +// TODO add numbers +enum { + SUBSTITUTE_OK = 0, + + SUBSTITUTE_ERR_MODULE_NOT_FOUND, +}; + +int substitute_hook_function(void *function, void *replacement, int options, void *result); + +/* Darwin specific */ +#ifdef __APPLE__ +#include +#ifdef __LP64__ +typedef struct nlist_64 substitute_nlist; +#else +typedef struct nlist substitute_nlist; +#endif + +/* Look up private symbols in an image currently loaded into the process. + * Vaguely inspired by nlist(3), but somewhat different. + * + * @filename the executable/library path (c.f. dyld(3)) + * @names an array of symbol names to search for + * @nlist an array of substitute_nlist *, one per name; on return, each entry + * will be a pointer into the symbol table for that image, or NULL if the + * symbol wasn't found + * @count number of names + * + * @return SUBSTITUTE_OK or SUBSTITUTE_ERR_MODULE_NOT_FOUND + */ +int substitute_nlist(const char *filename, const char **names, + substitute_nlist **nlist, size_t count); -- cgit v1.2.3