示例#1
0
HOOK_DEF(void*, dlopen, const char *filename, int flag) {
    const char *redirect_path = match_redirected_path(filename);
    void *ret = orig_dlopen(redirect_path, flag);
    onSoLoaded(filename, ret);
    LOGD("dlopen : %s, return : %p.", redirect_path, ret);
    FREE(redirect_path, filename);
    return ret;
}
示例#2
0
/*-----------------------------------------------------------------------------
    dlopen - interposer func
-----------------------------------------------------------------------------*/
void * dlopen(const char *pathname, int mode)
{
    if (!orig_dlopen)
        orig_dlopen = (void* (*)(const char*, int))dlsym(RTLD_NEXT, "dlopen");
    //  printf("dlopen: %s\n", pathname);
    void* result = orig_dlopen(pathname, mode);
    if (!no_recurse)
        mvee_refresh_hook_lists();
    return result;
}
示例#3
0
void *
dlopen(const char *filename, int flags)
{
	void *(*orig_dlopen)(const char *, int);
	void *handle = NULL;

	orig_dlopen = _env_dump_resolve_symbol_by_name("dlopen");

	handle = orig_dlopen(filename, flags);
	if (!_env_ignored)
		_dlopen_check_result(handle, filename, flags);

	return handle;
}
示例#4
0
static int
libcrypto_resolve_symbols()
{
	void *(*orig_dlopen)(const char *, int);

	if (handle_libcrypto == NULL) {
		orig_dlopen = _env_dump_resolve_symbol_by_name("dlopen");

		/* Open a local version of the libcrypto */
		handle_libcrypto = orig_dlopen("libcrypto.so",
					       RTLD_LOCAL | RTLD_LAZY);
		if (handle_libcrypto)
			SHA1_local = dlsym(handle_libcrypto, "SHA1");
	}

	return !handle_libcrypto && !SHA1_local;
}
示例#5
0
void *
_env_dump_resolve_local_symbol_by_name(const char *symbol)
{
	static void *(*orig_dlsym)(void *, const char *);
	static void *handle_env_dump;

	if (orig_dlsym == NULL)
		orig_dlsym = _dl_sym(RTLD_NEXT, "dlsym", dlsym);

	if (handle_env_dump == NULL ) {
		void *(*orig_dlopen)(const char *, int);
		char *fullpath = find_Linked_library("env_dump.so");
		orig_dlopen = _dl_sym(RTLD_NEXT, "dlopen", dlsym);
		handle_env_dump = orig_dlopen(fullpath, RTLD_LAZY);
		free(fullpath);
	}

	return orig_dlsym(handle_env_dump, symbol);
}