int find_name(pid_t pid, const char *name, const char *libn,
              unsigned long *addr) {
    struct mm mm[1000] = { 0 };
    unsigned long libcaddr;
    int nmm;
    char libc[1024] = { 0 };
    symtab_t s;

    if (0 > load_memmap(pid, mm, &nmm)) {
        ALOGD("cannot read memory map\n");
        return -1;
    }
    if (0
        > find_libname((char *) libn, (char *) libc, sizeof(libc),
                       &libcaddr, mm, nmm)) {
        ALOGD("cannot find lib: %s\n", libn);
        return -1;
    }
    //ALOGD("lib: >%s<\n", libc)
    s = load_symtab(libc);
    if (!s) {
        ALOGD("cannot read symbol table\n");
        return -1;
    }
    if (0 > lookup_func_sym(s, (char *) name, addr)) {
        ALOGD("cannot find function: %s\n", name);
        return -1;
    }
    *addr += libcaddr;
    return 0;
}
Exemple #2
0
int find_name(pid_t pid, char *name, char *libn, unsigned long *addr)
{
	struct mm mm[250];
	unsigned long libcaddr;
	int nmm;
	char libc[256];
	symtab_t s;
	int load_memmap_return;


	load_memmap_return =  load_memmap(pid, mm, &nmm);

	if (0 > load_memmap_return) {
		//printf("cannot read memory map\n");
		return load_memmap_return;
	}
	if (0 > find_libname(libn, libc, sizeof(libc), &libcaddr, mm, nmm)) {
		log("cannot find libc\n");
		return -2;
	}
	s = load_symtab(libc);
	if (!s) {
		//printf("cannot read symbol table\n");
		return -3;
	}
	if (0 > lookup_func_sym(s, name, addr)) {
		//printf("cannot find %s\n", name);
		return -4;
	}
	*addr += libcaddr;
	return 0;
}
Exemple #3
0
static int
find_name(pid_t pid, char *name, unsigned long *addr)
{
	struct mm mm[1000];
	unsigned long libcaddr;
	int nmm;
	char libc[256];
	symtab_t s;

	if (0 > load_memmap(pid, mm, &nmm)) {
		printf("cannot read memory map\n");
		return -1;
	}
	if (0 > find_libc(libc, sizeof(libc), &libcaddr, mm, nmm)) {
		printf("cannot find libc\n");
		return -1;
	}
	s = load_symtab(libc);
	if (!s) {
		printf("cannot read symbol table\n");
		return -1;
	}
	if (0 > lookup_func_sym(s, name, addr)) {
		printf("cannot find %s\n", name);
		return -1;
	}
	*addr += libcaddr;
	return 0;
}
int find_name(pid_t pid, char *name, char *libn, unsigned long *addr)
{
	struct mm mm[250];
	unsigned long libcaddr;
	int nmm;
	char libc[512];
	symtab_t s;
	int load_memmap_return;
	int tmp;


	load_memmap_return =  load_memmap(pid, mm, &nmm);

	if (0 > load_memmap_return) {
		//printf("cannot read memory map\n");
		return load_memmap_return;
	}
	if (0 > find_libname(libn, libc, sizeof(libc), &libcaddr, mm, nmm)) {
/* #ifdef DEBUG_UTIL  */
/* 	  log("cannot find %s\n", libn); */
/* #endif */
	  return -2;
	}
	s = load_symtab(libc);
	if (!s) {
		//printf("cannot read symbol table\n");
		return -3;
	}

/* #ifdef DEBUG_UTIL  */
/* 	log("pid %d, name %s, libn %s\n", pid, name, libn); */
/* #endif */

	if (0 > lookup_func_sym(s, name, addr)) {

/* #ifdef DEBUG_UTIL  */
/* 	  log("fail\n"); */
/* 	  log("find_name: cannot find %s\n", name); */
/* #endif */
	  return -4;

	}


/* #ifdef DEBUG_UTIL */
/* 	log("not fail %p %d\n", addr, *addr); */
/* #endif */
	
	//tmp = 4;

	*addr += libcaddr;

	return 0;
}