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; }
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; }
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; }
int find_libbase(pid_t pid, 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(libn, libc, sizeof(libc), &libcaddr, mm, nmm)) { ALOGD("cannot find lib\n"); return -1; } *addr = libcaddr; return 0; }