能力值:
( LV1,RANK:0 )
|
-
-
2 楼
学到了
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
写的很好
|
能力值:
( LV1,RANK:0 )
|
-
-
4 楼
感谢分享
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
学习
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
6666
|
能力值:
( LV1,RANK:0 )
|
-
-
7 楼
666
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
tql
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
好文章,干货
|
能力值:
( LV1,RANK:0 )
|
-
-
10 楼
666
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
学习学习
|
能力值:
( LV1,RANK:0 )
|
-
-
12 楼
get_linker_solist_head(); // sub_2082C()有对应微代码吗?想了解一下怎么获取solist head
|
能力值:
( LV3,RANK:30 )
|
-
-
13 楼
mb_cqcnvzkn
get_linker_solist_head(); // sub_2082C()有对应微代码吗?想了解一下怎么获取solist head
void * get_linker_solist_head() { long linker_base = 0; FILE *fp = NULL; unsigned char *buf = NULL; size_t size = 0; unsigned char *symtab = NULL; unsigned char *strtab = NULL; int sym_count = 0; linker_base = sub_20B04("/system/bin/linker64"); if (!linker_base) linker_base = sub_20B04("/bionic/bin/linker64"); if (!linker_base) linker_base = sub_20B04("/apex/com.android.runtime/bin/linker64"); if (!linker_base) return NULL; fp = fopen("/system/bin/linker64", "rb"); if (!fp) return NULL; fseek(fp, 0, SEEK_END); size = ftell(fp); fseek(fp, 0, SEEK_SET); buf = (unsigned char *)malloc(size); if (!buf) { fclose(fp); return NULL; } memset(buf, 0, size); fread(buf, 1, size, fp); fclose(fp); // 这里应该是 ELF header / section header 解析 // 反编译结果把 buf 当成 FILE* 访问,实际不是 FILE parse_elf_find_symtab_and_strtab(buf, &symtab, &strtab, &sym_count); if (!symtab || !strtab || sym_count <= 0) { free(buf); return NULL; } for (int i = 0; i < sym_count; i++) { Elf64_Sym *sym = (Elf64_Sym *)(symtab + i * sizeof(Elf64_Sym)); const char *name = (const char *)(strtab + sym->st_name); if (!strstr(name, "solist")) continue; if ((sym->st_info & 0xF) != 1) // STT_OBJECT continue; if (*off_47FB8 == 27 && strlen(name) >= 0x28) continue; uint64_t st_value = sym->st_value; free(buf); if (!st_value) return NULL; return *(void **)(linker_base + st_value); } free(buf); return NULL; }
|
能力值:
( LV1,RANK:0 )
|
-
-
14 楼
nuoen
void * get_linker_solist_head()
{
long linker_base = 0;
FILE *fp = NULL;
unsigned ch ...
# readelf -s linker64 |grep solist 4818: 000000000012b218 8 OBJECT LOCAL DEFAULT 19 __dl__ZL6solist 4860: 00000000000b2d30 20 FUNC LOCAL HIDDEN 11 __dl__Z17solist_[...] 4861: 00000000000b2e0c 12 FUNC LOCAL HIDDEN 11 __dl__Z15solist_[...] 4862: 00000000000b2e18 12 FUNC LOCAL HIDDEN 11 __dl__Z17solist_[...] 4864: 00000000000b2e24 12 FUNC LOCAL HIDDEN 11 __dl__Z15solist_[...] 4865: 00000000000b2d44 200 FUNC LOCAL HIDDEN 11 __dl__Z20solist_[...] 原来是通过符号表去找solist的地址。
|
能力值:
( LV1,RANK:0 )
|
-
-
15 楼
666
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
感谢分享
|
能力值:
( LV1,RANK:0 )
|
-
-
17 楼
66666
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
666
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
可以将so文件发出来下吗
|
能力值:
( LV1,RANK:0 )
|
-
-
20 楼
感谢分享
|
能力值:
( LV1,RANK:0 )
|
-
-
21 楼
6666
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
感谢分享
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
请在 Telegram 上联系我,有个重要的 2000 美元任务。 Telegram:@dlopenext
|
能力值:
( LV1,RANK:0 )
|
-
-
24 楼
666
|
能力值:
( LV1,RANK:0 )
|
-
-
25 楼
学废了~
|
|
|