版权声明:转载请写明出处,谢谢! https://blog.csdn.net/wilson1068/article/details/87867127
readelf 与 ELF 文件格式分析
ELF 格式
可执行与可链接格式(英语:Executable and Linkable Format,缩写为 ELF),常被称为 ELF 格式,在计算机科学中,是一种用于可执行文件、目标文件、共享库和核心转储的标准文件格式。
可以通过 ELF 格式读取 ELF 文件的一些信息。
ELF 文件类型:
- 可重定位的对象文件 (Relocatable file)
由汇编器汇编生成的 .o 文件
- 可执行的对象文件 (Executable file)
可执行应用程序
- 可被共享的对象文件 (Shared object file)
动态库文件,也即 .so 文件
ELF 文件组成:
- ELF 头(ELF header)
- 程序标头表(Program header table)
- Section 标头表(Section header table):链接与重定义需要的数据
- 程序标头与 Section 标头需要的数据:.text(可执行代码),.data(被初始化的数据),.bss(未初始化的数据),.symtab 或 .dynsym(符号信息),strtab 或 dynstr(字符串信息)等
实际的 ELF 文件不一定如下图所示的包含其中的信息和位置顺序。
只有 ELF 头的位置是固定的,其它信息包含在 ELF 头中。
ELF 头(ELF header)
#define EI_NIDENT 16
typedef struct {
unsigned char e_ident[EI_NIDENT]; // 开头 3 个字节固定不变,为 0x7F, 'E', 'L', 'F',其它是与机器无关的信息
Elf32_Half e_type; // 标识该文件的类型
Elf32_Half e_machine; // 运行该程序需要的体系结构
Elf32_Word e_version; // 文件的版本
Elf32_Addr e_entry; // 程序的入口地址
Elf32_Off e_phoff; // Program header table 在文件中的偏移量(以字节计数)
Elf32_Off e_shoff; // Section header table 在文件中的偏移量(以字节计数)
Elf32_Word e_flags; // 其它
Elf32_Half e_ehsize; // ELF header 大小(以字节计数)
Elf32_Half e_phentsize; // Program header table 中每一个条目的大小
Elf32_Half e_phnum; // Program header table 中条目数量
Elf32_Half e_shentsize; // Section header table 中的每一个条目的大小
Elf32_Half e_shnum; // Section header table 中条目数量
Elf32_Half e_shstrndx; // 包含节名称的字符串是第几个节(从零开始计数)
} Elf32_Ehdr;
数据类型说明:
数据类型 | 大小 | 对齐 | 用途 |
---|---|---|---|
Elf32_Addr | 4 | 4 | 无符号程序地址 |
Elf32_Half | 2 | 2 | 无符号中等大小整数 |
Elf32_Off | 4 | 4 | 无符号文件偏移 |
Elf32_Sword | 4 | 4 | 有符号大整数 |
Elf32_Word | 4 | 4 | 无符号大整数 |
unsigned char | 1 | 1 | 无符号小整数 |
程序标头
Program header 描述的是一个段在文件中的位置、大小以及它被放进内存后所在的位置和大小。
typedef struct {
Elf32_Word p_type; // 当前 Program header 所描述的段的类型
Elf32_Off p_offset; // 第一个字节在文件中的偏移
Elf32_Addr p_vaddr; // 一个字节在内存中的虚拟地址
Elf32_Addr p_paddr; // 在物理内存定位相关的系统中,此项是为物理地址保留
Elf32_Word p_filesz; // 文件中的长度
Elf32_Word p_memsz; // 内存中的长度
Elf32_Word p_flags; // 与段相关的标志
Elf32_Word p_align; // 根据此项值来确定段在文件及内存中如何对齐
}
通过 readelf 命令分析 ELF 文件
不同的架构下也有不同的 readelf 命令,比如 android 的命令:arm-linux-androideabi-readelf
readelf 命令主要参数:
-a --all Equivalent to: -h -l -S -s -r -d -V -A -I
-h --file-header Display the ELF file header
-l --program-headers Display the program headers
--segments An alias for --program-headers
-S --section-headers Display the sections' header
--sections An alias for --section-headers
-g --section-groups Display the section groups
-t --section-details Display the section details
-e --headers Equivalent to: -h -l -S
-s --syms Display the symbol table
--symbols An alias for --syms
--dyn-syms Display the dynamic symbol table
-n --notes Display the core notes (if present)
-r --relocs Display the relocations (if present)
-u --unwind Display the unwind info (if present)
-d --dynamic Display the dynamic section (if present)
-V --version-info Display the version sections (if present)
-A --arch-specific Display architecture specific information (if any)
-c --archive-index Display the symbol/file index in an archive
-D --use-dynamic Use the dynamic section info when displaying symbols
-x --hex-dump=<number|name>
Dump the contents of section <number|name> as bytes
-p --string-dump=<number|name>
Dump the contents of section <number|name> as strings
-R --relocated-dump=<number|name>
Dump the contents of section <number|name> as relocated bytes
-z --decompress Decompress section before dumping it
-w[lLiaprmfFsoRt] or
--debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,
=frames-interp,=str,=loc,=Ranges,=pubtypes,
=gdb_index,=trace_info,=trace_abbrev,=trace_aranges,
=addr,=cu_index]
Display the contents of DWARF2 debug sections
--dwarf-depth=N Do not display DIEs at depth N or greater
--dwarf-start=N Display DIEs starting with N, at the same depth
or deeper
-I --histogram Display histogram of bucket list lengths
-W --wide Allow output width to exceed 80 characters
@<file> Read options from <file>
-H --help Display this information
-v --version Display the version number of readelf
查看 .so 文件依赖库:arm-linux-androideabi-readelf -d libtest.so
Dynamic section at offset 0x2e8c contains 30 entries:
Tag Type Name/Value
0x00000003 (PLTGOT) 0x3fb8
0x00000002 (PLTRELSZ) 120 (bytes)
0x00000017 (JMPREL) 0x7b4
0x00000014 (PLTREL) REL
0x00000011 (REL) 0x6ec
0x00000012 (RELSZ) 200 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x6ffffffa (RELCOUNT) 23
0x00000006 (SYMTAB) 0x1f0
0x0000000b (SYMENT) 16 (bytes)
0x00000005 (STRTAB) 0x360
0x0000000a (STRSZ) 600 (bytes)
0x00000004 (HASH) 0x5b8
0x00000001 (NEEDED) Shared library: [liblog.so]
0x00000001 (NEEDED) Shared library: [../../../../src/main/jniLibs/armeabi-v7a/libjudgehdr.so]
0x00000001 (NEEDED) Shared library: [../../../../src/main/jniLibs/armeabi-v7a/libldr2hdr.so]
0x00000001 (NEEDED) Shared library: [libm.so]
0x00000001 (NEEDED) Shared library: [libdl.so]
0x00000001 (NEEDED) Shared library: [libc.so]
0x0000000e (SONAME) Library soname: [libcvteresearch_facehdr.so]
0x0000001a (FINI_ARRAY) 0x3e3c
0x0000001c (FINI_ARRAYSZ) 8 (bytes)
0x0000001e (FLAGS) BIND_NOW
0x6ffffffb (FLAGS_1) Flags: NOW
0x6ffffff0 (VERSYM) 0x660
0x6ffffffc (VERDEF) 0x690
0x6ffffffd (VERDEFNUM) 1
0x6ffffffe (VERNEED) 0x6ac
0x6fffffff (VERNEEDNUM) 2
0x00000000 (NULL) 0x0
查看 ELF 头:arm-linux-androideabi-readelf -h libtest.so
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: DYN (Shared object file)
Machine: ARM
Version: 0x1
Entry point address: 0x0
Start of program headers: 52 (bytes into file)
Start of section headers: 148172 (bytes into file)
Flags: 0x5000200, Version5 EABI, soft-float ABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 8
Size of section headers: 40 (bytes)
Number of section headers: 39
Section header string table index: 38
完整信息:arm-linux-androideabi-readelf -all libtest.so
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: DYN (Shared object file)
Machine: ARM
Version: 0x1
Entry point address: 0x0
Start of program headers: 52 (bytes into file)
Start of section headers: 148172 (bytes into file)
Flags: 0x5000200, Version5 EABI, soft-float ABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 8
Size of section headers: 40 (bytes)
Number of section headers: 39
Section header string table index: 38
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .note.android.ide NOTE 00000134 000134 000098 00 A 0 0 4
[ 2] .note.gnu.build-i NOTE 000001cc 0001cc 000024 00 A 0 0 4
[ 3] .dynsym DYNSYM 000001f0 0001f0 000170 10 A 4 1 4
[ 4] .dynstr STRTAB 00000360 000360 000258 00 A 0 0 1
[ 5] .hash HASH 000005b8 0005b8 0000a8 04 A 3 0 4
[ 6] .gnu.version VERSYM 00000660 000660 00002e 02 A 3 0 2
[ 7] .gnu.version_d VERDEF 00000690 000690 00001c 00 A 4 1 4
[ 8] .gnu.version_r VERNEED 000006ac 0006ac 000040 00 A 4 2 4
[ 9] .rel.dyn REL 000006ec 0006ec 0000c8 08 A 3 0 4
[10] .rel.plt REL 000007b4 0007b4 000078 08 A 3 0 4
[11] .plt PROGBITS 0000082c 00082c 0000c8 00 AX 0 0 4
[12] .text PROGBITS 000008f4 0008f4 00179c 00 AX 0 0 4
[13] .ARM.exidx ARM_EXIDX 00002090 002090 0001a0 08 AL 12 0 4
[14] .ARM.extab PROGBITS 00002230 002230 000198 00 A 0 0 4
[15] .rodata PROGBITS 000023c8 0023c8 00048e 01 AMS 0 0 1
[16] .fini_array FINI_ARRAY 00003e3c 002e3c 000008 00 WA 0 0 4
[17] .data.rel.ro PROGBITS 00003e44 002e44 000048 00 WA 0 0 4
[18] .dynamic DYNAMIC 00003e8c 002e8c 000118 08 WA 4 0 4
[19] .got PROGBITS 00003fa4 002fa4 00005c 00 WA 0 0 4
[20] .data PROGBITS 00004000 003000 000008 00 WA 0 0 4
[21] .bss NOBITS 00004008 003008 000001 00 WA 0 0 1
[22] .comment PROGBITS 00000000 003008 000108 01 MS 0 0 1
[23] .debug_str PROGBITS 00000000 003110 008369 01 MS 0 0 1
[24] .debug_abbrev PROGBITS 00000000 00b479 000b09 00 0 0 1
[25] .debug_info PROGBITS 00000000 00bf82 009860 00 0 0 1
[26] .debug_ranges PROGBITS 00000000 0157e2 0003d0 00 0 0 1
[27] .debug_macinfo PROGBITS 00000000 015bb2 000003 00 0 0 1
[28] .debug_pubnames PROGBITS 00000000 015bb5 001479 00 0 0 1
[29] .debug_pubtypes PROGBITS 00000000 01702e 000e7c 00 0 0 1
[30] .debug_frame PROGBITS 00000000 017eac 0006ec 00 0 0 4
[31] .debug_line PROGBITS 00000000 018598 001e0d 00 0 0 1
[32] .debug_loc PROGBITS 00000000 01a3a5 002028 00 0 0 1
[33] .debug_aranges PROGBITS 00000000 01c3cd 000040 00 0 0 1
[34] .note.gnu.gold-ve NOTE 00000000 01c410 00001c 00 0 0 4
[35] .ARM.attributes ARM_ATTRIBUTES 00000000 01c42c 000034 00 0 0 1
[36] .symtab SYMTAB 00000000 01c460 006b30 10 37 1693 4
[37] .strtab STRTAB 00000000 022f90 00118b 00 0 0 1
[38] .shstrtab STRTAB 00000000 02411b 0001b0 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
L (link order), O (extra OS processing required), G (group), T (TLS),
C (compressed), x (unknown), o (OS specific), E (exclude),
y (noread), p (processor specific)
There are no section groups in this file.
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
PHDR 0x000034 0x00000034 0x00000034 0x00100 0x00100 R 0x4
LOAD 0x000000 0x00000000 0x00000000 0x02856 0x02856 R E 0x1000
LOAD 0x002e3c 0x00003e3c 0x00003e3c 0x001cc 0x001cd RW 0x1000
DYNAMIC 0x002e8c 0x00003e8c 0x00003e8c 0x00118 0x00118 RW 0x4
NOTE 0x000134 0x00000134 0x00000134 0x000bc 0x000bc R 0x4
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x10
EXIDX 0x002090 0x00002090 0x00002090 0x001a0 0x001a0 R 0x4
GNU_RELRO 0x002e3c 0x00003e3c 0x00003e3c 0x001c4 0x001c4 RW 0x4
Section to Segment mapping:
Segment Sections...
00
01 .note.android.ident .note.gnu.build-id .dynsym .dynstr .hash .gnu.version .gnu.version_d .gnu.version_r .rel.dyn .rel.plt .plt .text .ARM.exidx .ARM.extab .rodata
02 .fini_array .data.rel.ro .dynamic .got .data .bss
03 .dynamic
04 .note.android.ident .note.gnu.build-id
05
06 .ARM.exidx
07 .fini_array .data.rel.ro .dynamic .got
Dynamic section at offset 0x2e8c contains 30 entries:
Tag Type Name/Value
0x00000003 (PLTGOT) 0x3fb8
0x00000002 (PLTRELSZ) 120 (bytes)
0x00000017 (JMPREL) 0x7b4
0x00000014 (PLTREL) REL
0x00000011 (REL) 0x6ec
0x00000012 (RELSZ) 200 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x6ffffffa (RELCOUNT) 23
0x00000006 (SYMTAB) 0x1f0
0x0000000b (SYMENT) 16 (bytes)
0x00000005 (STRTAB) 0x360
0x0000000a (STRSZ) 600 (bytes)
0x00000004 (HASH) 0x5b8
0x00000001 (NEEDED) Shared library: [liblog.so]
0x00000001 (NEEDED) Shared library: [../../../../src/main/jniLibs/armeabi-v7a/libjudgehdr.so]
0x00000001 (NEEDED) Shared library: [../../../../src/main/jniLibs/armeabi-v7a/libldr2hdr.so]
0x00000001 (NEEDED) Shared library: [libm.so]
0x00000001 (NEEDED) Shared library: [libdl.so]
0x00000001 (NEEDED) Shared library: [libc.so]
0x0000000e (SONAME) Library soname: [libcvteresearch_facehdr.so]
0x0000001a (FINI_ARRAY) 0x3e3c
0x0000001c (FINI_ARRAYSZ) 8 (bytes)
0x0000001e (FLAGS) BIND_NOW
0x6ffffffb (FLAGS_1) Flags: NOW
0x6ffffff0 (VERSYM) 0x660
0x6ffffffc (VERDEF) 0x690
0x6ffffffd (VERDEFNUM) 1
0x6ffffffe (VERNEED) 0x6ac
0x6fffffff (VERNEEDNUM) 2
0x00000000 (NULL) 0x0
Relocation section '.rel.dyn' at offset 0x6ec contains 25 entries:
Offset Info Type Sym.Value Sym. Name
00003e3c 00000017 R_ARM_RELATIVE
00003e40 00000017 R_ARM_RELATIVE
00003e4c 00000017 R_ARM_RELATIVE
00003e50 00000017 R_ARM_RELATIVE
00003e54 00000017 R_ARM_RELATIVE
00003e58 00000017 R_ARM_RELATIVE
00003e5c 00000017 R_ARM_RELATIVE
00003e60 00000017 R_ARM_RELATIVE
00003e64 00000017 R_ARM_RELATIVE
00003e68 00000017 R_ARM_RELATIVE
00003e6c 00000017 R_ARM_RELATIVE
00003e70 00000017 R_ARM_RELATIVE
00003e74 00000017 R_ARM_RELATIVE
00003e78 00000017 R_ARM_RELATIVE
00003e7c 00000017 R_ARM_RELATIVE
00003e80 00000017 R_ARM_RELATIVE
00003e84 00000017 R_ARM_RELATIVE
00003e88 00000017 R_ARM_RELATIVE
00003fac 00000017 R_ARM_RELATIVE
00003fb0 00000017 R_ARM_RELATIVE
00003fb4 00000017 R_ARM_RELATIVE
00004000 00000017 R_ARM_RELATIVE
00004004 00000017 R_ARM_RELATIVE
00003fa8 00000c15 R_ARM_GLOB_DAT 00000000 __sF@LIBC
00003fa4 00000f15 R_ARM_GLOB_DAT 00000000 __stack_chk_guard@LIBC
Relocation section '.rel.plt' at offset 0x7b4 contains 15 entries:
Offset Info Type Sym.Value Sym. Name
00003fc4 00000216 R_ARM_JUMP_SLOT 00000000 __cxa_finalize@LIBC
00003fc8 00000116 R_ARM_JUMP_SLOT 00000000 __cxa_atexit@LIBC
00003fcc 00000916 R_ARM_JUMP_SLOT 000009a1 _ZN7_JNIEnv20GetByteAr
00003fd0 00000816 R_ARM_JUMP_SLOT 00000000 JudgeHdr
00003fd4 00000a16 R_ARM_JUMP_SLOT 000009d7 _ZN7_JNIEnv24ReleaseBy
00003fd8 00000b16 R_ARM_JUMP_SLOT 00000000 ldr2hdr
00003fdc 00000e16 R_ARM_JUMP_SLOT 00000000 __stack_chk_fail@LIBC
00003fe0 00001116 R_ARM_JUMP_SLOT 00000000 fprintf@LIBC
00003fe4 00001016 R_ARM_JUMP_SLOT 00000000 fflush@LIBC
00003fe8 00000d16 R_ARM_JUMP_SLOT 00000000 abort@LIBC
00003fec 00001316 R_ARM_JUMP_SLOT 00000000 __aeabi_memcpy
00003ff0 00001216 R_ARM_JUMP_SLOT 00000000 __aeabi_memclr8
00003ff4 00001516 R_ARM_JUMP_SLOT 00000000 dladdr@LIBC
00003ff8 00001616 R_ARM_JUMP_SLOT 00000000 snprintf@LIBC
00003ffc 00001416 R_ARM_JUMP_SLOT 00000000 __gnu_Unwind_Find_exid
Unwind table index '.ARM.exidx' at offset 0x2090 contains 52 entries:
0x8f4 <__on_dlclose>: 0x1 [cantunwind]
0x938 <Java_org_cvte_research_faceapi_FaceApiNative_JniJudgeHdr>: @0x2230
Compact model index: 1
0x97 vsp = r7
0x43 vsp = vsp - 16
0x80 0x10 pop {r8}
0xab pop {r4, r5, r6, r7, r14}
0xb0 finish
0x9a0 <_ZN7_JNIEnv20GetByteArrayElementsEP11_jbyteArrayPh>: @0x223c
Compact model index: 1
0x97 vsp = r7
0x41 vsp = vsp - 8
0x84 0x0d pop {r4, r6, r7, r14}
0xb0 finish
0xb0 finish
...
0x1bf0 <_ZN9libunwind13Registers_arm15getRegisterNameEi>: 0x80b0b0b0
Compact model index: 0
0xb0 finish
0xb0 finish
0xb0 finish
0x2034 <_ZN9libunwind13Registers_arm20restoreCoreAndJumpToEv>: 0x1 [cantunwind]
Symbol table '.dynsym' contains 23 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 FUNC GLOBAL DEFAULT UND __cxa_atexit@LIBC (2)
2: 00000000 0 FUNC GLOBAL DEFAULT UND __cxa_finalize@LIBC (2)
3: 00004008 0 NOTYPE GLOBAL DEFAULT ABS _edata
4: 00004009 0 NOTYPE GLOBAL DEFAULT ABS _end
5: 00004008 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
6: 00000939 104 FUNC GLOBAL DEFAULT 12 Java_org_cvte_research_fa
7: 00000a1f 142 FUNC GLOBAL DEFAULT 12 Java_org_cvte_research_fa
8: 00000000 0 FUNC GLOBAL DEFAULT UND JudgeHdr
9: 000009a1 54 FUNC WEAK DEFAULT 12 _ZN7_JNIEnv20GetByteArray
10: 000009d7 72 FUNC WEAK DEFAULT 12 _ZN7_JNIEnv24ReleaseByteA
11: 00000000 0 FUNC GLOBAL DEFAULT UND ldr2hdr
12: 00000000 0 OBJECT GLOBAL DEFAULT UND __sF@LIBC (2)
13: 00000000 0 FUNC GLOBAL DEFAULT UND abort@LIBC (2)
14: 00000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@LIBC (2)
15: 00000000 0 OBJECT GLOBAL DEFAULT UND __stack_chk_guard@LIBC (2)
16: 00000000 0 FUNC GLOBAL DEFAULT UND fflush@LIBC (2)
17: 00000000 0 FUNC GLOBAL DEFAULT UND fprintf@LIBC (2)
18: 00000000 0 FUNC GLOBAL DEFAULT UND __aeabi_memclr8
19: 00000000 0 FUNC GLOBAL DEFAULT UND __aeabi_memcpy
20: 00000000 0 FUNC GLOBAL DEFAULT UND __gnu_Unwind_Find_exidx
21: 00000000 0 FUNC GLOBAL DEFAULT UND dladdr@LIBC (3)
22: 00000000 0 FUNC GLOBAL DEFAULT UND snprintf@LIBC (2)
Symbol table '.symtab' contains 1715 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 FILE LOCAL DEFAULT ABS crtbegin_so.c
2: 000008f4 0 NOTYPE LOCAL DEFAULT 12 $a.0
3: 00000904 0 NOTYPE LOCAL DEFAULT 12 $a.2
4: 00000900 0 NOTYPE LOCAL DEFAULT 12 $d.1
5: 00000930 0 NOTYPE LOCAL DEFAULT 12 $d.3
...
1712: 00000000 0 FUNC GLOBAL DEFAULT UND __gnu_Unwind_Find_exidx
1713: 00000000 0 FUNC GLOBAL DEFAULT UND dladdr
1714: 00000000 0 FUNC GLOBAL DEFAULT UND snprintf
Histogram for bucket list length (total of 17 buckets):
Length Number % of total Coverage
0 10 ( 58.8%)
1 5 ( 29.4%) 55.6%
2 2 ( 11.8%) 100.0%
Version symbols section '.gnu.version' contains 23 entries:
Addr: 0000000000000660 Offset: 0x000660 Link: 3 (.dynsym)
000: 0 (*local*) 2 (LIBC) 2 (LIBC) 1 (*global*)
004: 1 (*global*) 1 (*global*) 1 (*global*) 1 (*global*)
008: 0 (*local*) 1 (*global*) 1 (*global*) 0 (*local*)
00c: 2 (LIBC) 2 (LIBC) 2 (LIBC) 2 (LIBC)
010: 2 (LIBC) 2 (LIBC) 0 (*local*) 0 (*local*)
014: 0 (*local*) 3 (LIBC) 2 (LIBC)
Version definition section '.gnu.version_d' contains 1 entries:
Addr: 0x0000000000000690 Offset: 0x000690 Link: 4 (.dynstr) 000000: Rev: 1 Flags: BASE Index: 1 Cnt: 1 Name: libcvteresearch_facehdr.so
Version definition past end of section
Version needs section '.gnu.version_r' contains 2 entries:
Addr: 0x00000000000006ac Offset: 0x0006ac Link: 4 (.dynstr)
000000: Version: 1 File: libc.so Cnt: 1
0x0010: Name: LIBC Flags: none Version: 2
0x0020: Version: 1 File: libdl.so Cnt: 1
0x0030: Name: LIBC Flags: none Version: 3
Displaying notes found at file offset 0x00000134 with length 0x00000098:
Owner Data size Description
Android 0x00000084 NT_VERSION (version)
Displaying notes found at file offset 0x000001cc with length 0x00000024:
Owner Data size Description
GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring)
Build ID: 295b5876f2176311314bd316c97325d34d7a33ee
Displaying notes found at file offset 0x0001c410 with length 0x0000001c:
Owner Data size Description
GNU 0x00000009 NT_GNU_GOLD_VERSION (gold version)
Version: gold 1.12
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "ARM v7"
Tag_CPU_arch: v7
Tag_CPU_arch_profile: Application
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-2
Tag_FP_arch: VFPv3
Tag_ABI_PCS_GOT_use: GOT-indirect
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_enum_size: int
Tag_CPU_unaligned_access: v6
Tag_ABI_FP_16bit_format: IEEE 754