Add support for the android-specific ELF relocations ##bin

This commit is contained in:
pancake 2026-08-21 17:59:50 +02:00
parent 4f0fef3d1b
commit b81521065a
6 changed files with 489 additions and 3 deletions

View file

@ -527,6 +527,9 @@ static void set_default_value_dynamic_info(ELFOBJ *eo) {
di->dt_ppc64_glink = R_BIN_ELF_ADDR_MAX;
di->dt_aarch64_pac_plt = false;
di->dt_crel = R_BIN_ELF_ADDR_MAX;
di->dt_android_rel = R_BIN_ELF_ADDR_MAX;
di->dt_android_relsz = 0;
di->dt_android_is_rela = false;
di->dt_bind_now = false;
di->dt_flags = R_BIN_ELF_XWORD_MAX;
di->dt_flags_1 = R_BIN_ELF_XWORD_MAX;
@ -647,6 +650,18 @@ static void fill_dynamic_entries(ELFOBJ *eo, ut64 loaded_offset, ut64 dyn_size)
case DT_CREL:
di->dt_crel = d.d_un.d_ptr;
break;
case DT_ANDROID_REL:
di->dt_android_rel = d.d_un.d_ptr;
di->dt_android_is_rela = false;
break;
case DT_ANDROID_RELA:
di->dt_android_rel = d.d_un.d_ptr;
di->dt_android_is_rela = true;
break;
case DT_ANDROID_RELSZ:
case DT_ANDROID_RELASZ:
di->dt_android_relsz = d.d_un.d_val;
break;
case DT_BIND_NOW:
di->dt_bind_now = true;
break;
@ -3460,9 +3475,29 @@ static size_t get_num_relocs_mips_got(ELFOBJ *eo) {
return di->dt_mips_symtabno - di->dt_mips_gotsym;
}
// the APS2 header stores the total reloc count as its first sleb128 field
static size_t get_num_relocs_android(ELFOBJ *eo) {
const RBinElfDynamicInfo *di = &eo->dyn_info;
if (di->dt_android_rel == R_BIN_ELF_ADDR_MAX || di->dt_android_relsz < 5) {
return 0;
}
ut64 paddr = Elf_(v2p) (eo, di->dt_android_rel);
if (paddr == UT64_MAX) {
return 0;
}
ut8 hdr[16] = {0};
int n = r_buf_read_at (eo->b, paddr, hdr, sizeof (hdr));
if (n < 5 || memcmp (hdr, "APS2", 4)) {
return 0;
}
st64 count = 0;
read_sleb128 (hdr + 4, n - 4, &count, NULL);
return (count > 0)? (size_t)count: 0;
}
static size_t get_num_relocs_dynamic(ELFOBJ *eo) {
const RBinElfDynamicInfo *di = &eo->dyn_info;
size_t res = 0;
size_t res = get_num_relocs_android (eo);
if (di->dt_relaent) {
res += di->dt_relasz / di->dt_relaent;
@ -3549,6 +3584,109 @@ static size_t get_num_relocs_approx(ELFOBJ *eo) {
return total;
}
// Android packed relocations (APS2): a delta+group encoded RELA/REL stream.
// See bionic's packed_reloc_iterator for the reference decoder.
#define ANDROID_GROUPED_BY_INFO_FLAG 1
#define ANDROID_GROUPED_BY_OFFSET_DELTA_FLAG 2
#define ANDROID_GROUPED_BY_ADDEND_FLAG 4
#define ANDROID_GROUP_HAS_ADDEND_FLAG 8
static size_t populate_relocs_record_from_android(ELFOBJ *eo, size_t pos, size_t num_relocs) {
const RBinElfDynamicInfo *di = &eo->dyn_info;
if (di->dt_android_rel == R_BIN_ELF_ADDR_MAX || di->dt_android_relsz < 5) {
return pos;
}
ut64 paddr = Elf_(v2p) (eo, di->dt_android_rel);
if (paddr == UT64_MAX) {
return pos;
}
const int size = (int)di->dt_android_relsz;
ut8 *buf = malloc (size);
if (!buf) {
return pos;
}
if (r_buf_read_at (eo->b, paddr, buf, size) != size || memcmp (buf, "APS2", 4)) {
free (buf);
return pos;
}
const bool is_rela = di->dt_android_is_rela;
int cur = 4;
st64 v = 0;
// pop one sleb128 out of the stream, jumping to `done` when it runs dry
#define POP(dst) do { \
int _rb = 0; \
if (cur >= size) { goto done; } \
read_sleb128 (buf + cur, size - cur, &v, &_rb); \
if (_rb < 1) { goto done; } \
cur += _rb; (dst) = v; \
} while (0)
st64 relocation_count = 0, r_offset = 0, r_addend = 0, idx = 0;
POP (relocation_count);
POP (r_offset);
while (idx < relocation_count) {
st64 group_size = 0, group_flags = 0, group_offset_delta = 0, group_info = 0;
POP (group_size);
POP (group_flags);
const bool g_by_offset = group_flags & ANDROID_GROUPED_BY_OFFSET_DELTA_FLAG;
const bool g_by_info = group_flags & ANDROID_GROUPED_BY_INFO_FLAG;
const bool g_by_addend = group_flags & ANDROID_GROUPED_BY_ADDEND_FLAG;
const bool g_has_addend = group_flags & ANDROID_GROUP_HAS_ADDEND_FLAG;
if (g_by_offset) {
POP (group_offset_delta);
}
if (g_by_info) {
POP (group_info);
}
if (g_has_addend && g_by_addend) {
st64 delta = 0;
POP (delta);
r_addend += delta;
}
st64 g;
for (g = 0; g < group_size && idx < relocation_count; g++, idx++) {
if (pos >= num_relocs) {
goto done;
}
if (g_by_offset) {
r_offset += group_offset_delta;
} else {
st64 delta = 0;
POP (delta);
r_offset += delta;
}
st64 info = group_info;
if (!g_by_info) {
POP (info);
}
if (g_has_addend) {
if (!g_by_addend) {
st64 delta = 0;
POP (delta);
r_addend += delta;
}
} else {
r_addend = 0;
}
RBinElfReloc *reloc = RVecRBinElfReloc_emplace_back (&eo->g_relocs);
memset (reloc, 0, sizeof (*reloc));
reloc->mode = is_rela? DT_RELA: DT_REL;
reloc->offset = r_offset;
reloc->rva = r_offset;
reloc->sym = ELF_R_SYM ((Elf_(Xword))info);
reloc->type = ELF_R_TYPE ((Elf_(Xword))info);
reloc->addend = is_rela? r_addend: 0;
int index = (int)RVecRBinElfReloc_length (&eo->g_relocs) - 1;
ht_uu_insert (eo->rel_cache, reloc->sym + 1, index + 1);
fix_rva_and_offset_exec_file (eo, reloc);
pos++;
}
}
done:
#undef POP
free (buf);
return pos;
}
static size_t populate_relocs_record_from_dynamic(ELFOBJ *eo, size_t pos, size_t num_relocs) {
const RBinElfDynamicInfo *di = &eo->dyn_info;
const size_t size = get_size_rel_mode (di->dt_pltrel);
@ -3693,6 +3831,12 @@ static ut64 get_next_not_analysed_offset(ELFOBJ *eo, size_t section_vaddr, size_
&& gvaddr >= di->dt_relr && gvaddr < di->dt_relr + di->dt_relrsz) {
return di->dt_relr + di->dt_relrsz - section_vaddr;
}
// the APS2 packed stream is decoded from the dynamic pass, so a .rela.dyn
// section overlapping it must be skipped here or it reparses as raw RELA
if (di->dt_android_rel != R_BIN_ELF_ADDR_MAX
&& gvaddr >= di->dt_android_rel && gvaddr < di->dt_android_rel + di->dt_android_relsz) {
return di->dt_android_rel + di->dt_android_relsz - section_vaddr;
}
return offset;
}
@ -3821,6 +3965,7 @@ static bool populate_relocs_record(ELFOBJ *eo) {
}
size_t i = 0;
i = populate_relocs_record_from_android (eo, i, num_relocs);
i = populate_relocs_record_from_dynamic (eo, i, num_relocs);
i = populate_relocs_record_from_mips_got (eo, i, num_relocs);
i = populate_relocs_record_from_section (eo, i, num_relocs);

View file

@ -112,6 +112,9 @@ typedef struct Elf_(dynamic_info) {
Elf_(Xword) dt_mips_symtabno;
Elf_(Addr) dt_ppc64_glink; /* PPC64 ELFv1: DT_PPC64_GLINK lazy PLT resolver anchor */
Elf_(Addr) dt_crel; // Address of Crel relocs
Elf_(Addr) dt_android_rel; // Address of Android packed (APS2) relocs
Elf_(Xword) dt_android_relsz; // Size in bytes of the packed reloc stream
bool dt_android_is_rela; // true for DT_ANDROID_RELA, false for DT_ANDROID_REL
bool dt_bind_now;
bool dt_aarch64_pac_plt; /* AArch64 -z pac-plt: 24 byte plt entries */
Elf_(Xword) dt_flags;

View file

@ -882,6 +882,11 @@ typedef struct {
#define DT_RELR 36
#define DT_RELRENT 37
#define DT_NUM 38 /* Number used */
/* Android packed relocations (APS2 format) */
#define DT_ANDROID_REL 0x6000000f
#define DT_ANDROID_RELSZ 0x60000010
#define DT_ANDROID_RELA 0x60000011
#define DT_ANDROID_RELASZ 0x60000012
#define DT_LOOS 0x6000000d /* Start of OS-specific */
#define DT_HIOS 0x6ffff000 /* End of OS-specific */
#define DT_LOPROC 0x70000000 /* Start of processor-specific */

View file

@ -12,6 +12,286 @@ CMDS=ir
EXPECT=<<EOF
vaddr paddr type ntype name
---------------------------------------
0x0000d008 0x0000d008 ADD_64 1027 0x000093a8
0x0000d010 0x0000d010 ADD_64 1027 0x000093b0
0x0000d018 0x0000d018 ADD_64 1027 0x000002cc
0x0000d020 0x0000d020 ADD_64 1027 0x0000a2c0
0x0000d028 0x0000d028 ADD_64 1027 0x00009d15
0x0000d030 0x0000d030 ADD_64 1027 0x000003e4
0x0000d038 0x0000d038 ADD_64 1027 0x0000a3f5
0x0000d040 0x0000d040 ADD_64 1027 0x000094b0
0x0000d048 0x0000d048 ADD_64 1027 0x00000458
0x0000d050 0x0000d050 ADD_64 1027 0x0000a599
0x0000d058 0x0000d058 ADD_64 1027 0x00008eab
0x0000d060 0x0000d060 ADD_64 1027 0x00000468
0x0000d068 0x0000d068 ADD_64 1027 0x000098ae
0x0000d070 0x0000d070 ADD_64 1027 0x000089a9
0x0000d078 0x0000d078 ADD_64 1027 0x0000047c
0x0000d080 0x0000d080 ADD_64 1027 0x000094b4
0x0000d088 0x0000d088 ADD_64 1027 0x0000acc2
0x0000d090 0x0000d090 ADD_64 1027 0x00000498
0x0000d098 0x0000d098 ADD_64 1027 0x0000a403
0x0000d0a0 0x0000d0a0 ADD_64 1027 0x00008ff8
0x0000d0a8 0x0000d0a8 ADD_64 1027 0x00000578
0x0000d0b0 0x0000d0b0 ADD_64 1027 0x0000a41b
0x0000d0b8 0x0000d0b8 ADD_64 1027 0x0000acc2
0x0000d0c0 0x0000d0c0 ADD_64 1027 0x0000060c
0x0000d0c8 0x0000d0c8 ADD_64 1027 0x00008660
0x0000d0d0 0x0000d0d0 ADD_64 1027 0x00008eab
0x0000d0d8 0x0000d0d8 ADD_64 1027 0x000006d8
0x0000d0e0 0x0000d0e0 ADD_64 1027 0x000097f3
0x0000d0e8 0x0000d0e8 ADD_64 1027 0x00008eab
0x0000d0f0 0x0000d0f0 ADD_64 1027 0x000006ec
0x0000d0f8 0x0000d0f8 ADD_64 1027 0x00008675
0x0000d100 0x0000d100 ADD_64 1027 0x00008810
0x0000d108 0x0000d108 ADD_64 1027 0x00000700
0x0000d110 0x0000d110 ADD_64 1027 0x000098bf
0x0000d118 0x0000d118 ADD_64 1027 0x00008eab
0x0000d120 0x0000d120 ADD_64 1027 0x000007dc
0x0000d128 0x0000d128 ADD_64 1027 0x00009273
0x0000d130 0x0000d130 ADD_64 1027 0x0000abb5
0x0000d138 0x0000d138 ADD_64 1027 0x000007f0
0x0000d140 0x0000d140 ADD_64 1027 0x00008c68
0x0000d148 0x0000d148 ADD_64 1027 0x00008eab
0x0000d150 0x0000d150 ADD_64 1027 0x00000808
0x0000d158 0x0000d158 ADD_64 1027 0x00008686
0x0000d160 0x0000d160 ADD_64 1027 0x0000abb5
0x0000d168 0x0000d168 ADD_64 1027 0x0000081c
0x0000d170 0x0000d170 ADD_64 1027 0x0000a2ca
0x0000d178 0x0000d178 ADD_64 1027 0x000089b0
0x0000d180 0x0000d180 ADD_64 1027 0x00000834
0x0000d188 0x0000d188 ADD_64 1027 0x00008c7a
0x0000d190 0x0000d190 ADD_64 1027 0x0000a2e0
0x0000d198 0x0000d198 ADD_64 1027 0x0000090c
0x0000d1a0 0x0000d1a0 ADD_64 1027 0x0000aa2b
0x0000d1a8 0x0000d1a8 ADD_64 1027 0x0000a742
0x0000d1b0 0x0000d1b0 ADD_64 1027 0x00000e54
0x0000d1b8 0x0000d1b8 ADD_64 1027 0x000091a2
0x0000d1c0 0x0000d1c0 ADD_64 1027 0x000094cb
0x0000d1c8 0x0000d1c8 ADD_64 1027 0x0000113c
0x0000d1d0 0x0000d1d0 ADD_64 1027 0x00008dbf
0x0000d1d8 0x0000d1d8 ADD_64 1027 0x00008eb0
0x0000d1e0 0x0000d1e0 ADD_64 1027 0x00001160
0x0000d1e8 0x0000d1e8 ADD_64 1027 0x0000a42f
0x0000d1f0 0x0000d1f0 ADD_64 1027 0x000098d0
0x0000d1f8 0x0000d1f8 ADD_64 1027 0x00001184
0x0000d200 0x0000d200 ADD_64 1027 0x0000882a
0x0000d208 0x0000d208 ADD_64 1027 0x00009d19
0x0000d210 0x0000d210 ADD_64 1027 0x0000119c
0x0000d218 0x0000d218 ADD_64 1027 0x0000a43d
0x0000d220 0x0000d220 ADD_64 1027 0x0000acc9
0x0000d228 0x0000d228 ADD_64 1027 0x000011c4
0x0000d230 0x0000d230 ADD_64 1027 0x000094d4
0x0000d238 0x0000d238 ADD_64 1027 0x00009e36
0x0000d240 0x0000d240 ADD_64 1027 0x00001548
0x0000d248 0x0000d248 ADD_64 1027 0x0000a750
0x0000d250 0x0000d250 ADD_64 1027 0x0000908c
0x0000d258 0x0000d258 ADD_64 1027 0x000016dc
0x0000d260 0x0000d260 ADD_64 1027 0x00008eb9
0x0000d268 0x0000d268 ADD_64 1027 0x00008695
0x0000d270 0x0000d270 ADD_64 1027 0x00001724
0x0000d278 0x0000d278 ADD_64 1027 0x00008dd3
0x0000d280 0x0000d280 ADD_64 1027 0x00009f72
0x0000d288 0x0000d288 ADD_64 1027 0x00001748
0x0000d290 0x0000d290 ADD_64 1027 0x0000a75e
0x0000d298 0x0000d298 ADD_64 1027 0x00009f72
0x0000d2a0 0x0000d2a0 ADD_64 1027 0x00001860
0x0000d2a8 0x0000d2a8 ADD_64 1027 0x00009098
0x0000d2b0 0x0000d2b0 ADD_64 1027 0x00009f72
0x0000d2b8 0x0000d2b8 ADD_64 1027 0x00001924
0x0000d2c0 0x0000d2c0 ADD_64 1027 0x0000a1c0
0x0000d2c8 0x0000d2c8 ADD_64 1027 0x00009d22
0x0000d2d0 0x0000d2d0 ADD_64 1027 0x00001a3c
0x0000d2d8 0x0000d2d8 ADD_64 1027 0x00009e53
0x0000d2e0 0x0000d2e0 ADD_64 1027 0x00009d22
0x0000d2e8 0x0000d2e8 ADD_64 1027 0x00001b6c
0x0000d2f0 0x0000d2f0 ADD_64 1027 0x0000a788
0x0000d2f8 0x0000d2f8 ADD_64 1027 0x00009b9e
0x0000d300 0x0000d300 ADD_64 1027 0x00001c74
0x0000d308 0x0000d308 ADD_64 1027 0x0000869e
0x0000d310 0x0000d310 ADD_64 1027 0x0000980a
0x0000d318 0x0000d318 ADD_64 1027 0x00001c90
0x0000d320 0x0000d320 ADD_64 1027 0x0000a5a8
0x0000d328 0x0000d328 ADD_64 1027 0x000098d0
0x0000d330 0x0000d330 ADD_64 1027 0x00001d34
0x0000d338 0x0000d338 ADD_64 1027 0x00009f93
0x0000d340 0x0000d340 ADD_64 1027 0x00009d41
0x0000d348 0x0000d348 ADD_64 1027 0x00001d4c
0x0000d350 0x0000d350 ADD_64 1027 0x0000972d
0x0000d358 0x0000d358 ADD_64 1027 0x000089b8
0x0000d360 0x0000d360 ADD_64 1027 0x00002520
0x0000d368 0x0000d368 ADD_64 1027 0x0000aa42
0x0000d370 0x0000d370 ADD_64 1027 0x000098d6
0x0000d378 0x0000d378 ADD_64 1027 0x000025c8
0x0000d380 0x0000d380 ADD_64 1027 0x0000aa42
0x0000d388 0x0000d388 ADD_64 1027 0x00009ba5
0x0000d390 0x0000d390 ADD_64 1027 0x00002e34
0x0000d398 0x0000d398 ADD_64 1027 0x00008c8b
0x0000d3a0 0x0000d3a0 ADD_64 1027 0x000094ed
0x0000d3a8 0x0000d3a8 ADD_64 1027 0x00002e94
0x0000d3b0 0x0000d3b0 ADD_64 1027 0x00008c8b
0x0000d3b8 0x0000d3b8 ADD_64 1027 0x00008ad8
0x0000d3c0 0x0000d3c0 ADD_64 1027 0x00003738
0x0000d3c8 0x0000d3c8 ADD_64 1027 0x0000900e
0x0000d3d0 0x0000d3d0 ADD_64 1027 0x000098f8
0x0000d3d8 0x0000d3d8 ADD_64 1027 0x000037a0
0x0000d3e0 0x0000d3e0 ADD_64 1027 0x000086b6
0x0000d3e8 0x0000d3e8 ADD_64 1027 0x00009d41
0x0000d3f0 0x0000d3f0 ADD_64 1027 0x00003e20
0x0000d3f8 0x0000d3f8 ADD_64 1027 0x00009913
0x0000d400 0x0000d400 ADD_64 1027 0x000098d6
0x0000d408 0x0000d408 ADD_64 1027 0x00004584
0x0000d410 0x0000d410 ADD_64 1027 0x0000a44f
0x0000d418 0x0000d418 ADD_64 1027 0x0000a07c
0x0000d420 0x0000d420 ADD_64 1027 0x00004d68
0x0000d428 0x0000d428 ADD_64 1027 0x00009d60
0x0000d430 0x0000d430 ADD_64 1027 0x00009b9e
0x0000d438 0x0000d438 ADD_64 1027 0x00004d80
0x0000d440 0x0000d440 ADD_64 1027 0x000091b3
0x0000d448 0x0000d448 ADD_64 1027 0x000098d0
0x0000d450 0x0000d450 ADD_64 1027 0x00004d9c
0x0000d458 0x0000d458 ADD_64 1027 0x0000abbb
0x0000d460 0x0000d460 ADD_64 1027 0x00008ed2
0x0000d468 0x0000d468 ADD_64 1027 0x00004db4
0x0000d470 0x0000d470 ADD_64 1027 0x0000abd3
0x0000d478 0x0000d478 ADD_64 1027 0x000089c4
0x0000d480 0x0000d480 ADD_64 1027 0x00004de8
0x0000d488 0x0000d488 ADD_64 1027 0x0000a927
0x0000d490 0x0000d490 ADD_64 1027 0x00009510
0x0000d498 0x0000d498 ADD_64 1027 0x00004ec0
0x0000d4a0 0x0000d4a0 ADD_64 1027 0x0000a5bc
0x0000d4a8 0x0000d4a8 ADD_64 1027 0x0000a1dc
0x0000d4b0 0x0000d4b0 ADD_64 1027 0x00004ef0
0x0000d4b8 0x0000d4b8 ADD_64 1027 0x0000a1e6
0x0000d4c0 0x0000d4c0 ADD_64 1027 0x0000a1f7
0x0000d4c8 0x0000d4c8 ADD_64 1027 0x00004fb4
0x0000d4d0 0x0000d4d0 ADD_64 1027 0x0000a1e6
0x0000d4d8 0x0000d4d8 ADD_64 1027 0x0000a937
0x0000d4e0 0x0000d4e0 ADD_64 1027 0x00005050
0x0000d4e8 0x0000d4e8 ADD_64 1027 0x0000a1e6
0x0000d4f0 0x0000d4f0 ADD_64 1027 0x000089cd
0x0000d4f8 0x0000d4f8 ADD_64 1027 0x0000515c
0x0000d500 0x0000d500 ADD_64 1027 0x0000a082
0x0000d508 0x0000d508 ADD_64 1027 0x00008c9f
0x0000d510 0x0000d510 ADD_64 1027 0x000053ec
0x0000d518 0x0000d518 ADD_64 1027 0x0000a082
0x0000d520 0x0000d520 ADD_64 1027 0x0000a79d
0x0000d528 0x0000d528 ADD_64 1027 0x000054fc
0x0000d530 0x0000d530 ADD_64 1027 0x0000a2f1
0x0000d538 0x0000d538 ADD_64 1027 0x0000a7b0
0x0000d540 0x0000d540 ADD_64 1027 0x00005684
0x0000d548 0x0000d548 ADD_64 1027 0x0000883b
0x0000d550 0x0000d550 ADD_64 1027 0x0000a464
0x0000d558 0x0000d558 ADD_64 1027 0x000058ec
0x0000d560 0x0000d560 ADD_64 1027 0x00008aea
0x0000d568 0x0000d568 ADD_64 1027 0x00008edb
0x0000d570 0x0000d570 ADD_64 1027 0x00005920
0x0000d578 0x0000d578 ADD_64 1027 0x00009d76
0x0000d580 0x0000d580 ADD_64 1027 0x0000a46d
0x0000d588 0x0000d588 ADD_64 1027 0x00005954
0x0000d590 0x0000d590 ADD_64 1027 0x0000aa56
0x0000d598 0x0000d598 ADD_64 1027 0x0000a476
0x0000d5a0 0x0000d5a0 ADD_64 1027 0x00005984
0x0000d5a8 0x0000d5a8 ADD_64 1027 0x000091d0
0x0000d5b0 0x0000d5b0 ADD_64 1027 0x0000a1dc
0x0000d5b8 0x0000d5b8 ADD_64 1027 0x000059b4
0x0000d5c0 0x0000d5c0 ADD_64 1027 0x0000a47f
0x0000d5c8 0x0000d5c8 ADD_64 1027 0x00009fa7
0x0000d5d0 0x0000d5d0 ADD_64 1027 0x00005a78
0x0000d5d8 0x0000d5d8 ADD_64 1027 0x00009a87
0x0000d5e0 0x0000d5e0 ADD_64 1027 0x00008edb
0x0000d5e8 0x0000d5e8 ADD_64 1027 0x00005bb0
0x0000d5f0 0x0000d5f0 ADD_64 1027 0x000090ba
0x0000d5f8 0x0000d5f8 ADD_64 1027 0x00009289
0x0000d600 0x0000d600 ADD_64 1027 0x00005be4
0x0000d608 0x0000d608 ADD_64 1027 0x0000a301
0x0000d610 0x0000d610 ADD_64 1027 0x0000a202
0x0000d618 0x0000d618 ADD_64 1027 0x00005d6c
0x0000d620 0x0000d620 ADD_64 1027 0x0000abe8
0x0000d628 0x0000d628 ADD_64 1027 0x0000a7bc
0x0000d630 0x0000d630 ADD_64 1027 0x00005dac
0x0000d638 0x0000d638 ADD_64 1027 0x00008ee4
0x0000d640 0x0000d640 ADD_64 1027 0x00008df1
0x0000d648 0x0000d648 ADD_64 1027 0x00005df0
0x0000d650 0x0000d650 ADD_64 1027 0x000090cb
0x0000d658 0x0000d658 ADD_64 1027 0x0000a09a
0x0000d660 0x0000d660 ADD_64 1027 0x00005e0c
0x0000d668 0x0000d668 ADD_64 1027 0x000092b5
0x0000d670 0x0000d670 ADD_64 1027 0x0000a0a2
0x0000d678 0x0000d678 ADD_64 1027 0x00005e4c
0x0000d680 0x0000d680 ADD_64 1027 0x0000ace5
0x0000d688 0x0000d688 ADD_64 1027 0x00009748
0x0000d690 0x0000d690 ADD_64 1027 0x00006488
0x0000d698 0x0000d698 ADD_64 1027 0x00009e6d
0x0000d6a0 0x0000d6a0 ADD_64 1027 0x00009518
0x0000d6a8 0x0000d6a8 ADD_64 1027 0x000066d4
0x0000d6b0 0x0000d6b0 ADD_64 1027 0x0000a20a
0x0000d6b8 0x0000d6b8 ADD_64 1027 0x00009518
0x0000d6c0 0x0000d6c0 ADD_64 1027 0x000066f4
0x0000d6c8 0x0000d6c8 ADD_64 1027 0x00008afb
0x0000d6d0 0x0000d6d0 ADD_64 1027 0x000098d0
0x0000d6d8 0x0000d6d8 ADD_64 1027 0x00006714
0x0000d6e0 0x0000d6e0 ADD_64 1027 0x00009a9a
0x0000d6e8 0x0000d6e8 ADD_64 1027 0x000098d0
0x0000d6f0 0x0000d6f0 ADD_64 1027 0x0000672c
0x0000d6f8 0x0000d6f8 ADD_64 1027 0x00009ab1
0x0000d700 0x0000d700 ADD_64 1027 0x00008cb0
0x0000d708 0x0000d708 ADD_64 1027 0x00006744
0x0000d710 0x0000d710 ADD_64 1027 0x00008efc
0x0000d718 0x0000d718 ADD_64 1027 0x000089db
0x0000d720 0x0000d720 ADD_64 1027 0x000068d4
0x0000d728 0x0000d728 ADD_64 1027 0x00009d87
0x0000d730 0x0000d730 ADD_64 1027 0x00008b11
0x0000d738 0x0000d738 ADD_64 1027 0x00006a64
0x0000d740 0x0000d740 ADD_64 1027 0x000089f5
0x0000d748 0x0000d748 ADD_64 1027 0x00009520
0x0000d750 0x0000d750 ADD_64 1027 0x00006c08
0x0000d758 0x0000d758 ADD_64 1027 0x0000a222
0x0000d760 0x0000d760 ADD_64 1027 0x00009020
0x0000d768 0x0000d768 ADD_64 1027 0x00006dac
0x0000d770 0x0000d770 ADD_64 1027 0x000086ca
0x0000d778 0x0000d778 ADD_64 1027 0x0000acfb
0x0000d780 0x0000d780 ADD_64 1027 0x00006edc
0x0000d788 0x0000d788 ADD_64 1027 0x0000a31a
0x0000d790 0x0000d790 ADD_64 1027 0x0000aa67
0x0000d798 0x0000d798 ADD_64 1027 0x00006f04
0x0000d7a0 0x0000d7a0 ADD_64 1027 0x0000ad06
0x0000d7a8 0x0000d7a8 ADD_64 1027 0x00009826
0x0000d7b0 0x0000d7b0 ADD_64 1027 0x00006f0c
0x0000d7b8 0x0000d7b8 ADD_64 1027 0x000099a0
0x0000d7c0 0x0000d7c0 ADD_64 1027 0x000094b0
0x0000d7c8 0x0000d7c8 ADD_64 1027 0x00007048
0x0000d7d0 0x0000d7d0 ADD_64 1027 0x0000ac00
0x0000d7d8 0x0000d7d8 ADD_64 1027 0x00008eab
0x0000d7e0 0x0000d7e0 ADD_64 1027 0x00007058
0x0000d7e8 0x0000d7e8 ADD_64 1027 0x0000ac12
0x0000d7f0 0x0000d7f0 ADD_64 1027 0x0000ac26
0x0000d7f8 0x0000d7f8 ADD_64 1027 0x0000706c
0x0000d800 0x0000d800 ADD_64 1027 0x0000983d
0x0000d808 0x0000d808 ADD_64 1027 0x00008eab
0x0000d810 0x0000d810 ADD_64 1027 0x00007094
0x0000d818 0x0000d818 ADD_64 1027 0x0000a7c5
0x0000d820 0x0000d820 ADD_64 1027 0x00008eab
0x0000d828 0x0000d828 ADD_64 1027 0x000070a8
0x0000d830 0x0000d830 ADD_64 1027 0x000091e1
0x0000d838 0x0000d838 ADD_64 1027 0x000098d0
0x0000d840 0x0000d840 ADD_64 1027 0x000070bc
0x0000d848 0x0000d848 ADD_64 1027 0x0000a0b1
0x0000d850 0x0000d850 ADD_64 1027 0x00009d19
0x0000d858 0x0000d858 ADD_64 1027 0x000070d4
0x0000d860 0x0000d860 ADD_64 1027 0x0000a491
0x0000d868 0x0000d868 ADD_64 1027 0x0000908c
0x0000d870 0x0000d870 ADD_64 1027 0x000070fc
0x0000d878 0x0000d878 ADD_64 1027 0x0000953c
0x0000d880 0x0000d880 ADD_64 1027 0x00008cca
0x0000d888 0x0000d888 ADD_64 1027 0x00007144
0x0000d890 0x0000d890 ADD_64 1027 0x000093c8
0x0000d898 0x0000d898 ADD_64 1027 0x000086db
0x0000d8a0 0x0000d8a0 ADD_64 1027 0x00007214
0x0000d8a8 0x0000d8a8 ADD_64 1027 0x0000a332
0x0000d8b0 0x0000d8b0 ADD_64 1027 0x0000a07c
0x0000d8b8 0x0000d8b8 ADD_64 1027 0x000072e8
0x0000e000 0x0000e000 ADD_64 1027 0x00000200
0x0000e210 0x0000e210 SET_64 1026 __cxa_finalize
0x0000e218 0x0000e218 SET_64 1026 __stack_chk_fail
0x0000e220 0x0000e220 SET_64 1026 dlopen

View file

@ -160,7 +160,7 @@ NAME=aarch64 ET_DYN (regression): reloc count unchanged by ET_REL gating
FILE=bins/elf/ls-toybox
CMDS=ir~?
EXPECT=<<EOF
331
384
EOF
RUN

View file

@ -69,6 +69,59 @@ vaddr paddr type ntype name
0x00078040 0x00078040 SET_64 1027
0x00078050 0x00078050 SET_64 1027
0x00078188 0x00078188 SET_64 1027
0x00078978 0x00078978 ADD_64 257 MD5_Init
0x00078980 0x00078980 ADD_64 257 MD5_Update
0x00078988 0x00078988 ADD_64 257 MD5_Final
0x000789a0 0x000789a0 ADD_64 257 SHA1_Init
0x000789a8 0x000789a8 ADD_64 257 SHA1_Update
0x000789b0 0x000789b0 ADD_64 257 SHA1_Final
0x000789c8 0x000789c8 ADD_64 257 SHA224_Init
0x000789d0 0x000789d0 ADD_64 257 SHA224_Update
0x000789d8 0x000789d8 ADD_64 257 SHA224_Final
0x000789f0 0x000789f0 ADD_64 257 SHA256_Init
0x000789f8 0x000789f8 ADD_64 257 SHA256_Update
0x00078a00 0x00078a00 ADD_64 257 SHA256_Final
0x00078a18 0x00078a18 ADD_64 257 SHA384_Init
0x00078a20 0x00078a20 ADD_64 257 SHA384_Update
0x00078a28 0x00078a28 ADD_64 257 SHA384_Final
0x00078a40 0x00078a40 ADD_64 257 SHA512_Init
0x00078a48 0x00078a48 ADD_64 257 SHA512_Update
0x00078a50 0x00078a50 ADD_64 257 SHA512_Final
0x0007b2d8 0x0007b2d8 SET_64 1025 free
0x0007b2e8 0x0007b2e8 SET_64 1025 _ctype_
0x0007b2f0 0x0007b2f0 SET_64 1025 strncmp
0x0007b300 0x0007b300 SET_64 1025 environ
0x0007b308 0x0007b308 SET_64 1025 stderr
0x0007b310 0x0007b310 SET_64 1025 stdout
0x0007b320 0x0007b320 SET_64 1025 stat
0x0007b328 0x0007b328 SET_64 1025 strcmp
0x0007b330 0x0007b330 SET_64 1025 strncasecmp
0x0007b348 0x0007b348 SET_64 1025 stdin
0x0007b368 0x0007b368 SET_64 1025 socket
0x0007b370 0x0007b370 SET_64 1025 bind
0x0007b378 0x0007b378 SET_64 1025 connect
0x0007b398 0x0007b398 SET_64 1025 getxattr
0x0007b3a8 0x0007b3a8 SET_64 1025 lgetxattr
0x0007b3b0 0x0007b3b0 SET_64 1025 listxattr
0x0007b3b8 0x0007b3b8 SET_64 1025 llistxattr
0x0007b3c0 0x0007b3c0 SET_64 1025 setxattr
0x0007b3c8 0x0007b3c8 SET_64 1025 lsetxattr
0x0007b3d0 0x0007b3d0 SET_64 1025 strcasecmp
0x0007b3d8 0x0007b3d8 SET_64 1025 localtime_r
0x0007b3f8 0x0007b3f8 SET_64 1025 lstat
0x0007b400 0x0007b400 SET_64 1025 opterr
0x0007b408 0x0007b408 SET_64 1025 optind
0x0007b410 0x0007b410 SET_64 1025 getopt_long_only
0x0007b418 0x0007b418 SET_64 1025 getopt_long
0x0007b420 0x0007b420 SET_64 1025 optarg
0x0007b428 0x0007b428 SET_64 1025 optopt
0x0007b430 0x0007b430 SET_64 1025 lsetfilecon
0x0007b438 0x0007b438 SET_64 1025 setfilecon
0x0007b440 0x0007b440 SET_64 1025 gmtime_r
0x0007b448 0x0007b448 SET_64 1025 timezone
0x0007b450 0x0007b450 SET_64 1025 daylight
0x0007b458 0x0007b458 SET_64 1025 lremovexattr
0x0007b460 0x0007b460 SET_64 1025 removexattr
0x0007b480 0x0007b480 SET_64 1026 __libc_init
0x0007b488 0x0007b488 SET_64 1026 __strchr_chk
0x0007b490 0x0007b490 SET_64 1026 strtol
@ -418,6 +471,6 @@ CMDS=<<EOF
pxq 8 @ 0x0007b480
EOF
EXPECT=<<EOF
0x0007b480 0x0000000000083a09 .:......
0x0007b480 0x0000000000083bb1 .;......
EOF
RUN