目录

前言 1.1

ELF概览 1.2

ELF文件类型 1.2.1

ELF术语和概念 1.2.2

ELF结构详解 1.3

ELF的2种视图 1.3.1

ELF结构图 1.3.2

ELF链接和执行过程 1.3.3

section节 1.3.4

.bss 1.3.4.1

segment段 1.3.5

ELF解析工具 1.4

读取信息 1.4.1

Linux通用 1.4.1.1

readelf 1.4.1.1.1

安装 1.4.1.1.1.1

用法 1.4.1.1.1.2

举例 1.4.1.1.1.2.1

help 1.4.1.1.1.3

objdump 1.4.1.1.2

用法 1.4.1.1.2.1

举例 1.4.1.1.2.1.1

help 1.4.1.1.2.2

man 1.4.1.1.2.2.1

rabin2 1.4.1.1.3

用法 1.4.1.1.3.1

举例 1.4.1.1.3.1.1

help 1.4.1.1.3.2

man 1.4.1.1.3.2.1

Android专用 1.4.1.2

JEB 1.4.1.2.1

解析修改 1.4.2

LIEF 1.4.2.1

Android中的ELF 1.5

附录 1.6

参考资料 1.6.1

前言

可执行文件格式：ELF

最新版本：v1.0.1

更新时间：20231004

简介

介绍常见的可执行文件格式：ELF。主要是Linux和Android的常见格式。先是ELF概览，包括ELF文件类型和术语和概念；然后是ELF结构详解，包括两种视图、结构图、链接和执行过程以及section节和segment段；然后介绍ELF的解析工具，包括读取信息的和解析修改的；读取信息的有Linux通用的readelf、objdump、rabin2等和Android专用的JEB等。且都有详细的安装、用法和举例；解析工具包括LIEF；然后专门介绍Android中的ELF格式。

源码+浏览+下载

本书的各种源码、在线浏览地址、多种格式文件下载如下：

HonKit源码

crifan/exec_file_format_elf: 可执行文件格式：ELF

如何使用此HonKit源码去生成发布为电子书

详见：crifan/honkit_template: demo how to use crifan honkit template and demo

在线浏览

可执行文件格式：ELF book.crifan.org

可执行文件格式：ELF crifan.github.io

离线下载阅读

可执行文件格式：ELF PDF

可执行文件格式：ELF ePub

可执行文件格式：ELF Mobi

版权和用途说明

此电子书教程的全部内容，如无特别说明，均为本人原创。其中部分内容参考自网络，均已备注了出处。如发现有侵权，请通过邮箱联系我 admin 艾特 crifan.com，我会尽快删除。谢谢合作。

各种技术类教程，仅作为学习和研究使用。请勿用于任何非法用途。如有非法用途，均与本人无关。

鸣谢

感谢我的老婆陈雪的包容理解和悉心照料，才使得我crifan有更多精力去专注技术专研和整理归纳出这些电子书和技术教程，特此鸣谢。

其他

作者的其他电子书

本人crifan还写了其他150+本电子书教程，感兴趣可移步至：

crifan/crifan_ebook_readme: Crifan的电子书的使用说明

关于作者

关于作者更多介绍，详见：

关于CrifanLi李茂 – 在路上

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 22:01:28

ELF概览

ELF概览

ELF=Executable and Linking Format=可执行和链接格式

是什么：一种文件格式file format

that defines how an object file is composed and organized

用途：With this information, your kernel and the binary loader know how to load the file, where to look for the code, where to look the initialized data, which shared library that needs to be loaded and so on.

主要历史

Linux和安卓通用的可执行文件格式：ELF

最早：Linux通用可执行文件格式：ELF

后来：Android是基于Linux的，所以也是沿用ELF

详见：Android中的ELF

ELF资料

ELF资料

ELF格式详细定义

Executable and Linkable Format - Wikipedia

elf(5) — Linux manual pages (courier-mta.org)

ELF Header (sco.com)

各个section节的含义

Special Sections (oracle.com)

Executable and Linkable Format (ELF) (netmeister.org)

elf内部过程

s.eresi-project.org/inc/articles/elf-rtld.txt

Understanding Linux ELF RTLD internals

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-02 17:25:36

ELF文件类型

ELF文件类型

ELF文件类型

Relocatable File=可重定位文件

an object file that holds code and data suitable for linking with other object files to create an executable or a shared object file. In other word, you can say that relocatable file is a foundation for creating executables and libraries

常见后缀

object file=.o文件

举例

gcc -c test.c

生成：test.o

Kernel module = .o或.ko

Executable File=可执行文件

object file that holds a program suitable for execution

常见后缀：无后缀

二进制文件

gcc -o test test.c

生成（无后缀的）：test

Shared Object File=共享对象文件=SO文件=Shared object==DYNamic link library

A shared object file holds code and data suitable for linking in two contexts

the link editor may process it with other relocatable and shared object files to create another object file

the dynamic linker combines it with an executable file and other shared objects to create a process image

常见后缀

.so文件

举例说明

用readelf查看header中文件类型

举例1

可以用readelf查看header，确定一个文件的类型到底是什么：Relocatable file/Executable file/Shared object file

$ readelf -h /bin/ls
Type: EXEC (Executable file)

$ readelf -h /usr/lib/crt1.o
Type: REL (Relocatable file)

$ readelf-h /lib/libc-2.3.2.so
Type: DYN (Shared object file)

举例2

➜  arm64-v8a readelf -h libtacker.so
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF64
...
  Type:                              DYN (Shared object file)

-》

ARM64架构的Shared Object File=DYN=Dynamic Library

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-02 16:57:16

ELF术语和概念

ELF术语和概念

ELF相关术语

ELF相关术语

Table表

GOT=Global Offset Table

SHT=Section Header Table

PLT=Procedure Linkage Table

PHT=Program Header Table

the kernel knows which section goes to which segment

文件格式

COFF=Common object file format

其他文件格式

Mach-O=Mach object file format

PE=Portable executable

BSS=Block Started by Symbol

The uninitialized data segment containing statically-allocated variables

DWARF

A standardized debugging data format

PC=Program counter

On x86, this is the same as IP (Instruction Pointer) register

section

SHF=Section header Flag

shstrtab = section header string table

地址

RVA=Relative virtual address

VMA=Virtual Memory Area/Address

加载

PIC=Position independent code

PIE=Position independent executable

REL=RELA=Relocation

TLS=Thread-Local Storage

DTV=Dynamic thread vector

access models

GD=Global Dynamic

dynamic TLS

IE=Initial Executable

static TLS with assigned offsets

LD=Local Dynamic

dynamic TLS of local symbols

LE=Local Executable

static TLS

ELF相关概念

ELF相关概念

section

不同的section

.text=代码段

.data=数据段：全局变量

.bss：未初始化的数据值

【整理】ELF相关：.bss节

segment ~= VMA

Linux内核内部的概念

contains virtually contiguous page frame

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-02 16:48:05

ELF结构详解

ELF结构详解

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-02 17:31:03

ELF的2种视图

ELF的2种视图

ELF的2种视图views

概述

Linking View

Linking链接时：需要Section Header Table，不需要Program Header Table

Execution View

Execution执行时：需要Program Header Table，不需要Section Header Table

ELF的2种视图

文字版

              +-----------------+
        +----| ELF File Header |----+
        |    +-----------------+    |
        v                           v
+-----------------+      +-----------------+
| Program Headers |      | Section Headers |
+-----------------+      +-----------------+
      ||                               ||
      ||                               ||
      ||                               ||
      ||   +------------------------+  ||
      +--> | Contents (Byte Stream) |<--+
          +------------------------+

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 15:21:41

ELF结构图

ELF结构图

ELF结构布局图=ELF layout

文字版

    +-------------------------------+
    | ELF File Header               |
    +-------------------------------+
    | Program Header for segment #1 |
    +-------------------------------+
    | Program Header for segment #2 |
    +-------------------------------+
    | ...                           |
    +-------------------------------+
    | Contents (Byte Stream)        |
    | ...                           |
    +-------------------------------+
    | Section Header for section #1 |
    +-------------------------------+
    | Section Header for section #2 |
    +-------------------------------+
    | ...                           |
    +-------------------------------+
    | ".shstrtab" section           |
    +-------------------------------+
    | ".symtab"   section           |
    +-------------------------------+
    | ".strtab"   section           |
    +-------------------------------+

举例

打开so可以看到顶部有ELF字样

举例

Android ELF 文件格式

Android ELF 文件格式

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-02 17:39:42

ELF链接和执行过程

ELF链接和执行过程

ELF链接和执行过程 = ELF Executable and Linkable Format diagram

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-02 17:32:52

section节

section节

ELF中常见的section节

.bss：Uninitialized global data ("Block Started by Symbol")

.comment：A series of NULL-terminated strings containing compiler information.

.ctors：Pointers to functions which are marked as __attribute__ ((constructor)) as well as static C++ objects' constructors. They will be used by __libc_global_ctors function.

.data：Initialized data

.data.rel.ro：Similar to .data section, but this section should be made Read-Only after relocation is done.

.debug_XXX：Debugging information (for the programs which are compiled with -g option) which is in the DWARF 2.0 format.

.dtors：Pointers to functions which are marked as __attribute__ ((destructor)) as well as static C++ objects' destructors.

.dynamic：For dynamic binaries, this section holds dynamic linking information used by ld.so

.dynstr：NULL-terminated strings of names of symbols in .dynsym section.

One can use commands such as readelf -p .dynstr a.out to see these strings.

.dynsym：Runtime/Dynamic symbol table. For dynamic binaries, this section is the symbol table of globally visible symbols. For example, if a dynamic link library wants to export its symbols, these symbols will be stored here. On the other hand, if a dynamic executable binary uses symbols from a dynamic link library, then these symbols are stored here too.

The symbol names (as NULL-terminated strings) are stored in .dynstr section.

.eh_frame / eh_frame_hdr：Frame unwind information (EH = Exception Handling).

To see the content of .eh_frame section, use readelf --debug-dump=frames-interp a.out

.fini：Code which will be executed when program exits normally

.fini_array：Pointers to functions which will be executed when program exits normally

.GCC.command.line：A series of NULL-terminated strings containing GCC command-line (that is used to compile the code) options.

This feature is supported since GCC 4.5 and the program must be compiled with -frecord-gcc-switches option.

.gnu.hash：GNU's extension to hash table for symbols.

The link editor ld calls bfd_elf_gnu_hash in in GNU Binutil's source file bfd/elf.c to compute the hash value.

The runtime linker ld.so calls do_lookup_x in elf/dl-lookup.c to do the symbol look-up. The hash computing function here is dl_new_hash.

.gnu.linkonceXXX：GNU's extension. It means only a single copy of the section will be used in linking. This is used to by g++. g++ will emit each template expansion in its own section. The symbols will be defined as weak, so that multiple definitions are permitted.

.gnu.version：Versions of symbols.

.gnu.version_d：Version definitions of symbols.

.gnu.version_r：Version references (version needs) of symbols.

.got：For dynamic binaries, this Global Offset Table holds the addresses of variables which are relocated upon loading

.got.plt：For dynamic binaries, this Global Offset Table holds the addresses of functions in dynamic libraries. They are used by trampoline code in .plt section. If .got.plt section is present, it contains at least three entries, which have special meanings

.hash：Hash table for symbols.

The link editor ld calls bfd_elf_hash in in GNU Binutil's source file bfd/elf.c to compute the hash value.

The runtime linker ld.so calls do_lookup_x in elf/dl-lookup.c to do the symbol look-up. The hash computing function here is _dl_elf_hash.

.init：Code which will be executed when program initializes

.init_array：Pointers to functions which will be executed when program starts

.interp：For dynamic binaries, this holds the full pathname of runtime linker ld.so

.jcr：Java class registration information.

Like .ctors section, it contains a list of addresses which will be used by _Jv_RegisterClasses function in CRT (C Runtime) startup files (see gcc/crtstuff.c in GCC's source tree)

.note.ABI-tag：This Linux-specific section is structured as a note section in ELF specification

.note.gnu.build-id：A unique build ID

.note.GNU-stack：see Executable stack

.nvFatBinSegment：This segment contains information of nVidia's CUDA fat binary container. Its format is described by struct __cudaFatCudaBinaryRec in __cudaFatFormat.h

.plt：For dynamic binaries, this Procedure Linkage Table holds the trampoline/linkage code. See paragraphs below.

.preinit_array：Similar to .init_array section

.rela.dyn：Runtime/Dynamic relocation table.

For dynamic binaries, this relocation table holds information of variables which must be relocated upon loading. Each entry in this table is a struct Elf64_Rela (see /usr/include/elf.h) which has only three members:

offset (the variable's [usually position-independent] virtual memory address which holds the "patched" value during the relocation process)

info (Index into .dynsym section and Relocation Type)

addend

.rela.plt：Runtime/Dynamic relocation table.

This relocation table is similar to the one in .rela.dyn section; the difference is this one is for functions, not variables.

The relocation type of entries in this table is R_386_JMP_SLOT or R_X86_64_JUMP_SLOT and the "offset" refers to memory addresses which are inside .got.plt section.

Simply put, this table holds information to relocate entries in .got.plt section.

.rel.text / rela.text：Compile-time/Static relocation table.

For programs compiled with -c option, this section provides information to the link editor ld where and how to "patch" executable code in .text section.

The difference between .rel.text and .rela.text is entries in the former does not have addend member. (Compare struct Elf64_Rel with struct Elf64_Rela in /usr/include/elf.h) Instead, the addend is taken from the memory location described by offset member

Whether to use .rel or .rela is platform-dependent. For x86_32, it is .rel and for x86_64, .rela

.rel.XXX：Compile-time/Static relocation table for other sections. For example, .rela.init_array is the relocation table for .init_array section.

.rodata：Read-only data.

.shstrtab：NULL-terminated strings of section names.

One can use commands such as readelf -p .shstrtab a.out to see these strings.

.strtab：NULL-terminated strings of names of symbols in .symtab section.

One can use commands such as readelf -p .strtab a.out to see these strings.

.symtab：Compile-time/Static symbol table.

This is the main symbol table used in compile-time linking or runtime debugging.

The symbol names (as NULL-terminated strings) are stored in .strtab section.

Both .symtab and .symtab can be stripped away by the strip command.

.tbss：Similar to .bss section, but for Thread-Local data.

.tdata：Similar to .data section, but for Thread-Local data

.text：User's executable code

举例

源码和编译后对应section

源码和编译后对应section

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 10:34:33

.bss

.bss

Uninitialized global data ("Block Started by Symbol").

Depending on the compilers, uninitialized global variables could be stored in a nameness section called COMMON (named after Fortran 77's "common blocks".) To wit, consider the following code:

    int globalVar;
    static int globalStaticVar;
    void dummy() {
       static int localStaticVar;
    }

Compile with gcc -c, then on x86_64, the resulting object file has the following structure:

    $ objdump -t foo.o

    SYMBOL TABLE:
     ....
    0000000000000000 l     O .bss   0000000000000004 globalStaticVar
    0000000000000004 l     O .bss   0000000000000004 localStaticVar.1619
     ....
    0000000000000004       O *COM*  0000000000000004 globalVar

so only the file-scope and local-scope global variables are in the .bss section. If one wants globalVar to reside in the .bss section, use the -fno-common compiler command-line option. Using -fno-common is encouraged, as the following example shows:

    $ cat foo.c
    int globalVar;
    $ cat bar.c
    double globalVar;
    int main(){}
    $ gcc foo.c bar.c

Not only there is no error message about redefinition of the same symbol in both source files (notice we did not use the extern keyword here), there is no complaint about their different data types and sizes either. However, if one uses -fno-common, the compiler will complain:

    /tmp/ccM71JR7.o:(.bss+0x0): multiple definition of `globalVar'
    /tmp/ccIbS5MO.o:(.bss+0x0): first defined here
    ld: Warning: size of symbol `globalVar' changed from 8 in /tmp/ccIbS5MO.o to 4 in /tmp/ccM71JR7.o

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-02 17:36:04

segment段

Segment段

segment=段的类型和含义：

DYNAMIC：对于动态二进制，此段保存了动态链接信息

=ELF的链接视图时的：.dynamic节

GNU_EH_FRAME：Frame unwind information (EH = Exception Handling). This segment is usually the same as .eh_frame_hdr section in ELF's linking view.

GNU_RELRO：This segment indicates the memory region which should be made Read-Only after relocation is done. This segment usually appears in a dynamic link library and it contains .ctors, .dtors, .dynamic, .got sections. See paragraph below.

GNU_STACK：The permission flag of this segment indicates whether the stack is executable or not. This segment does not have any content; it is just an indicator.

INTERP：For dynamic binaries, this holds the full pathname of runtime linker ld.so

=ELF的链接视图时的：.interp节

LOAD：Loadable program segment. Only segments of this type are loaded into memory during execution.

NOTE：Auxiliary information.

For core dumps, this segment contains the status of the process (when the core dump is created), such as the signal (the process received and caused it to dump core), pending & held signals, process ID, parent process ID, user ID, nice value, cumulative user & system time, values of registers (including the program counter!)

For more info, see struct elf_prstatus and struct elf_prpsinfo in Linux kernel source file include/linux/elfcore.h and struct user_regs_struct in arch/x86/include/asm/user_64.h

TLS：Thread-Local Storage

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 09:58:51

ELF解析工具

ELF解析工具

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-20 22:24:10

读取信息

读取信息

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-20 22:24:10

Linux通用

Linux通用

readelf

objdump

rabin2

readelf对比objdump

readelf并不提供反汇编功能

readelf可以显示调试信息

objdump使用了bfd库进行文件读取

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 15:52:18

readelf

readelf

readelf

是什么：用来read读取elf格式的工具

作用：可以查看ELF格式文件的各种详细内容

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 15:50:44

安装

安装readelf

readelf是binutils中的其中一个工具

Mac中安装binutils

安装binutils

Intel Mac

brew install binutils

Apple Silicon Mac

arch -arm64 /opt/homebrew/bin/brew install binutils

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-02 21:40:20

用法

readelf用法

概述：

单个参数

显示头信息

file-header

-h=--file-header: 显示ELF文件头信息

readelf -h elfFile

program-headers

-l=--program-headers=--segments: 显示程序的头信息和段信息

readelf -l elfFile

section-headers

-S=--section-headers=--sections: 显示节的头信息

readelf -S elfFile

-s=--syms=--symbols: 显示符号表

readelf -s elfFile

-sV：显示符号表且带版本信息

-r=--relocs: 显示重定位信息

readelf -r elfFile

打印信息

以hex=十六进制=二进制方式

-x=--hex-dump=<number|name>

readelf -x .dynsym elfFile
readelf -x 8 elfFile

以string=字符串形式

-p=--string-dump=<number|name>

readelf -p .dynsym elfFile
readelf -p 8 elfFile

组合参数

-e=--headers=-h -l -S

readelf -e elfFile

-a=--all == -h -l -S -s -r -d -V -A -I

readelf -a elfFile

-sV=--syms --version-info: 显示符号表且带版本信息

readelf -sV elfFile

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 11:47:50

举例

readelf用法举例

举例说明：

输入文件：libtacker.so

➜  arm64-v8a pwd
/Users/crifan/dev/dev_root/androidReverse/popupSDK_libtacker/input/libtacker/arm64-v8a
➜  arm64-v8a ll
total 1664
-rw-------@ 1 crifan  staff   830K  6 29 22:27 libtacker.so

readelf解析ELF格式的libtacker.so的具体效果如下：

-h：显示ELF文件头信息

➜  arm64-v8a readelf -h libtacker.so
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine:                           AArch64
  Version:                           0x1
  Entry point address:               0x1a5c0
  Start of program headers:          64 (bytes into file)
  Start of section headers:          848344 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         9
  Size of section headers:           64 (bytes)
  Number of section headers:         27
  Section header string table index: 26

说明

Class：ELF64

Type: DYN (Shared object file)

动态链接库

Machine: AArch64 == arm64

Entry point address: 0x1a5c0

入口地址，应该就是之前的：_start入口函数

Number of program headers: 9

程序有9个header

Number of section headers: 27

有27个section header

-l：显示程序头信息和段信息

➜  arm64-v8a readelf -l libtacker.so

Elf file type is DYN (Shared object file)
Entry point 0x1a5c0
There are 9 program headers, starting at offset 64

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  PHDR           0x0000000000000040 0x0000000000000040 0x0000000000000040
                 0x00000000000001f8 0x00000000000001f8  R      0x8
  LOAD           0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x00000000000c9520 0x00000000000c9520  R E    0x1000
  LOAD           0x00000000000c9520 0x00000000000ca520 0x00000000000ca520
                 0x0000000000003510 0x0000000000003510  RW     0x1000
  LOAD           0x00000000000cca30 0x00000000000cea30 0x00000000000cea30
                 0x00000000000025d8 0x00000000000030b0  RW     0x1000
  DYNAMIC        0x00000000000cc618 0x00000000000cd618 0x00000000000cd618
                 0x00000000000001d0 0x00000000000001d0  RW     0x8
  GNU_RELRO      0x00000000000c9520 0x00000000000ca520 0x00000000000ca520
                 0x0000000000003510 0x0000000000003ae0  R      0x1
  GNU_EH_FRAME   0x000000000000fb2c 0x000000000000fb2c 0x000000000000fb2c
                 0x0000000000001dbc 0x0000000000001dbc  R      0x4
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RW     0x0
  NOTE           0x0000000000000238 0x0000000000000238 0x0000000000000238
                 0x00000000000000bc 0x00000000000000bc  R      0x4

 Section to Segment mapping:
  Segment Sections...
   00
   01     .note.android.ident .note.gnu.build-id .dynsym .gnu.version .gnu.version_r .gnu.hash .hash .dynstr .rela.dyn .rela.plt .gcc_except_table .rodata .eh_frame_hdr .eh_frame .text .plt
   02     .data.rel.ro .fini_array .init_array .dynamic .got .got.plt
   03     .data .bss
   04     .dynamic
   05     .data.rel.ro .fini_array .init_array .dynamic .got .got.plt
   06     .eh_frame_hdr
   07
   08     .note.android.ident .note.gnu.build-id

说明

PHDR：保存程序头表 （ Program header => PHDR）

LOAD：表示一个需要从二进制文件映射到虚拟地址空间的段，其中保存了常量数据（如字符串），程序目标代码等。

DYNAMIC：保存了由动态连接器（即INTERP段中指定的解释器）使用的信息。

INTERP：指定程序从可行性文件映射到内存之后，必须调用的解释器。它是通过链接其他库来满足未解析的引用，用于在虚拟地址空间中插入程序运行所需的动态库

-S： 显示节的头信息

➜  arm64-v8a readelf -S libtacker.so
There are 27 section headers, starting at offset 0xcf1d8:

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .note.androi[...] NOTE             0000000000000238  00000238
       0000000000000098  0000000000000000   A       0     0     4
  [ 2] .note.gnu.bu[...] NOTE             00000000000002d0  000002d0
       0000000000000024  0000000000000000   A       0     0     4
  [ 3] .dynsym           DYNSYM           00000000000002f8  000002f8
       0000000000000b10  0000000000000018   A       8     1     8
  [ 4] .gnu.version      VERSYM           0000000000000e08  00000e08
       00000000000000ec  0000000000000002   A       3     0     2
  [ 5] .gnu.version_r    VERNEED          0000000000000ef4  00000ef4
       0000000000000040  0000000000000000   A       8     2     4
  [ 6] .gnu.hash         GNU_HASH         0000000000000f38  00000f38
       00000000000001ec  0000000000000000   A       3     0     8
  [ 7] .hash             HASH             0000000000001124  00001124
       00000000000003b8  0000000000000004   A       3     0     4
  [ 8] .dynstr           STRTAB           00000000000014dc  000014dc
       0000000000000c19  0000000000000000   A       0     0     1
  [ 9] .rela.dyn         RELA             00000000000020f8  000020f8
       0000000000008850  0000000000000018   A       3     0     8
  [10] .rela.plt         RELA             000000000000a948  0000a948
       0000000000000450  0000000000000018  AI       3    22     8
  [11] .gcc_except_table PROGBITS         000000000000ad98  0000ad98
       0000000000001960  0000000000000000   A       0     0     4
  [12] .rodata           PROGBITS         000000000000c6f8  0000c6f8
       0000000000003434  0000000000000000 AMS       0     0     8
  [13] .eh_frame_hdr     PROGBITS         000000000000fb2c  0000fb2c
       0000000000001dbc  0000000000000000   A       0     0     4
  [14] .eh_frame         PROGBITS         00000000000118e8  000118e8
       0000000000008cd4  0000000000000000   A       0     0     8
  [15] .text             PROGBITS         000000000001a5c0  0001a5c0
       00000000000aec60  0000000000000000  AX       0     0     16
  [16] .plt              PROGBITS         00000000000c9220  000c9220
       0000000000000300  0000000000000000  AX       0     0     16
  [17] .data.rel.ro      PROGBITS         00000000000ca520  000c9520
       0000000000002eb8  0000000000000000  WA       0     0     8
  [18] .fini_array       FINI_ARRAY       00000000000cd3d8  000cc3d8
       0000000000000010  0000000000000000  WA       0     0     8
  [19] .init_array       INIT_ARRAY       00000000000cd3e8  000cc3e8
       0000000000000230  0000000000000000  WA       0     0     8
  [20] .dynamic          DYNAMIC          00000000000cd618  000cc618
       00000000000001d0  0000000000000010  WA       8     0     8
  [21] .got              PROGBITS         00000000000cd7e8  000cc7e8
       00000000000000c0  0000000000000000  WA       0     0     8
  [22] .got.plt          PROGBITS         00000000000cd8a8  000cc8a8
       0000000000000188  0000000000000000  WA       0     0     8
  [23] .data             PROGBITS         00000000000cea30  000cca30
       00000000000025d8  0000000000000000  WA       0     0     16
  [24] .bss              NOBITS           00000000000d1010  000cf008
       0000000000000ad0  0000000000000000  WA       0     0     16
  [25] .comment          PROGBITS         0000000000000000  000cf008
       00000000000000c6  0000000000000001  MS       0     0     1
  [26] .shstrtab         STRTAB           0000000000000000  000cf0ce
       0000000000000104  0000000000000000           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),
  D (mbind), p (processor specific)

-r：显示重定位信息

➜  arm64-v8a readelf -r libtacker.so
。。。
0000000cd3f0  007100000101 R_AARCH64_ABS64   000000000002b930 .datadiv_decode17[...] + 0
0000000cd430  007200000101 R_AARCH64_ABS64   0000000000039464 .datadiv_decode17[...] + 0
0000000cd498  007300000101 R_AARCH64_ABS64   000000000005c790 .datadiv_decode15[...] + 0
0000000cd4b0  007400000101 R_AARCH64_ABS64   000000000005ed50 .datadiv_decode15[...] + 0
0000000cd5d8  007500000101 R_AARCH64_ABS64   00000000000a5e74 .datadiv_decode54[...] + 0

Relocation section '.rela.plt' at offset 0xa948 contains 46 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
0000000cd8c0  000100000402 R_AARCH64_JUMP_SL 0000000000000000 __cxa_finalize@LIBC + 0
0000000cd8c8  000200000402 R_AARCH64_JUMP_SL 0000000000000000 __cxa_atexit@LIBC + 0
0000000cd8d0  000300000402 R_AARCH64_JUMP_SL 0000000000000000 __android_log_print + 0
0000000cd8d8  000400000402 R_AARCH64_JUMP_SL 0000000000000000 __stack_chk_fail@LIBC + 0
0000000cd8e0  000500000402 R_AARCH64_JUMP_SL 0000000000000000 memset@LIBC + 0
0000000cd8e8  000600000402 R_AARCH64_JUMP_SL 0000000000000000 strncpy@LIBC + 0
0000000cd8f0  000700000402 R_AARCH64_JUMP_SL 0000000000000000 strncat@LIBC + 0
0000000cd8f8  000800000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_self@LIBC + 0
0000000cd900  000900000402 R_AARCH64_JUMP_SL 0000000000000000 malloc@LIBC + 0
0000000cd908  000a00000402 R_AARCH64_JUMP_SL 0000000000000000 free@LIBC + 0
0000000cd910  000b00000402 R_AARCH64_JUMP_SL 0000000000000000 posix_memalign@LIBC + 0
0000000cd918  000d00000402 R_AARCH64_JUMP_SL 0000000000000000 vfprintf@LIBC + 0
0000000cd920  000e00000402 R_AARCH64_JUMP_SL 0000000000000000 fputc@LIBC + 0
0000000cd928  000f00000402 R_AARCH64_JUMP_SL 0000000000000000 vasprintf@LIBC + 0
0000000cd930  001000000402 R_AARCH64_JUMP_SL 0000000000000000 android_set_abort[...]@LIBC + 0
0000000cd938  001100000402 R_AARCH64_JUMP_SL 0000000000000000 openlog@LIBC + 0
0000000cd940  001200000402 R_AARCH64_JUMP_SL 0000000000000000 syslog@LIBC + 0
0000000cd948  001300000402 R_AARCH64_JUMP_SL 0000000000000000 closelog@LIBC + 0
0000000cd950  001400000402 R_AARCH64_JUMP_SL 0000000000000000 abort@LIBC + 0
0000000cd958  001500000402 R_AARCH64_JUMP_SL 0000000000000000 strlen@LIBC + 0
0000000cd960  001600000402 R_AARCH64_JUMP_SL 0000000000000000 realloc@LIBC + 0
0000000cd968  001700000402 R_AARCH64_JUMP_SL 0000000000000000 memmove@LIBC + 0
0000000cd970  001800000402 R_AARCH64_JUMP_SL 0000000000000000 __memmove_chk@LIBC + 0
0000000cd978  001900000402 R_AARCH64_JUMP_SL 0000000000000000 __strlen_chk@LIBC + 0
0000000cd980  001a00000402 R_AARCH64_JUMP_SL 0000000000000000 memchr@LIBC + 0
0000000cd988  001b00000402 R_AARCH64_JUMP_SL 0000000000000000 __vsnprintf_chk@LIBC + 0
0000000cd990  001c00000402 R_AARCH64_JUMP_SL 0000000000000000 memcpy@LIBC + 0
0000000cd998  001d00000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_mutex_lock@LIBC + 0
0000000cd9a0  001e00000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_mutex_unlock@LIBC + 0
0000000cd9a8  001f00000402 R_AARCH64_JUMP_SL 0000000000000000 calloc@LIBC + 0
0000000cd9b0  002000000402 R_AARCH64_JUMP_SL 0000000000000000 strcmp@LIBC + 0
0000000cd9b8  002100000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_getspecific@LIBC + 0
0000000cd9c0  002200000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_once@LIBC + 0
0000000cd9c8  002300000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_setspecific@LIBC + 0
0000000cd9d0  002400000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_key_delete@LIBC + 0
0000000cd9d8  002500000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_key_create@LIBC + 0
0000000cd9e0  002600000402 R_AARCH64_JUMP_SL 0000000000000000 getauxval@LIBC + 0
0000000cd9e8  002700000402 R_AARCH64_JUMP_SL 0000000000000000 __system_property_get@LIBC + 0
0000000cd9f0  002800000402 R_AARCH64_JUMP_SL 0000000000000000 strncmp@LIBC + 0
0000000cd9f8  002900000402 R_AARCH64_JUMP_SL 0000000000000000 fprintf@LIBC + 0
0000000cda00  002a00000402 R_AARCH64_JUMP_SL 0000000000000000 fflush@LIBC + 0
0000000cda08  002b00000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_rwlock_wrlock@LIBC + 0
0000000cda10  002c00000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_rwlock_unlock@LIBC + 0
0000000cda18  002d00000402 R_AARCH64_JUMP_SL 0000000000000000 dl_iterate_phdr@LIBC + 0
0000000cda20  002e00000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_rwlock_rdlock@LIBC + 0
0000000cda28  002f00000402 R_AARCH64_JUMP_SL 0000000000000000 fwrite@LIBC + 0

看出来了，前面的：

-r --relocs Display the relocations (if present)

输出：

Relocation section '.rela.dyn' at offset 0x20f8 contains 1454 entries

Relocation section '.rela.plt' at offset 0xa948 contains 46 entries == Imports

-s：显示符号表

Symbol table '.dynsym' contains 118 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __cxa_f[...]@LIBC (2)
     2: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __cxa_atexit@LIBC (2)
     3: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __android_log_print
     4: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __stack[...]@LIBC (2)
     5: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND memset@LIBC (2)
     6: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strncpy@LIBC (2)
     7: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strncat@LIBC (2)
     8: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread_self@LIBC (2)
     9: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND malloc@LIBC (2)
    10: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND free@LIBC (2)
    11: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND posix_m[...]@LIBC (2)
    12: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  UND __sF@LIBC (2)
    13: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND vfprintf@LIBC (2)
    14: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fputc@LIBC (2)
    15: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND vasprintf@LIBC (2)
    16: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND android[...]@LIBC (2)
    17: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND openlog@LIBC (2)
    18: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND syslog@LIBC (2)
    19: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND closelog@LIBC (2)
    20: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND abort@LIBC (2)
    21: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strlen@LIBC (2)
    22: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND realloc@LIBC (2)
    23: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND memmove@LIBC (2)
    24: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __memmo[...]@LIBC (2)
    25: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __strlen_chk@LIBC (2)
    26: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND memchr@LIBC (2)
    27: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __vsnpr[...]@LIBC (2)
    28: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND memcpy@LIBC (2)
    29: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    30: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    31: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND calloc@LIBC (2)
    32: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strcmp@LIBC (2)
    33: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    34: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread_once@LIBC (2)
    35: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    36: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    37: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    38: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND getauxval@LIBC (2)
    39: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __syste[...]@LIBC (2)
    40: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strncmp@LIBC (2)
    41: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fprintf@LIBC (2)
    42: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fflush@LIBC (2)
    43: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    44: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    45: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND dl_iter[...]@LIBC (3)
    46: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    47: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fwrite@LIBC (2)
    48: 0000000000044ce8  6608 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    49: 0000000000078a04  2696 FUNC    GLOBAL DEFAULT   15 .datadiv_decode9[...]
    50: 00000000000a8a58  3892 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    51: 0000000000076128  2160 FUNC    GLOBAL DEFAULT   15 .datadiv_decode4[...]
    52: 000000000008f8e8  8740 FUNC    GLOBAL DEFAULT   15 .datadiv_decode9[...]
...
    70: 000000000008e650  3772 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    71: 00000000000381fc  3696 FUNC    GLOBAL DEFAULT   15 .datadiv_decode3[...]
    72: 000000000006f220  3892 FUNC    GLOBAL DEFAULT   15 .datadiv_decode8[...]
    73: 00000000000a8884     4 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    74: 00000000000aa438  1436 FUNC    GLOBAL DEFAULT   15 JNI_OnLoad
    75: 0000000000026d98 18656 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    76: 0000000000033a2c 11972 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
...
   116: 000000000005ed50  6304 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
   117: 00000000000a5e74     4 FUNC    GLOBAL DEFAULT   15 .datadiv_decode5[...]

-sV：显示符号表且带版本信息

  -s --syms              Display the symbol table
  -V --version-info      Display the version sections (if present)

->

➜  arm64-v8a readelf -sV libtacker.so

Symbol table '.dynsym' contains 118 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __cxa_f[...]@LIBC (2)
     2: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __cxa_atexit@LIBC (2)
     3: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __android_log_print
     4: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __stack[...]@LIBC (2)
     5: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND memset@LIBC (2)
     6: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strncpy@LIBC (2)
     7: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strncat@LIBC (2)
     8: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread_self@LIBC (2)
     9: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND malloc@LIBC (2)
    10: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND free@LIBC (2)
    11: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND posix_m[...]@LIBC (2)
    12: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  UND __sF@LIBC (2)
    13: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND vfprintf@LIBC (2)
    14: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fputc@LIBC (2)
    15: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND vasprintf@LIBC (2)
    16: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND android[...]@LIBC (2)
    17: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND openlog@LIBC (2)
    18: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND syslog@LIBC (2)
    19: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND closelog@LIBC (2)
    20: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND abort@LIBC (2)
    21: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strlen@LIBC (2)
    22: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND realloc@LIBC (2)
    23: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND memmove@LIBC (2)
    24: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __memmo[...]@LIBC (2)
    25: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __strlen_chk@LIBC (2)
    26: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND memchr@LIBC (2)
    27: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __vsnpr[...]@LIBC (2)
    28: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND memcpy@LIBC (2)
    29: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    30: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    31: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND calloc@LIBC (2)
    32: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strcmp@LIBC (2)
    33: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    34: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread_once@LIBC (2)
    35: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    36: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    37: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    38: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND getauxval@LIBC (2)
    39: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __syste[...]@LIBC (2)
    40: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strncmp@LIBC (2)
    41: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fprintf@LIBC (2)
    42: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fflush@LIBC (2)
    43: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    44: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    45: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND dl_iter[...]@LIBC (3)
    46: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    47: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fwrite@LIBC (2)
    48: 0000000000044ce8  6608 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    49: 0000000000078a04  2696 FUNC    GLOBAL DEFAULT   15 .datadiv_decode9[...]
    50: 00000000000a8a58  3892 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    51: 0000000000076128  2160 FUNC    GLOBAL DEFAULT   15 .datadiv_decode4[...]
    52: 000000000008f8e8  8740 FUNC    GLOBAL DEFAULT   15 .datadiv_decode9[...]
    53: 00000000000523ec 10992 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    54: 0000000000055f24 26664 FUNC    GLOBAL DEFAULT   15 .datadiv_decode3[...]
    55: 000000000005ca48  6228 FUNC    GLOBAL DEFAULT   15 .datadiv_decode8[...]
    56: 0000000000072b58 13248 FUNC    GLOBAL DEFAULT   15 .datadiv_decode6[...]
    57: 000000000009f204  6296 FUNC    GLOBAL DEFAULT   15 .datadiv_decode5[...]
    58: 0000000000032490  4596 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    59: 00000000000642dc 21616 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    60: 000000000007eb38     4 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    61: 0000000000091c0c  3612 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    62: 0000000000099d00  3748 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    63: 000000000004a620 24816 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    64: 0000000000079c64 15120 FUNC    GLOBAL DEFAULT   15 .datadiv_decode9[...]
    65: 0000000000089d58  8212 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    66: 000000000009bf84     4 FUNC    GLOBAL DEFAULT   15 .datadiv_decode8[...]
    67: 000000000007ee60  7596 FUNC    GLOBAL DEFAULT   15 .datadiv_decode5[...]
    68: 0000000000083388 16340 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    69: 00000000000890a8  2684 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    70: 000000000008e650  3772 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    71: 00000000000381fc  3696 FUNC    GLOBAL DEFAULT   15 .datadiv_decode3[...]
    72: 000000000006f220  3892 FUNC    GLOBAL DEFAULT   15 .datadiv_decode8[...]
    73: 00000000000a8884     4 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    74: 00000000000aa438  1436 FUNC    GLOBAL DEFAULT   15 JNI_OnLoad
    75: 0000000000026d98 18656 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    76: 0000000000033a2c 11972 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    77: 000000000003c8dc  8072 FUNC    GLOBAL DEFAULT   15 .datadiv_decode5[...]
    78: 00000000000783f8  1112 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    79: 00000000000402e0 18000 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    80: 0000000000050d58  3556 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    81: 00000000000a0f34 12764 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    82: 000000000002fa98  1716 FUNC    GLOBAL DEFAULT   15 .datadiv_decode8[...]
    83: 0000000000050850  1052 FUNC    GLOBAL DEFAULT   15 .datadiv_decode5[...]
    84: 000000000005e3ac  1512 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    85: 000000000007058c  8700 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    86: 0000000000076aa0  5588 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    87: 000000000007d9ac  4264 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    88: 0000000000092dc0  6148 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    89: 000000000002e2bc  5636 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    90: 000000000007eac4     4 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    91: 0000000000087514  6800 FUNC    GLOBAL DEFAULT   15 .datadiv_decode4[...]
    92: 00000000000a4228  1888 FUNC    GLOBAL DEFAULT   15 .datadiv_decode6[...]
    93: 00000000000a6a74  7124 FUNC    GLOBAL DEFAULT   15 .datadiv_decode8[...]
    94: 0000000000046ba4 12236 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    95: 0000000000080db8  7204 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    96: 000000000008bfc4  4784 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    97: 0000000000094aac 10132 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    98: 000000000003b9c0  2832 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    99: 000000000006a31c 19572 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
   100: 000000000008d4fc  3852 FUNC    GLOBAL DEFAULT   15 .datadiv_decode6[...]
   101: 000000000009af44  4076 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
   102: 00000000000aa164     4 FUNC    GLOBAL DEFAULT   15 .datadiv_decode8[...]
   103: 0000000000030db4  5388 FUNC    GLOBAL DEFAULT   15 .datadiv_decode8[...]
   104: 0000000000060904 10444 FUNC    GLOBAL DEFAULT   15 .datadiv_decode2[...]
   105: 00000000000979f8  8736 FUNC    GLOBAL DEFAULT   15 .datadiv_decode2[...]
   106: 000000000009c3ec 11308 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
   107: 00000000000a4be8  4636 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
   108: 00000000000a5f84  2352 FUNC    GLOBAL DEFAULT   15 .datadiv_decode5[...]
   109: 00000000000aa9d4  5616 FUNC    GLOBAL DEFAULT   15 .datadiv_decode2[...]
   110: 0000000000036ab8  3832 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
   111: 000000000003b2ac     4 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
   112: 000000000003b8fc     4 FUNC    GLOBAL DEFAULT   15 .datadiv_decode7[...]
   113: 000000000002b930 10168 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
   114: 0000000000039464  7640 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
   115: 000000000005c790     4 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
   116: 000000000005ed50  6304 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
   117: 00000000000a5e74     4 FUNC    GLOBAL DEFAULT   15 .datadiv_decode5[...]

Version symbols section '.gnu.version' contains 118 entries:
 Addr: 0x0000000000000e08  Offset: 0x00000e08  Link: 3 (.dynsym)
  000:   0 (*local*)       2 (LIBC)          2 (LIBC)          1 (*global*)
  004:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  008:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  00c:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  010:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  014:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  018:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  01c:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  020:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  024:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  028:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  02c:   2 (LIBC)          3 (LIBC)          2 (LIBC)          2 (LIBC)
  030:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  034:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  038:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  03c:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  040:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  044:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  048:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  04c:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  050:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  054:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  058:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  05c:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  060:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  064:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  068:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  06c:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  070:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  074:   1 (*global*)      1 (*global*)

Version needs section '.gnu.version_r' contains 2 entries:
 Addr: 0x0000000000000ef4  Offset: 0x00000ef4  Link: 8 (.dynstr)
  000000: Version: 1  File: libdl.so  Cnt: 1
  0x0020:   Name: LIBC  Flags: none  Version: 3
  0x0010: Version: 1  File: libc.so  Cnt: 1
  0x0030:   Name: LIBC  Flags: none  Version: 2

比普通的-s，多出了版本信息：

.gnu.version

.gnu.version_r

-x：以hex方式打印信息

举例1

对于：

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
...
  [ 3] .dynsym           DYNSYM           00000000000002f8  000002f8
       0000000000000b10  0000000000000018   A       8     1     8

中的：

[ 3] .dynsym

去打印信息：

➜  arm64-v8a readelf -x .dynsym libtacker.so

Hex dump of section '.dynsym':
  0x000002f8 00000000 00000000 00000000 00000000 ................
  0x00000308 00000000 00000000 01000000 12000000 ................
  0x00000318 00000000 00000000 00000000 00000000 ................
  0x00000328 10000000 12000000 00000000 00000000 ................
  0x00000338 00000000 00000000 1d000000 12000000 ................
  0x00000348 00000000 00000000 00000000 00000000 ................
  0x00000358 31000000 12000000 00000000 00000000 1...............
  0x00000368 00000000 00000000 34020000 12000000 ........4.......
  0x00000378 00000000 00000000 00000000 00000000 ................
  0x00000388 3b020000 12000000 00000000 00000000 ;...............
  0x00000398 00000000 00000000 43020000 12000000 ........C.......
  0x000003a8 00000000 00000000 00000000 00000000 ................
  0x000003b8 81090000 12000000 00000000 00000000 ................
  0x000003c8 00000000 00000000 030a0000 12000000 ................
  0x000003d8 00000000 00000000 00000000 00000000 ................
  0x000003e8 0a0a0000 12000000 00000000 00000000 ................
  0x000003f8 00000000 00000000 0f0a0000 12000000 ................
  0x00000408 00000000 00000000 00000000 00000000 ................
  0x00000418 1e0a0000 11000000 00000000 00000000 ................
  0x00000428 00000000 00000000 230a0000 12000000 ........#.......
  0x00000438 00000000 00000000 00000000 00000000 ................
  0x00000448 2c0a0000 12000000 00000000 00000000 ,...............
  0x00000458 00000000 00000000 320a0000 12000000 ........2.......
  0x00000468 00000000 00000000 00000000 00000000 ................
  0x00000478 3c0a0000 12000000 00000000 00000000 <...............
  0x00000488 00000000 00000000 560a0000 12000000 ........V.......
  0x00000498 00000000 00000000 00000000 00000000 ................
  0x000004a8 5e0a0000 12000000 00000000 00000000 ^...............
  0x000004b8 00000000 00000000 650a0000 12000000 ........e.......
  0x000004c8 00000000 00000000 00000000 00000000 ................
  0x000004d8 6e0a0000 12000000 00000000 00000000 n...............
  0x000004e8 00000000 00000000 740a0000 12000000 ........t.......
  0x000004f8 00000000 00000000 00000000 00000000 ................
  0x00000508 7b0a0000 12000000 00000000 00000000 {...............
  0x00000518 00000000 00000000 830a0000 12000000 ................
  0x00000528 00000000 00000000 00000000 00000000 ................
  0x00000538 8b0a0000 12000000 00000000 00000000 ................
  0x00000548 00000000 00000000 990a0000 12000000 ................
  0x00000558 00000000 00000000 00000000 00000000 ................
  0x00000568 a60a0000 12000000 00000000 00000000 ................
  0x00000578 00000000 00000000 ad0a0000 12000000 ................
  0x00000588 00000000 00000000 00000000 00000000 ................
  0x00000598 bd0a0000 12000000 00000000 00000000 ................
  0x000005a8 00000000 00000000 c40a0000 12000000 ................
  0x000005b8 00000000 00000000 00000000 00000000 ................
  0x000005c8 d70a0000 12000000 00000000 00000000 ................
  0x000005d8 00000000 00000000 ec0a0000 12000000 ................
  0x000005e8 00000000 00000000 00000000 00000000 ................
  0x000005f8 f30a0000 12000000 00000000 00000000 ................
  0x00000608 00000000 00000000 fa0a0000 12000000 ................
  0x00000618 00000000 00000000 00000000 00000000 ................
  0x00000628 0e0b0000 12000000 00000000 00000000 ................
  0x00000638 00000000 00000000 1b0b0000 12000000 ................
  0x00000648 00000000 00000000 00000000 00000000 ................
  0x00000658 2f0b0000 12000000 00000000 00000000 /...............
  0x00000668 00000000 00000000 420b0000 12000000 ........B.......
  0x00000678 00000000 00000000 00000000 00000000 ................
  0x00000688 550b0000 12000000 00000000 00000000 U...............
  0x00000698 00000000 00000000 5f0b0000 12000000 ........_.......
  0x000006a8 00000000 00000000 00000000 00000000 ................
  0x000006b8 750b0000 12000000 00000000 00000000 u...............
  0x000006c8 00000000 00000000 7d0b0000 12000000 ........}.......
  0x000006d8 00000000 00000000 00000000 00000000 ................
  0x000006e8 850b0000 12000000 00000000 00000000 ................
  0x000006f8 00000000 00000000 8c0b0000 12000000 ................
  0x00000708 00000000 00000000 00000000 00000000 ................
  0x00000718 a20b0000 12000000 00000000 00000000 ................
  0x00000728 00000000 00000000 b80b0000 12000000 ................
  0x00000738 00000000 00000000 00000000 00000000 ................
  0x00000748 c80b0000 12000000 00000000 00000000 ................
  0x00000758 00000000 00000000 de0b0000 12000000 ................
  0x00000768 00000000 00000000 00000000 00000000 ................
  0x00000778 6f020000 12000f00 e84c0400 00000000 o........L......
  0x00000788 d0190000 00000000 37050000 12000f00 ........7.......
  0x00000798 048a0700 00000000 880a0000 00000000 ................
  0x000007a8 8e090000 12000f00 588a0a00 00000000 ........X.......
  0x000007b8 340f0000 00000000 cc040000 12000f00 4...............
  0x000007c8 28610700 00000000 70080000 00000000 (a......p.......
  0x000007d8 29070000 12000f00 e8f80800 00000000 )...............
  0x000007e8 24220000 00000000 22030000 12000f00 $"......".......
  0x000007f8 ec230500 00000000 f02a0000 00000000 .#.......*......
  0x00000808 46030000 12000f00 245f0500 00000000 F.......$_......
  0x00000818 28680000 00000000 8c030000 12000f00 (h..............
  0x00000828 48ca0500 00000000 54180000 00000000 H.......T.......
  0x00000838 a9040000 12000f00 582b0700 00000000 ........X+......
  0x00000848 c0330000 00000000 67080000 12000f00 .3......g.......
  0x00000858 04f20900 00000000 98180000 00000000 ................
  0x00000868 f4000000 12000f00 90240300 00000000 .........$......
  0x00000878 f4110000 00000000 1a040000 12000f00 ................
  0x00000888 dc420600 00000000 70540000 00000000 .B......pT......
  0x00000898 c5050000 12000f00 38eb0700 00000000 ........8.......
  0x000008a8 04000000 00000000 4c070000 12000f00 ........L.......
  0x000008b8 0c1c0900 00000000 1c0e0000 00000000 ................
  0x000008c8 d8070000 12000f00 009d0900 00000000 ................
  0x000008d8 a40e0000 00000000 b7020000 12000f00 ................
  0x000008e8 20a60400 00000000 f0600000 00000000  ........`......
  0x000008f8 5a050000 12000f00 649c0700 00000000 Z.......d.......
  0x00000908 103b0000 00000000 9a060000 12000f00 .;..............
  0x00000918 589d0800 00000000 14200000 00000000 X........ ......
  0x00000928 20080000 12000f00 84bf0900 00000000  ...............
  0x00000938 04000000 00000000 e9050000 12000f00 ................
  0x00000948 60ee0700 00000000 ac1d0000 00000000 `...............
  0x00000958 2f060000 12000f00 88330800 00000000 /........3......
  0x00000968 d43f0000 00000000 76060000 12000f00 .?......v.......
  0x00000978 a8900800 00000000 7c0a0000 00000000 ........|.......
  0x00000988 05070000 12000f00 50e60800 00000000 ........P.......
  0x00000998 bc0e0000 00000000 60010000 12000f00 ........`.......
  0x000009a8 fc810300 00000000 700e0000 00000000 ........p.......
  0x000009b8 62040000 12000f00 20f20600 00000000 b....... .......
  0x000009c8 340f0000 00000000 5d090000 12000f00 4.......].......
  0x000009d8 84880a00 00000000 04000000 00000000 ................
  0x000009e8 d5090000 12000f00 38a40a00 00000000 ........8.......
  0x000009f8 9c050000 00000000 42000000 12000f00 ........B.......
  0x00000a08 986d0200 00000000 e0480000 00000000 .m.......H......
  0x00000a18 18010000 12000f00 2c3a0300 00000000 ........,:......
  0x00000a28 c42e0000 00000000 11020000 12000f00 ................
  0x00000a38 dcc80300 00000000 881f0000 00000000 ................
  0x00000a48 13050000 12000f00 f8830700 00000000 ................
  0x00000a58 58040000 00000000 4b020000 12000f00 X.......K.......
  0x00000a68 e0020400 00000000 50460000 00000000 ........PF......
  0x00000a78 fe020000 12000f00 580d0500 00000000 ........X.......
  0x00000a88 e40d0000 00000000 8a080000 12000f00 ................
  0x00000a98 340f0a00 00000000 dc310000 00000000 4........1......
  0x00000aa8 ae000000 12000f00 98fa0200 00000000 ................
  0x00000ab8 b4060000 00000000 db020000 12000f00 ................
  0x00000ac8 50080500 00000000 1c040000 00000000 P...............
  0x00000ad8 af030000 12000f00 ace30500 00000000 ................
  0x00000ae8 e8050000 00000000 85040000 12000f00 ................
  0x00000af8 8c050700 00000000 fc210000 00000000 .........!......
  0x00000b08 ef040000 12000f00 a06a0700 00000000 .........j......
  0x00000b18 d4150000 00000000 7d050000 12000f00 ........}.......
  0x00000b28 acd90700 00000000 a8100000 00000000 ................
  0x00000b38 6e070000 12000f00 c02d0900 00000000 n........-......
  0x00000b48 04180000 00000000 8a000000 12000f00 ................
  0x00000b58 bce20200 00000000 04160000 00000000 ................
  0x00000b68 a1050000 12000f00 c4ea0700 00000000 ................
  0x00000b78 04000000 00000000 53060000 12000f00 ........S.......
  0x00000b88 14750800 00000000 901a0000 00000000 .u..............
  0x00000b98 ae080000 12000f00 28420a00 00000000 ........(B......
  0x00000ba8 60070000 00000000 3a090000 12000f00 `.......:.......
  0x00000bb8 746a0a00 00000000 d41b0000 00000000 tj..............
  0x00000bc8 93020000 12000f00 a46b0400 00000000 .........k......
  0x00000bd8 cc2f0000 00000000 0c060000 12000f00 ./..............
  0x00000be8 b80d0800 00000000 241c0000 00000000 ........$.......
  0x00000bf8 be060000 12000f00 c4bf0800 00000000 ................
  0x00000c08 b0120000 00000000 92070000 12000f00 ................
  0x00000c18 ac4a0900 00000000 94270000 00000000 .J.......'......
  0x00000c28 ee010000 12000f00 c0b90300 00000000 ................
  0x00000c38 100b0000 00000000 3e040000 12000f00 ........>.......
  0x00000c48 1ca30600 00000000 744c0000 00000000 ........tL......
  0x00000c58 e2060000 12000f00 fcd40800 00000000 ................
  0x00000c68 0c0f0000 00000000 fc070000 12000f00 ................
  0x00000c78 44af0900 00000000 ec0f0000 00000000 D...............
  0x00000c88 b2090000 12000f00 64a10a00 00000000 ........d.......
  0x00000c98 04000000 00000000 d1000000 12000f00 ................
  0x00000ca8 b40d0300 00000000 0c150000 00000000 ................
  0x00000cb8 f7030000 12000f00 04090600 00000000 ................
  0x00000cc8 cc280000 00000000 b6070000 12000f00 .(..............
  0x00000cd8 f8790900 00000000 20220000 00000000 .y...... "......
  0x00000ce8 43080000 12000f00 ecc30900 00000000 C...............
  0x00000cf8 2c2c0000 00000000 d1080000 12000f00 ,,..............
  0x00000d08 e84b0a00 00000000 1c120000 00000000 .K..............
  0x00000d18 17090000 12000f00 845f0a00 00000000 ........._......
  0x00000d28 30090000 00000000 e0090000 12000f00 0...............
  0x00000d38 d4a90a00 00000000 f0150000 00000000 ................
  0x00000d48 3c010000 12000f00 b86a0300 00000000 <........j......
  0x00000d58 f80e0000 00000000 a7010000 12000f00 ................
  0x00000d68 acb20300 00000000 04000000 00000000 ................
  0x00000d78 cb010000 12000f00 fcb80300 00000000 ................
  0x00000d88 04000000 00000000 66000000 12000f00 ........f.......
  0x00000d98 30b90200 00000000 b8270000 00000000 0........'......
  0x00000da8 83010000 12000f00 64940300 00000000 ........d.......
  0x00000db8 d81d0000 00000000 69030000 12000f00 ........i.......
  0x00000dc8 90c70500 00000000 04000000 00000000 ................
  0x00000dd8 d3030000 12000f00 50ed0500 00000000 ........P.......
  0x00000de8 a0180000 00000000 f4080000 12000f00 ................
  0x00000df8 745e0a00 00000000 04000000 00000000 t^..............

举例2

对于：

  [ 8] .dynstr           STRTAB           00000000000014dc  000014dc
       0000000000000c19  0000000000000000   A       0     0     1

去打印信息：

➜  arm64-v8a readelf -x 8 libtacker.so

Hex dump of section '.dynstr':
  0x000014dc 005f5f63 78615f66 696e616c 697a6500 .__cxa_finalize.
  0x000014ec 5f5f6378 615f6174 65786974 005f5f61 __cxa_atexit.__a
  0x000014fc 6e64726f 69645f6c 6f675f70 72696e74 ndroid_log_print
  0x0000150c 005f5f73 7461636b 5f63686b 5f666169 .__stack_chk_fai
  0x0000151c 6c002e64 61746164 69765f64 65636f64 l..datadiv_decod
  0x0000152c 65313233 33353032 37323838 39353431 e123350272889541
  0x0000153c 32343732 33002e64 61746164 69765f64 24723..datadiv_d
  0x0000154c 65636f64 65313738 33383633 36333233 ecode17838636323
  0x0000155c 31393833 31303134 32002e64 61746164 198310142..datad
  0x0000156c 69765f64 65636f64 65313833 32383431 iv_decode1832841
  0x0000157c 37353239 34353435 34373030 34002e64 7529454547004..d
  0x0000158c 61746164 69765f64 65636f64 65383935 atadiv_decode895
  0x0000159c 32323436 38353132 36353037 30333639 2246851265070369
  0x000015ac 002e6461 74616469 765f6465 636f6465 ..datadiv_decode
  0x000015bc 38303130 32383830 33383333 39383933 8010288038339893
  0x000015cc 36303700 2e646174 61646976 5f646563 607..datadiv_dec
...
  0x00001d8c 61746164 69765f64 65636f64 65363430 atadiv_decode640
  0x00001d9c 35373231 36383033 35343634 39323630 5721680354649260
  0x00001dac 002e6461 74616469 765f6465 636f6465 ..datadiv_decode
  0x00001dbc 31363339 32363237 32383730 36373831 1639262728706781
  0x00001dcc 33303800 2e646174 61646976 5f646563 308..datadiv_dec
  0x00001ddc 6f646535 34353434 30363535 32303137 ode5454406552017
  0x00001dec 35353732 3936002e 64617461 6469765f 557296..datadiv_
  0x00001dfc 6465636f 64653535 33333233 36323439 decode5533236249
  0x00001e0c 31393233 32383335 35002e64 61746164 192328355..datad
  0x00001e1c 69765f64 65636f64 65383331 36333831 iv_decode8316381
  0x00001e2c 34383032 38383136 37353335 002e6461 480288167535..da
  0x00001e3c 74616469 765f6465 636f6465 31313730 tadiv_decode1170
  0x00001e4c 36313031 34313432 39353232 35393132 6101414295225912
  0x00001e5c 00707468 72656164 5f73656c 66002e64 .pthread_self..d
  0x00001e6c 61746164 69765f64 65636f64 65313437 atadiv_decode147
  0x00001e7c 31363230 32313831 34383632 32333832 1620218148622382
  0x00001e8c 32002e64 61746164 69765f64 65636f64 2..datadiv_decod
  0x00001e9c 65383735 38383430 37353530 32343830 e875884075502480
  0x00001eac 31313630 004a4e49 5f4f6e4c 6f616400 1160.JNI_OnLoad.
  0x00001ebc 2e646174 61646976 5f646563 6f646532 .datadiv_decode2
  0x00001ecc 34343434 39373231 32363930 38313033 4444972126908103
  0x00001edc 3630006d 616c6c6f 63006672 65650070 60.malloc.free.p
  0x00001eec 6f736978 5f6d656d 616c6967 6e005f5f osix_memalign.__
  0x00001efc 73460076 66707269 6e746600 66707574 sF.vfprintf.fput
  0x00001f0c 63007661 73707269 6e746600 616e6472 c.vasprintf.andr
  0x00001f1c 6f69645f 7365745f 61626f72 745f6d65 oid_set_abort_me
  0x00001f2c 73736167 65006f70 656e6c6f 67007379 ssage.openlog.sy
  0x00001f3c 736c6f67 00636c6f 73656c6f 67006162 slog.closelog.ab
  0x00001f4c 6f727400 7374726c 656e0072 65616c6c ort.strlen.reall
  0x00001f5c 6f63006d 656d6d6f 7665005f 5f6d656d oc.memmove.__mem
  0x00001f6c 6d6f7665 5f63686b 005f5f73 74726c65 move_chk.__strle
  0x00001f7c 6e5f6368 6b006d65 6d636872 005f5f76 n_chk.memchr.__v
  0x00001f8c 736e7072 696e7466 5f63686b 006d656d snprintf_chk.mem
  0x00001f9c 63707900 70746872 6561645f 6d757465 cpy.pthread_mute
  0x00001fac 785f6c6f 636b0070 74687265 61645f6d x_lock.pthread_m
  0x00001fbc 75746578 5f756e6c 6f636b00 63616c6c utex_unlock.call
  0x00001fcc 6f630073 7472636d 70007074 68726561 oc.strcmp.pthrea
  0x00001fdc 645f6765 74737065 63696669 63007074 d_getspecific.pt
  0x00001fec 68726561 645f6f6e 63650070 74687265 hread_once.pthre
  0x00001ffc 61645f73 65747370 65636966 69630070 ad_setspecific.p
  0x0000200c 74687265 61645f6b 65795f64 656c6574 thread_key_delet
  0x0000201c 65007074 68726561 645f6b65 795f6372 e.pthread_key_cr
  0x0000202c 65617465 00676574 61757876 616c005f eate.getauxval._
  0x0000203c 5f737973 74656d5f 70726f70 65727479 _system_property
  0x0000204c 5f676574 00737472 6e636d70 00667072 _get.strncmp.fpr
  0x0000205c 696e7466 0066666c 75736800 70746872 intf.fflush.pthr
  0x0000206c 6561645f 72776c6f 636b5f77 726c6f63 ead_rwlock_wrloc
  0x0000207c 6b007074 68726561 645f7277 6c6f636b k.pthread_rwlock
  0x0000208c 5f756e6c 6f636b00 646c5f69 74657261 _unlock.dl_itera
  0x0000209c 74655f70 68647200 70746872 6561645f te_phdr.pthread_
  0x000020ac 72776c6f 636b5f72 646c6f63 6b006677 rwlock_rdlock.fw
  0x000020bc 72697465 006c6962 646c2e73 6f004c49 rite.libdl.so.LI
  0x000020cc 4243006c 6962632e 736f006c 69626c6f BC.libc.so.liblo
  0x000020dc 672e736f 006c6962 6d2e736f 006c6962 g.so.libm.so.lib
  0x000020ec 666f7263 652e736f 00                force.so.

-p：以string字符串方式显示

➜  arm64-v8a readelf -p .dynsym libtacker.so

String dump of section '.dynsym':
  [    60]  1
  [    78]  4^B
  [    90]  ;^B
  [    a8]  C^B
  [   138]  #\n
  ...
  [   9e1]  y^I
  [   9e8]   "
  [   9f0]  C^H
  [   a00]  ,,
  [   a11]  K\n
  [   a29]  _\n
  [   a30]  0^I
  [   a50]  <^A
  [   a59]  j^C
  [   a98]  f
  [   aa0]  0�^B
  [   aa9]  '
  [   ab8]  d�^C
  [   ac8]  i^C
  [   ae8]  P�^E
  [   b00]  t^\n

和：

➜  arm64-v8a readelf -p 8 libtacker.so

String dump of section '.dynstr':
  [     1]  __cxa_finalize
  [    10]  __cxa_atexit
  [    1d]  __android_log_print
  [    31]  __stack_chk_fail
  [    42]  .datadiv_decode12335027288954124723
  [    66]  .datadiv_decode17838636323198310142
  [    8a]  .datadiv_decode18328417529454547004
...
  [   1ee]  .datadiv_decode1771790552069125206
  [   211]  .datadiv_decode5616837089396308971
  [   234]  memset
  [   23b]  strncpy
  [   243]  strncat
  [   24b]  .datadiv_decode14151120317447827231
  [   26f]  .datadiv_decode16117807209816376729
...
  [   95d]  .datadiv_decode11706101414295225912
  [   981]  pthread_self
  [   98e]  .datadiv_decode14716202181486223822
  [   9b2]  .datadiv_decode8758840755024801160
  [   9d5]  JNI_OnLoad
  [   9e0]  .datadiv_decode2444497212690810360
  [   a03]  malloc
  [   a0a]  free
  [   a0f]  posix_memalign
  [   a1e]  __sF
  [   a23]  vfprintf
  [   a2c]  fputc
  [   a32]  vasprintf
  [   a3c]  android_set_abort_message
  [   a56]  openlog
  [   a5e]  syslog
  [   a65]  closelog
  [   a6e]  abort
  [   a74]  strlen
  [   a7b]  realloc
  [   a83]  memmove
  [   a8b]  __memmove_chk
  [   a99]  __strlen_chk
  [   aa6]  memchr
  [   aad]  __vsnprintf_chk
  [   abd]  memcpy
  [   ac4]  pthread_mutex_lock
  [   ad7]  pthread_mutex_unlock
  [   aec]  calloc
  [   af3]  strcmp
  [   afa]  pthread_getspecific
  [   b0e]  pthread_once
  [   b1b]  pthread_setspecific
  [   b2f]  pthread_key_delete
  [   b42]  pthread_key_create
  [   b55]  getauxval
  [   b5f]  __system_property_get
  [   b75]  strncmp
  [   b7d]  fprintf
  [   b85]  fflush
  [   b8c]  pthread_rwlock_wrlock
  [   ba2]  pthread_rwlock_unlock
  [   bb8]  dl_iterate_phdr
  [   bc8]  pthread_rwlock_rdlock
  [   bde]  fwrite
  [   be5]  libdl.so
  [   bee]  LIBC
  [   bf3]  libc.so
  [   bfb]  liblog.so
  [   c05]  libm.so
  [   c0d]  libforce.so

可以输出对应的函数和库名

-e：显示多个头信息

➜  arm64-v8a readelf -e libtacker.so
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine:                           AArch64
  Version:                           0x1
  Entry point address:               0x1a5c0
  Start of program headers:          64 (bytes into file)
  Start of section headers:          848344 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         9
  Size of section headers:           64 (bytes)
  Number of section headers:         27
  Section header string table index: 26

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .note.androi[...] NOTE             0000000000000238  00000238
       0000000000000098  0000000000000000   A       0     0     4
  [ 2] .note.gnu.bu[...] NOTE             00000000000002d0  000002d0
       0000000000000024  0000000000000000   A       0     0     4
  [ 3] .dynsym           DYNSYM           00000000000002f8  000002f8
       0000000000000b10  0000000000000018   A       8     1     8
  [ 4] .gnu.version      VERSYM           0000000000000e08  00000e08
       00000000000000ec  0000000000000002   A       3     0     2
  [ 5] .gnu.version_r    VERNEED          0000000000000ef4  00000ef4
       0000000000000040  0000000000000000   A       8     2     4
  [ 6] .gnu.hash         GNU_HASH         0000000000000f38  00000f38
       00000000000001ec  0000000000000000   A       3     0     8
  [ 7] .hash             HASH             0000000000001124  00001124
       00000000000003b8  0000000000000004   A       3     0     4
  [ 8] .dynstr           STRTAB           00000000000014dc  000014dc
       0000000000000c19  0000000000000000   A       0     0     1
  [ 9] .rela.dyn         RELA             00000000000020f8  000020f8
       0000000000008850  0000000000000018   A       3     0     8
  [10] .rela.plt         RELA             000000000000a948  0000a948
       0000000000000450  0000000000000018  AI       3    22     8
  [11] .gcc_except_table PROGBITS         000000000000ad98  0000ad98
       0000000000001960  0000000000000000   A       0     0     4
  [12] .rodata           PROGBITS         000000000000c6f8  0000c6f8
       0000000000003434  0000000000000000 AMS       0     0     8
  [13] .eh_frame_hdr     PROGBITS         000000000000fb2c  0000fb2c
       0000000000001dbc  0000000000000000   A       0     0     4
  [14] .eh_frame         PROGBITS         00000000000118e8  000118e8
       0000000000008cd4  0000000000000000   A       0     0     8
  [15] .text             PROGBITS         000000000001a5c0  0001a5c0
       00000000000aec60  0000000000000000  AX       0     0     16
  [16] .plt              PROGBITS         00000000000c9220  000c9220
       0000000000000300  0000000000000000  AX       0     0     16
  [17] .data.rel.ro      PROGBITS         00000000000ca520  000c9520
       0000000000002eb8  0000000000000000  WA       0     0     8
  [18] .fini_array       FINI_ARRAY       00000000000cd3d8  000cc3d8
       0000000000000010  0000000000000000  WA       0     0     8
  [19] .init_array       INIT_ARRAY       00000000000cd3e8  000cc3e8
       0000000000000230  0000000000000000  WA       0     0     8
  [20] .dynamic          DYNAMIC          00000000000cd618  000cc618
       00000000000001d0  0000000000000010  WA       8     0     8
  [21] .got              PROGBITS         00000000000cd7e8  000cc7e8
       00000000000000c0  0000000000000000  WA       0     0     8
  [22] .got.plt          PROGBITS         00000000000cd8a8  000cc8a8
       0000000000000188  0000000000000000  WA       0     0     8
  [23] .data             PROGBITS         00000000000cea30  000cca30
       00000000000025d8  0000000000000000  WA       0     0     16
  [24] .bss              NOBITS           00000000000d1010  000cf008
       0000000000000ad0  0000000000000000  WA       0     0     16
  [25] .comment          PROGBITS         0000000000000000  000cf008
       00000000000000c6  0000000000000001  MS       0     0     1
  [26] .shstrtab         STRTAB           0000000000000000  000cf0ce
       0000000000000104  0000000000000000           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),
  D (mbind), p (processor specific)

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  PHDR           0x0000000000000040 0x0000000000000040 0x0000000000000040
                 0x00000000000001f8 0x00000000000001f8  R      0x8
  LOAD           0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x00000000000c9520 0x00000000000c9520  R E    0x1000
  LOAD           0x00000000000c9520 0x00000000000ca520 0x00000000000ca520
                 0x0000000000003510 0x0000000000003510  RW     0x1000
  LOAD           0x00000000000cca30 0x00000000000cea30 0x00000000000cea30
                 0x00000000000025d8 0x00000000000030b0  RW     0x1000
  DYNAMIC        0x00000000000cc618 0x00000000000cd618 0x00000000000cd618
                 0x00000000000001d0 0x00000000000001d0  RW     0x8
  GNU_RELRO      0x00000000000c9520 0x00000000000ca520 0x00000000000ca520
                 0x0000000000003510 0x0000000000003ae0  R      0x1
  GNU_EH_FRAME   0x000000000000fb2c 0x000000000000fb2c 0x000000000000fb2c
                 0x0000000000001dbc 0x0000000000001dbc  R      0x4
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RW     0x0
  NOTE           0x0000000000000238 0x0000000000000238 0x0000000000000238
                 0x00000000000000bc 0x00000000000000bc  R      0x4

 Section to Segment mapping:
  Segment Sections...
   00
   01     .note.android.ident .note.gnu.build-id .dynsym .gnu.version .gnu.version_r .gnu.hash .hash .dynstr .rela.dyn .rela.plt .gcc_except_table .rodata .eh_frame_hdr .eh_frame .text .plt
   02     .data.rel.ro .fini_array .init_array .dynamic .got .got.plt
   03     .data .bss
   04     .dynamic
   05     .data.rel.ro .fini_array .init_array .dynamic .got .got.plt
   06     .eh_frame_hdr
   07
   08     .note.android.ident .note.gnu.build-id

-a：显示所有信息

readelf -a libtacker.so

输出内容太多

➜  arm64-v8a readelf -a libtacker.so > libtacker_readelf_a.coffee

保存到文件：libtacker_readelf_a.coffee

效果如下：

拷贝出部分内容：

Section Headers

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .note.androi[...] NOTE             0000000000000238  00000238
       0000000000000098  0000000000000000   A       0     0     4
  [ 2] .note.gnu.bu[...] NOTE             00000000000002d0  000002d0
       0000000000000024  0000000000000000   A       0     0     4
  [ 3] .dynsym           DYNSYM           00000000000002f8  000002f8
       0000000000000b10  0000000000000018   A       8     1     8
  [ 4] .gnu.version      VERSYM           0000000000000e08  00000e08
       00000000000000ec  0000000000000002   A       3     0     2
  [ 5] .gnu.version_r    VERNEED          0000000000000ef4  00000ef4
       0000000000000040  0000000000000000   A       8     2     4
  [ 6] .gnu.hash         GNU_HASH         0000000000000f38  00000f38
       00000000000001ec  0000000000000000   A       3     0     8
  [ 7] .hash             HASH             0000000000001124  00001124
       00000000000003b8  0000000000000004   A       3     0     4
  [ 8] .dynstr           STRTAB           00000000000014dc  000014dc
       0000000000000c19  0000000000000000   A       0     0     1
  [ 9] .rela.dyn         RELA             00000000000020f8  000020f8
       0000000000008850  0000000000000018   A       3     0     8
  [10] .rela.plt         RELA             000000000000a948  0000a948
       0000000000000450  0000000000000018  AI       3    22     8
  [11] .gcc_except_table PROGBITS         000000000000ad98  0000ad98
       0000000000001960  0000000000000000   A       0     0     4
  [12] .rodata           PROGBITS         000000000000c6f8  0000c6f8
       0000000000003434  0000000000000000 AMS       0     0     8
  [13] .eh_frame_hdr     PROGBITS         000000000000fb2c  0000fb2c
       0000000000001dbc  0000000000000000   A       0     0     4
  [14] .eh_frame         PROGBITS         00000000000118e8  000118e8
       0000000000008cd4  0000000000000000   A       0     0     8
  [15] .text             PROGBITS         000000000001a5c0  0001a5c0
       00000000000aec60  0000000000000000  AX       0     0     16
  [16] .plt              PROGBITS         00000000000c9220  000c9220
       0000000000000300  0000000000000000  AX       0     0     16
  [17] .data.rel.ro      PROGBITS         00000000000ca520  000c9520
       0000000000002eb8  0000000000000000  WA       0     0     8
  [18] .fini_array       FINI_ARRAY       00000000000cd3d8  000cc3d8
       0000000000000010  0000000000000000  WA       0     0     8
  [19] .init_array       INIT_ARRAY       00000000000cd3e8  000cc3e8
       0000000000000230  0000000000000000  WA       0     0     8
  [20] .dynamic          DYNAMIC          00000000000cd618  000cc618
       00000000000001d0  0000000000000010  WA       8     0     8
  [21] .got              PROGBITS         00000000000cd7e8  000cc7e8
       00000000000000c0  0000000000000000  WA       0     0     8
  [22] .got.plt          PROGBITS         00000000000cd8a8  000cc8a8
       0000000000000188  0000000000000000  WA       0     0     8
  [23] .data             PROGBITS         00000000000cea30  000cca30
       00000000000025d8  0000000000000000  WA       0     0     16
  [24] .bss              NOBITS           00000000000d1010  000cf008
       0000000000000ad0  0000000000000000  WA       0     0     16
  [25] .comment          PROGBITS         0000000000000000  000cf008
       00000000000000c6  0000000000000001  MS       0     0     1
  [26] .shstrtab         STRTAB           0000000000000000  000cf0ce
       0000000000000104  0000000000000000           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),
  D (mbind), p (processor specific)

有很多常见的：section

bss

data

rodata

got

等等

Program Headers

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  PHDR           0x0000000000000040 0x0000000000000040 0x0000000000000040
                 0x00000000000001f8 0x00000000000001f8  R      0x8
  LOAD           0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x00000000000c9520 0x00000000000c9520  R E    0x1000
  LOAD           0x00000000000c9520 0x00000000000ca520 0x00000000000ca520
                 0x0000000000003510 0x0000000000003510  RW     0x1000
  LOAD           0x00000000000cca30 0x00000000000cea30 0x00000000000cea30
                 0x00000000000025d8 0x00000000000030b0  RW     0x1000
  DYNAMIC        0x00000000000cc618 0x00000000000cd618 0x00000000000cd618
                 0x00000000000001d0 0x00000000000001d0  RW     0x8
  GNU_RELRO      0x00000000000c9520 0x00000000000ca520 0x00000000000ca520
                 0x0000000000003510 0x0000000000003ae0  R      0x1
  GNU_EH_FRAME   0x000000000000fb2c 0x000000000000fb2c 0x000000000000fb2c
                 0x0000000000001dbc 0x0000000000001dbc  R      0x4
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RW     0x0
  NOTE           0x0000000000000238 0x0000000000000238 0x0000000000000238
                 0x00000000000000bc 0x00000000000000bc  R      0x4

Section to Segment mapping

Section to Segment mapping:
  Segment Sections...
   00
   01     .note.android.ident .note.gnu.build-id .dynsym .gnu.version .gnu.version_r .gnu.hash .hash .dynstr .rela.dyn .rela.plt .gcc_except_table .rodata .eh_frame_hdr .eh_frame .text .plt
   02     .data.rel.ro .fini_array .init_array .dynamic .got .got.plt
   03     .data .bss
   04     .dynamic
   05     .data.rel.ro .fini_array .init_array .dynamic .got .got.plt
   06     .eh_frame_hdr
   07
   08     .note.android.ident .note.gnu.build-id

Dynamic section

Dynamic section at offset 0xcc618 contains 29 entries

Dynamic section at offset 0xcc618 contains 29 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [liblog.so]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so]
 0x0000000000000001 (NEEDED)             Shared library: [libdl.so]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so]
 0x000000000000000e (SONAME)             Library soname: [libforce.so]
 0x000000000000001e (FLAGS)              BIND_NOW
 0x000000006ffffffb (FLAGS_1)            Flags: NOW
 0x0000000000000007 (RELA)               0x20f8
 0x0000000000000008 (RELASZ)             34896 (bytes)
 0x0000000000000009 (RELAENT)            24 (bytes)
 0x000000006ffffff9 (RELACOUNT)          1384
 0x0000000000000017 (JMPREL)             0xa948
 0x0000000000000002 (PLTRELSZ)           1104 (bytes)
 0x0000000000000003 (PLTGOT)             0xcd8a8
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000006 (SYMTAB)             0x2f8
 0x000000000000000b (SYMENT)             24 (bytes)
 0x0000000000000005 (STRTAB)             0x14dc
 0x000000000000000a (STRSZ)              3097 (bytes)
 0x000000006ffffef5 (GNU_HASH)           0xf38
 0x0000000000000004 (HASH)               0x1124
 0x0000000000000019 (INIT_ARRAY)         0xcd3e8
 0x000000000000001b (INIT_ARRAYSZ)       560 (bytes)
 0x000000000000001a (FINI_ARRAY)         0xcd3d8
 0x000000000000001c (FINI_ARRAYSZ)       16 (bytes)
 0x000000006ffffff0 (VERSYM)             0xe08
 0x000000006ffffffe (VERNEED)            0xef4
 0x000000006fffffff (VERNEEDNUM)         2
 0x0000000000000000 (NULL)               0x0

Relocation section

Relocation section '.rela.dyn' at offset 0x20f8 contains 1454 entries

Relocation section '.rela.dyn' at offset 0x20f8 contains 1454 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
0000000ca520  000000000403 R_AARCH64_RELATIV                    ca520
0000000ca528  000000000403 R_AARCH64_RELATIV                    d0f58
0000000ca530  000000000403 R_AARCH64_RELATIV                    d0f90
0000000ca538  000000000403 R_AARCH64_RELATIV                    aa168
0000000ca548  000000000403 R_AARCH64_RELATIV                    ca5a8
0000000ca550  000000000403 R_AARCH64_RELATIV                    b05d8
...
0000000d0ff8  000000000403 R_AARCH64_RELATIV                    d12e0
0000000d1000  000000000403 R_AARCH64_RELATIV                    d1ae0
0000000cd828  000c00000401 R_AARCH64_GLOB_DA 0000000000000000 __sF@LIBC + 0
0000000cd460  003000000101 R_AARCH64_ABS64   0000000000044ce8 .datadiv_decode16[...] + 0
0000000cd500  003100000101 R_AARCH64_ABS64   0000000000078a04 .datadiv_decode99[...] + 0
...
0000000cd3f0  007100000101 R_AARCH64_ABS64   000000000002b930 .datadiv_decode17[...] + 0
0000000cd430  007200000101 R_AARCH64_ABS64   0000000000039464 .datadiv_decode17[...] + 0
0000000cd498  007300000101 R_AARCH64_ABS64   000000000005c790 .datadiv_decode15[...] + 0
0000000cd4b0  007400000101 R_AARCH64_ABS64   000000000005ed50 .datadiv_decode15[...] + 0
0000000cd5d8  007500000101 R_AARCH64_ABS64   00000000000a5e74 .datadiv_decode54[...] + 0

Relocation section '.rela.plt' at offset 0xa948 contains 46 entries

Relocation section '.rela.plt' at offset 0xa948 contains 46 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
0000000cd8c0  000100000402 R_AARCH64_JUMP_SL 0000000000000000 __cxa_finalize@LIBC + 0
0000000cd8c8  000200000402 R_AARCH64_JUMP_SL 0000000000000000 __cxa_atexit@LIBC + 0
0000000cd8d0  000300000402 R_AARCH64_JUMP_SL 0000000000000000 __android_log_print + 0
0000000cd8d8  000400000402 R_AARCH64_JUMP_SL 0000000000000000 __stack_chk_fail@LIBC + 0
0000000cd8e0  000500000402 R_AARCH64_JUMP_SL 0000000000000000 memset@LIBC + 0
0000000cd8e8  000600000402 R_AARCH64_JUMP_SL 0000000000000000 strncpy@LIBC + 0
0000000cd8f0  000700000402 R_AARCH64_JUMP_SL 0000000000000000 strncat@LIBC + 0
0000000cd8f8  000800000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_self@LIBC + 0
0000000cd900  000900000402 R_AARCH64_JUMP_SL 0000000000000000 malloc@LIBC + 0
0000000cd908  000a00000402 R_AARCH64_JUMP_SL 0000000000000000 free@LIBC + 0
0000000cd910  000b00000402 R_AARCH64_JUMP_SL 0000000000000000 posix_memalign@LIBC + 0
0000000cd918  000d00000402 R_AARCH64_JUMP_SL 0000000000000000 vfprintf@LIBC + 0
0000000cd920  000e00000402 R_AARCH64_JUMP_SL 0000000000000000 fputc@LIBC + 0
0000000cd928  000f00000402 R_AARCH64_JUMP_SL 0000000000000000 vasprintf@LIBC + 0
0000000cd930  001000000402 R_AARCH64_JUMP_SL 0000000000000000 android_set_abort[...]@LIBC + 0
0000000cd938  001100000402 R_AARCH64_JUMP_SL 0000000000000000 openlog@LIBC + 0
0000000cd940  001200000402 R_AARCH64_JUMP_SL 0000000000000000 syslog@LIBC + 0
0000000cd948  001300000402 R_AARCH64_JUMP_SL 0000000000000000 closelog@LIBC + 0
0000000cd950  001400000402 R_AARCH64_JUMP_SL 0000000000000000 abort@LIBC + 0
0000000cd958  001500000402 R_AARCH64_JUMP_SL 0000000000000000 strlen@LIBC + 0
0000000cd960  001600000402 R_AARCH64_JUMP_SL 0000000000000000 realloc@LIBC + 0
0000000cd968  001700000402 R_AARCH64_JUMP_SL 0000000000000000 memmove@LIBC + 0
0000000cd970  001800000402 R_AARCH64_JUMP_SL 0000000000000000 __memmove_chk@LIBC + 0
0000000cd978  001900000402 R_AARCH64_JUMP_SL 0000000000000000 __strlen_chk@LIBC + 0
0000000cd980  001a00000402 R_AARCH64_JUMP_SL 0000000000000000 memchr@LIBC + 0
0000000cd988  001b00000402 R_AARCH64_JUMP_SL 0000000000000000 __vsnprintf_chk@LIBC + 0
0000000cd990  001c00000402 R_AARCH64_JUMP_SL 0000000000000000 memcpy@LIBC + 0
0000000cd998  001d00000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_mutex_lock@LIBC + 0
0000000cd9a0  001e00000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_mutex_unlock@LIBC + 0
0000000cd9a8  001f00000402 R_AARCH64_JUMP_SL 0000000000000000 calloc@LIBC + 0
0000000cd9b0  002000000402 R_AARCH64_JUMP_SL 0000000000000000 strcmp@LIBC + 0
0000000cd9b8  002100000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_getspecific@LIBC + 0
0000000cd9c0  002200000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_once@LIBC + 0
0000000cd9c8  002300000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_setspecific@LIBC + 0
0000000cd9d0  002400000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_key_delete@LIBC + 0
0000000cd9d8  002500000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_key_create@LIBC + 0
0000000cd9e0  002600000402 R_AARCH64_JUMP_SL 0000000000000000 getauxval@LIBC + 0
0000000cd9e8  002700000402 R_AARCH64_JUMP_SL 0000000000000000 __system_property_get@LIBC + 0
0000000cd9f0  002800000402 R_AARCH64_JUMP_SL 0000000000000000 strncmp@LIBC + 0
0000000cd9f8  002900000402 R_AARCH64_JUMP_SL 0000000000000000 fprintf@LIBC + 0
0000000cda00  002a00000402 R_AARCH64_JUMP_SL 0000000000000000 fflush@LIBC + 0
0000000cda08  002b00000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_rwlock_wrlock@LIBC + 0
0000000cda10  002c00000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_rwlock_unlock@LIBC + 0
0000000cda18  002d00000402 R_AARCH64_JUMP_SL 0000000000000000 dl_iterate_phdr@LIBC + 0
0000000cda20  002e00000402 R_AARCH64_JUMP_SL 0000000000000000 pthread_rwlock_rdlock@LIBC + 0
0000000cda28  002f00000402 R_AARCH64_JUMP_SL 0000000000000000 fwrite@LIBC + 0

至少这里是有函数名的。

看起来是调用了外部的函数 == imports

Symbol table

Symbol table '.dynsym' contains 118 entries

Symbol table '.dynsym' contains 118 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __cxa_f[...]@LIBC (2)
     2: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __cxa_atexit@LIBC (2)
     3: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __android_log_print
     4: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __stack[...]@LIBC (2)
     5: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND memset@LIBC (2)
     6: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strncpy@LIBC (2)
     7: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strncat@LIBC (2)
     8: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread_self@LIBC (2)
     9: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND malloc@LIBC (2)
    10: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND free@LIBC (2)
    11: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND posix_m[...]@LIBC (2)
    12: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  UND __sF@LIBC (2)
    13: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND vfprintf@LIBC (2)
    14: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fputc@LIBC (2)
    15: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND vasprintf@LIBC (2)
    16: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND android[...]@LIBC (2)
    17: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND openlog@LIBC (2)
    18: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND syslog@LIBC (2)
    19: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND closelog@LIBC (2)
    20: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND abort@LIBC (2)
    21: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strlen@LIBC (2)
    22: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND realloc@LIBC (2)
    23: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND memmove@LIBC (2)
    24: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __memmo[...]@LIBC (2)
    25: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __strlen_chk@LIBC (2)
    26: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND memchr@LIBC (2)
    27: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __vsnpr[...]@LIBC (2)
    28: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND memcpy@LIBC (2)
    29: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    30: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    31: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND calloc@LIBC (2)
    32: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strcmp@LIBC (2)
    33: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    34: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread_once@LIBC (2)
    35: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    36: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    37: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    38: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND getauxval@LIBC (2)
    39: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __syste[...]@LIBC (2)
    40: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND strncmp@LIBC (2)
    41: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fprintf@LIBC (2)
    42: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fflush@LIBC (2)
    43: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    44: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    45: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND dl_iter[...]@LIBC (3)
    46: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND pthread[...]@LIBC (2)
    47: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND fwrite@LIBC (2)
    48: 0000000000044ce8  6608 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    49: 0000000000078a04  2696 FUNC    GLOBAL DEFAULT   15 .datadiv_decode9[...]
    50: 00000000000a8a58  3892 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    51: 0000000000076128  2160 FUNC    GLOBAL DEFAULT   15 .datadiv_decode4[...]
    52: 000000000008f8e8  8740 FUNC    GLOBAL DEFAULT   15 .datadiv_decode9[...]
...
    70: 000000000008e650  3772 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    71: 00000000000381fc  3696 FUNC    GLOBAL DEFAULT   15 .datadiv_decode3[...]
    72: 000000000006f220  3892 FUNC    GLOBAL DEFAULT   15 .datadiv_decode8[...]
    73: 00000000000a8884     4 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    74: 00000000000aa438  1436 FUNC    GLOBAL DEFAULT   15 JNI_OnLoad
    75: 0000000000026d98 18656 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
    76: 0000000000033a2c 11972 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
...
   116: 000000000005ed50  6304 FUNC    GLOBAL DEFAULT   15 .datadiv_decode1[...]
   117: 00000000000a5e74     4 FUNC    GLOBAL DEFAULT   15 .datadiv_decode5[...]

看起来 = IDA中的Exports = 导出函数

Histogram

Histogram for bucket list length (total of 118 buckets)

Histogram for bucket list length (total of 118 buckets):
 Length  Number     % of total  Coverage
      0  40         ( 33.9%)
      1  48         ( 40.7%)     41.0%
      2  22         ( 18.6%)     78.6%
      3  7          (  5.9%)     96.6%
      4  1          (  0.8%)    100.0%

Histogram for `.gnu.hash' bucket list length (total of 17 buckets)

Histogram for `.gnu.hash' bucket list length (total of 17 buckets):
 Length  Number     % of total  Coverage
      0  0          (  0.0%)
      1  0          (  0.0%)      0.0%
      2  1          (  5.9%)      2.9%
      3  4          ( 23.5%)     20.0%
      4  6          ( 35.3%)     54.3%
      5  5          ( 29.4%)     90.0%
      6  0          (  0.0%)     90.0%
      7  1          (  5.9%)    100.0%

Version section

Version symbols section '.gnu.version' contains 118 entries

Version symbols section '.gnu.version' contains 118 entries:
 Addr: 0x0000000000000e08  Offset: 0x00000e08  Link: 3 (.dynsym)
  000:   0 (*local*)       2 (LIBC)          2 (LIBC)          1 (*global*)
  004:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  008:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  00c:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  010:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  014:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  018:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  01c:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  020:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  024:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  028:   2 (LIBC)          2 (LIBC)          2 (LIBC)          2 (LIBC)
  02c:   2 (LIBC)          3 (LIBC)          2 (LIBC)          2 (LIBC)
  030:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  034:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  038:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  03c:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  040:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  044:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  048:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  04c:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  050:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  054:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  058:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  05c:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  060:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  064:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  068:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  06c:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  070:   1 (*global*)      1 (*global*)      1 (*global*)      1 (*global*)
  074:   1 (*global*)      1 (*global*)

Version needs section '.gnu.version_r' contains 2 entries

Version needs section '.gnu.version_r' contains 2 entries:
 Addr: 0x0000000000000ef4  Offset: 0x00000ef4  Link: 8 (.dynstr)
  000000: Version: 1  File: libdl.so  Cnt: 1
  0x0020:   Name: LIBC  Flags: none  Version: 3
  0x0010: Version: 1  File: libc.so  Cnt: 1
  0x0030:   Name: LIBC  Flags: none  Version: 2

其他

Displaying notes found in: .note.android.ident

Displaying notes found in: .note.android.ident
  Owner                Data size     Description
  Android              0x00000084    NT_VERSION (version)
   description data: 15 00 00 00 72 32 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 38 32 31 35 38 38 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Displaying notes found in: .note.gnu.build-id

Displaying notes found in: .note.gnu.build-id
  Owner                Data size     Description
  GNU                  0x00000014    NT_GNU_BUILD_ID (unique build ID bitstring)
    Build ID: 3a269496ef440c785356664f894646815d3c61ad

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 11:48:50

help

readelf的help语法帮助

➜  ~ readelf --help
Usage: readelf <option(s)> elf-file(s)
 Display information about the contents of ELF format files
 Options are:
  -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
     --lto-syms          Display LTO symbol tables
     --sym-base=[0|8|10|16]
                         Force base for symbol sizes.  The options are
                         mixed (the default), octal, decimal, hexadecimal.
  -C --demangle[=STYLE]  Decode mangled/processed symbol names
                           STYLE can be "none", "auto", "gnu-v3", "java",
                           "gnat", "dlang", "rust"
     --no-demangle       Do not demangle low-level symbol names.  (default)
     --recurse-limit     Enable a demangling recursion limit.  (default)
     --no-recurse-limit  Disable a demangling recursion limit
     -U[dlexhi] --unicode=[default|locale|escape|hex|highlight|invalid]
                         Display unicode characters as determined by the current locale
                          (default), escape sequences, "<hex sequences>", highlighted
                          escape sequences, or treat them as invalid and display as
                          "{hex sequences}"
  -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
  -L --lint|--enable-checks
                         Display warning messages for possible problems
  -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 relocated contents of section <number|name>
  -z --decompress        Decompress section before dumping it
  -w --debug-dump[a/=abbrev, A/=addr, r/=aranges, c/=cu_index, L/=decodedline,
                  f/=frames, F/=frames-interp, g/=gdb_index, i/=info, o/=loc,
                  m/=macro, p/=pubnames, t/=pubtypes, R/=Ranges, l/=rawline,
                  s/=str, O/=str-offsets, u/=trace_abbrev, T/=trace_aranges,
                  U/=trace_info]
                         Display the contents of DWARF debug sections
  -wk --debug-dump=links Display the contents of sections that link to separate
                          debuginfo files
  -P --process-links     Display the contents of non-debug sections in separate
                          debuginfo files.  (Implies -wK)
  -wK --debug-dump=follow-links
                         Follow links to separate debug info files (default)
  -wN --debug-dump=no-follow-links
                         Do not follow links to separate debug info files
  --dwarf-depth=N        Do not display DIEs at depth N or greater
  --dwarf-start=N        Display DIEs starting at offset N
  --ctf=<number|name>    Display CTF info from section <number|name>
  --ctf-parent=<name>    Use CTF archive member <name> as the CTF parent
  --ctf-symbols=<number|name>
                         Use section <number|name> as the CTF external symtab
  --ctf-strings=<number|name>
                         Use section <number|name> as the CTF external strtab
  --sframe[=NAME]        Display SFrame info from section NAME, (default '.sframe')
  -I --histogram         Display histogram of bucket list lengths
  -W --wide              Allow output width to exceed 80 characters
  -T --silent-truncation If a symbol name is truncated, do not add [...] suffix
  @<file>                Read options from <file>
  -H --help              Display this information
  -v --version           Display the version number of readelf
Report bugs to <https://sourceware.org/bugzilla/>

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-02 21:39:37

objdump

objdump

安装objdump

objdump属于binutils中的一个

所以直接去安装：binutils即可

注：macOS自带，无需额外安装

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-02 22:38:25

用法

objdump用法

概述：

单个参数

-a=--archive-headers：显示存档文件头信息

说明

看一个.a静态库文件中包含了哪些目标文件

语法

objdump -a elfFile

-f=--file-headers：显示全部文件头信息

语法

objdump -f elfFile

-h=--headers=--section-headers：显示节的头信息

对比

== readelf -S

语法

objdump -h elfFile

-s=--full-contents：显示每个节的内容

语法

objdump -s elfFile

-t=--syms：显示符号表

语法

objdump -t elfFile

-T=--dynamic-syms：显示动态符号表

说明

输出目标文件的动态符号表（Dynamic Symbol Table），即目标ELF文件中名字叫做.dynsym节内的内容

通过这张表内的信息，可以看出由本ELF文件中导出的符号，和需要从别的动态库中导入的符号。如果第三列显示“UND”表明这个符号在本ELF文件中未定义，也就是说这个符号要从别的动态库中导入，其它的情况表明这个符号由本ELF文件中定义。

语法

objdump -T elfFile

-r=--reloc：显示静态重定位入口

语法

objdump -r elfFile

-R=--dynamic-reloc：显示动态重定位入口

说明

这个参数仅仅对于动态目标文件有意义，比如动态库文件（.so）

语法

objdump -R elfFile

反汇编

-d=--disassemble：反汇编可执行指令的内容

语法

objdump -d elfFile

-D=--disassemble-all：反汇编所有指令的内容

语法

objdump -D elfFile

组合参数

-x=--all-headers==-h --syms --reloc：显示全部头信息

语法

objdump -x elfFile

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-02 23:08:48

举例

objdump用法举例

输入文件：ELF格式的libtacker.so

用objdump读取解析ELF的libtacker.so的效果：

-a：显示存档文件头信息

➜  arm64-v8a objdump -a libtacker.so

libtacker.so:    file format elf64-littleaarch64

-f：显示全部文件头信息

➜  arm64-v8a objdump -f libtacker.so

libtacker.so:    file format elf64-littleaarch64
architecture: aarch64
start address: 0x000000000001a5c0

-h：显示节的头信息

➜  arm64-v8a objdump -h libtacker.so

libtacker.so:    file format elf64-littleaarch64

Sections:
Idx Name                Size     VMA              Type
  0                     00000000 0000000000000000
  1 .note.android.ident 00000098 0000000000000238
  2 .note.gnu.build-id  00000024 00000000000002d0
  3 .dynsym             00000b10 00000000000002f8
  4 .gnu.version        000000ec 0000000000000e08
  5 .gnu.version_r      00000040 0000000000000ef4
  6 .gnu.hash           000001ec 0000000000000f38
  7 .hash               000003b8 0000000000001124
  8 .dynstr             00000c19 00000000000014dc
  9 .rela.dyn           00008850 00000000000020f8
 10 .rela.plt           00000450 000000000000a948
 11 .gcc_except_table   00001960 000000000000ad98 DATA
 12 .rodata             00003434 000000000000c6f8 DATA
 13 .eh_frame_hdr       00001dbc 000000000000fb2c DATA
 14 .eh_frame           00008cd4 00000000000118e8 DATA
 15 .text               000aec60 000000000001a5c0 TEXT
 16 .plt                00000300 00000000000c9220 TEXT
 17 .data.rel.ro        00002eb8 00000000000ca520 DATA
 18 .fini_array         00000010 00000000000cd3d8
 19 .init_array         00000230 00000000000cd3e8
 20 .dynamic            000001d0 00000000000cd618
 21 .got                000000c0 00000000000cd7e8 DATA
 22 .got.plt            00000188 00000000000cd8a8 DATA
 23 .data               000025d8 00000000000cea30 DATA
 24 .bss                00000ad0 00000000000d1010 BSS
 25 .comment            000000c6 0000000000000000
 26 .shstrtab           00000104 0000000000000000

-x：显示全部头信息

➜  arm64-v8a objdump -x libtacker.so

libtacker.so:    file format elf64-littleaarch64
architecture: aarch64
start address: 0x000000000001a5c0

Program Header:
    PHDR off    0x0000000000000040 vaddr 0x0000000000000040 paddr 0x0000000000000040 align 2**3
         filesz 0x00000000000001f8 memsz 0x00000000000001f8 flags r--
    LOAD off    0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**12
         filesz 0x00000000000c9520 memsz 0x00000000000c9520 flags r-x
    LOAD off    0x00000000000c9520 vaddr 0x00000000000ca520 paddr 0x00000000000ca520 align 2**12
         filesz 0x0000000000003510 memsz 0x0000000000003510 flags rw-
    LOAD off    0x00000000000cca30 vaddr 0x00000000000cea30 paddr 0x00000000000cea30 align 2**12
         filesz 0x00000000000025d8 memsz 0x00000000000030b0 flags rw-
 DYNAMIC off    0x00000000000cc618 vaddr 0x00000000000cd618 paddr 0x00000000000cd618 align 2**3
         filesz 0x00000000000001d0 memsz 0x00000000000001d0 flags rw-
   RELRO off    0x00000000000c9520 vaddr 0x00000000000ca520 paddr 0x00000000000ca520 align 2**0
         filesz 0x0000000000003510 memsz 0x0000000000003ae0 flags r--
EH_FRAME off    0x000000000000fb2c vaddr 0x000000000000fb2c paddr 0x000000000000fb2c align 2**2
         filesz 0x0000000000001dbc memsz 0x0000000000001dbc flags r--
   STACK off    0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**64
         filesz 0x0000000000000000 memsz 0x0000000000000000 flags rw-
    NOTE off    0x0000000000000238 vaddr 0x0000000000000238 paddr 0x0000000000000238 align 2**2
         filesz 0x00000000000000bc memsz 0x00000000000000bc flags r--

Dynamic Section:
  NEEDED       liblog.so
  NEEDED       libm.so
  NEEDED       libdl.so
  NEEDED       libc.so
  SONAME       libforce.so
  FLAGS        0x0000000000000008
  FLAGS_1      0x0000000000000001
  RELA         0x00000000000020f8
  RELASZ       0x0000000000008850
  RELAENT      0x0000000000000018
  RELACOUNT    0x0000000000000568
  JMPREL       0x000000000000a948
  PLTRELSZ     0x0000000000000450
  PLTGOT       0x00000000000cd8a8
  PLTREL       0x0000000000000007
  SYMTAB       0x00000000000002f8
  SYMENT       0x0000000000000018
  STRTAB       0x00000000000014dc
  STRSZ        0x0000000000000c19
  GNU_HASH     0x0000000000000f38
  HASH         0x0000000000001124
  INIT_ARRAY   0x00000000000cd3e8
  INIT_ARRAYSZ 0x0000000000000230
  FINI_ARRAY   0x00000000000cd3d8
  FINI_ARRAYSZ 0x0000000000000010
  VERSYM       0x0000000000000e08
  VERNEED      0x0000000000000ef4
  VERNEEDNUM   0x0000000000000002

Version References:
  required from libdl.so:
    0x00050d63 0x00 03 LIBC
  required from libc.so:
    0x00050d63 0x00 02 LIBC

Sections:
Idx Name                Size     VMA              Type
  0                     00000000 0000000000000000
  1 .note.android.ident 00000098 0000000000000238
  2 .note.gnu.build-id  00000024 00000000000002d0
  3 .dynsym             00000b10 00000000000002f8
  4 .gnu.version        000000ec 0000000000000e08
  5 .gnu.version_r      00000040 0000000000000ef4
  6 .gnu.hash           000001ec 0000000000000f38
  7 .hash               000003b8 0000000000001124
  8 .dynstr             00000c19 00000000000014dc
  9 .rela.dyn           00008850 00000000000020f8
 10 .rela.plt           00000450 000000000000a948
 11 .gcc_except_table   00001960 000000000000ad98 DATA
 12 .rodata             00003434 000000000000c6f8 DATA
 13 .eh_frame_hdr       00001dbc 000000000000fb2c DATA
 14 .eh_frame           00008cd4 00000000000118e8 DATA
 15 .text               000aec60 000000000001a5c0 TEXT
 16 .plt                00000300 00000000000c9220 TEXT
 17 .data.rel.ro        00002eb8 00000000000ca520 DATA
 18 .fini_array         00000010 00000000000cd3d8
 19 .init_array         00000230 00000000000cd3e8
 20 .dynamic            000001d0 00000000000cd618
 21 .got                000000c0 00000000000cd7e8 DATA
 22 .got.plt            00000188 00000000000cd8a8 DATA
 23 .data               000025d8 00000000000cea30 DATA
 24 .bss                00000ad0 00000000000d1010 BSS
 25 .comment            000000c6 0000000000000000
 26 .shstrtab           00000104 0000000000000000

SYMBOL TABLE:

-d：反汇编可执行指令的内容

text段反汇编

相关参数：

       -d
       --disassemble
       --disassemble=symbol
           Display the assembler mnemonics for the machine instructions
           from the input file.  This option only disassembles those
           sections which are expected to contain instructions.  If the
           optional symbol argument is given, then display the assembler
           mnemonics starting at symbol.  If symbol is a function name
           then disassembly will stop at the end of the function,
           otherwise it will stop when the next symbol is encountered.
           If there are no matches for symbol then nothing will be
           displayed.

           Note if the --dwarf=follow-links option is enabled then any
           symbol tables in linked debug info files will be read in and
           used when disassembling.

       -j name
       --section=name
           Display information only for section name.

->

➜  arm64-v8a objdump -d -j .text libtacker.so
...
   c8e54: 60 ca 00 39      strb    w0, [x19, #50]
   c8e58: e8 02 40 39      ldrb    w8, [x23]
   c8e5c: 1f e9 01 71      cmp    w8, #122
   c8e60: 80 01 00 54      b.eq    0xc8e90 <.datadiv_decode2444497212690810360+0x1e4bc>
   c8e64: 44 00 00 14      b    0xc8f74 <.datadiv_decode2444497212690810360+0x1e5a0>
   c8e68: 20 fa ff 90      adrp    x0, 0xc000 <.datadiv_decode2444497212690810360+0x1e1a4>
   c8e6c: 00 ec 3d 91      add    x0, x0, #3963
   c8e70: 46 00 00 14      b    0xc8f88 <.datadiv_decode2444497212690810360+0x1e5b4>
   c8e74: a0 63 00 91      add    x0, x29, #24
   c8e78: e1 03 16 aa      mov    x1, x22
   c8e7c: b5 fa ff 97      bl    0xc7950 <.datadiv_decode2444497212690810360+0x1cf7c>
   c8e80: 60 ca 00 39      strb    w0, [x19, #50]
   c8e84: e8 02 40 39      ldrb    w8, [x23]
   c8e88: 1f e9 01 71      cmp    w8, #122
   c8e8c: 41 07 00 54      b.ne    0xc8f74 <.datadiv_decode2444497212690810360+0x1e5a0>
   c8e90: a0 63 00 91      add    x0, x29, #24
   c8e94: e1 03 16 aa      mov    x1, x22
   c8e98: ae fa ff 97      bl    0xc7950 <.datadiv_decode2444497212690810360+0x1cf7c>
   c8e9c: 38 fa ff f0      adrp    x24, 0xf000 <.datadiv_decode2444497212690810360+0x1e1e4>
   c8ea0: 18 73 25 91      add    x24, x24, #2396
   c8ea4: 39 00 80 52      mov    w25, #1
   c8ea8: 05 00 00 14      b    0xc8ebc <.datadiv_decode2444497212690810360+0x1e4e8>
   c8eac: 9f 24 03 d5      hint    #36
   c8eb0: 79 ce 00 39      strb    w25, [x19, #51]
   c8eb4: 9f 24 03 d5      hint    #36
   c8eb8: f7 06 00 91      add    x23, x23, #1
...
   c9174: 10 7c 40 f9      ldr    x16, [x0, #248]
   c9178: 00 04 40 a9      ldp    x0, x1, [x0]
   c917c: 1f 02 00 91      mov    sp, x16
   c9180: c0 03 5f d6      ret
   c9184: 5f 24 03 d5      hint    #34
   c9188: 00 04 00 a9      stp    x0, x1, [x0]
   c918c: 02 0c 01 a9      stp    x2, x3, [x0, #16]
   c9190: 04 14 02 a9      stp    x4, x5, [x0, #32]
   c9194: 06 1c 03 a9      stp    x6, x7, [x0, #48]
   c9198: 08 24 04 a9      stp    x8, x9, [x0, #64]
   c919c: 0a 2c 05 a9      stp    x10, x11, [x0, #80]
   c91a0: 0c 34 06 a9      stp    x12, x13, [x0, #96]
   c91a4: 0e 3c 07 a9      stp    x14, x15, [x0, #112]
   c91a8: 10 44 08 a9      stp    x16, x17, [x0, #128]
   c91ac: 12 4c 09 a9      stp    x18, x19, [x0, #144]
   c91b0: 14 54 0a a9      stp    x20, x21, [x0, #160]
   c91b4: 16 5c 0b a9      stp    x22, x23, [x0, #176]
   c91b8: 18 64 0c a9      stp    x24, x25, [x0, #192]
   c91bc: 1a 6c 0d a9      stp    x26, x27, [x0, #208]
   c91c0: 1c 74 0e a9      stp    x28, x29, [x0, #224]
   c91c4: 1e 78 00 f9      str    x30, [x0, #240]
   c91c8: e1 03 00 91      mov    x1, sp
   c91cc: 01 7c 00 f9      str    x1, [x0, #248]
   c91d0: 1e 80 00 f9      str    x30, [x0, #256]
   c91d4: 00 04 11 6d      stp    d0, d1, [x0, #272]
   c91d8: 02 0c 12 6d      stp    d2, d3, [x0, #288]
   c91dc: 04 14 13 6d      stp    d4, d5, [x0, #304]
   c91e0: 06 1c 14 6d      stp    d6, d7, [x0, #320]
   c91e4: 08 24 15 6d      stp    d8, d9, [x0, #336]
   c91e8: 0a 2c 16 6d      stp    d10, d11, [x0, #352]
   c91ec: 0c 34 17 6d      stp    d12, d13, [x0, #368]
   c91f0: 0e 3c 18 6d      stp    d14, d15, [x0, #384]
   c91f4: 10 44 19 6d      stp    d16, d17, [x0, #400]
   c91f8: 12 4c 1a 6d      stp    d18, d19, [x0, #416]
   c91fc: 14 54 1b 6d      stp    d20, d21, [x0, #432]
   c9200: 16 5c 1c 6d      stp    d22, d23, [x0, #448]
   c9204: 18 64 1d 6d      stp    d24, d25, [x0, #464]
   c9208: 1a 6c 1e 6d      stp    d26, d27, [x0, #480]
   c920c: 1c 74 1f 6d      stp    d28, d29, [x0, #496]
   c9210: 1e 00 01 fd      str    d30, [x0, #512]
   c9214: 1f 04 01 fd      str    d31, [x0, #520]
   c9218: 00 00 80 d2      mov    x0, #0
   c921c: c0 03 5f d6      ret

内容太多了。

看来是把全部的汇编都反编译了。

reloc段反汇编

相关参数：

       -d
       --disassemble
       --disassemble=symbol
           Display the assembler mnemonics for the machine instructions
           from the input file.  This option only disassembles those
           sections which are expected to contain instructions.  If the
           optional symbol argument is given, then display the assembler
           mnemonics starting at symbol.  If symbol is a function name
           then disassembly will stop at the end of the function,
           otherwise it will stop when the next symbol is encountered.
           If there are no matches for symbol then nothing will be
           displayed.

           Note if the --dwarf=follow-links option is enabled then any
           symbol tables in linked debug info files will be read in and
           used when disassembling.

       -r
       --reloc
           Print the relocation entries of the file.  If used with -d or
           -D, the relocations are printed interspersed with the
           disassembly.

->

➜  arm64-v8a objdump -d -r libtacker.so > libtacker_objdump_d_r.coffee

libtacker.so:    file format elf64-littleaarch64

Disassembly of section .text:

000000000001a5c0 <.text>:
   1a5c0: 5f 24 03 d5      hint    #34
   1a5c4: 80 05 00 90      adrp    x0, 0xca000 <.text+0x2c4>
   1a5c8: 00 80 14 91      add    x0, x0, #1312
   1a5cc: 1d bb 02 14      b    0xc9240 <__cxa_finalize@plt>
   1a5d0: 5f 24 03 d5      hint    #34
   1a5d4: c0 03 5f d6      ret
   1a5d8: 5f 24 03 d5      hint    #34
   1a5dc: ac a9 02 14      b    0xc4c8c <.datadiv_decode2444497212690810360+0x1a2b8>
   1a5e0: 5f 24 03 d5      hint    #34
   1a5e4: 60 00 00 b4      cbz    x0, 0x1a5f0 <.text+0x30>
   1a5e8: f0 03 00 aa      mov    x16, x0
   1a5ec: 00 02 1f d6      br    x16
   1a5f0: c0 03 5f d6      ret
   1a5f4: 5f 24 03 d5      hint    #34
   1a5f8: 08 00 00 90      adrp    x8, 0x1a000 <.text+0x38>
   1a5fc: 08 81 17 91      add    x8, x8, #1504
   1a600: 82 05 00 90      adrp    x2, 0xca000 <.text+0x300>
   1a604: 42 80 14 91      add    x2, x2, #1312
...
   2e11c: 08 b6 b3 72      movk    w8, #40368, lsl #16
   2e120: 1f 01 17 6b      cmp    w8, w23
   2e124: 60 01 00 54      b.eq    0x2e150 <.datadiv_decode17838636323198310142+0x2820>
   2e128: 1f 01 16 6b      cmp    w8, w22
   2e12c: a1 ff ff 54      b.ne    0x2e120 <.datadiv_decode17838636323198310142+0x27f0>
   2e130: e0 03 14 aa      mov    x0, x20
   2e134: e1 03 13 aa      mov    x1, x19
   2e138: e2 03 15 2a      mov    w2, w21
   2e13c: e3 03 1f 2a      mov    w3, wzr
   2e140: 03 08 00 94      bl    0x3014c <.datadiv_decode8952246851265070369+0x6b4>
   2e144: 28 95 94 52      mov    w8, #42153
   2e148: a8 a2 a4 72      movk    w8, #9493, lsl #16
   2e14c: f5 ff ff 17      b    0x2e120 <.datadiv_decode17838636323198310142+0x27f0>
   2e150: f4 4f 43 a9      ldp    x20, x19, [sp, #48]
   2e154: f6 57 42 a9      ldp    x22, x21, [sp, #32]
   2e158: f7 0b 40 f9      ldr    x23, [sp, #16]
   2e15c: fd 7b c4 a8      ldp    x29, x30, [sp], #64
   2e160: c0 03 5f d6      ret
   2e164: ff 43 01 d1      sub    sp, sp, #80
   2e168: fd 7b 02 a9      stp    x29, x30, [sp, #32]
   2e16c: fd 83 00 91      add    x29, sp, #32
...

000000000002e2bc <.datadiv_decode18328417529454547004>:
   2e2bc: fd 7b ba a9      stp    x29, x30, [sp, #-96]!
   2e2c0: fc 6f 01 a9      stp    x28, x27, [sp, #16]
   2e2c4: fa 67 02 a9      stp    x26, x25, [sp, #32]
   2e2c8: f8 5f 03 a9      stp    x24, x23, [sp, #48]
   2e2cc: f6 57 04 a9      stp    x22, x21, [sp, #64]
   2e2d0: f4 4f 05 a9      stp    x20, x19, [sp, #80]
   2e2d4: 01 05 00 90      adrp    x1, 0xce000 <.datadiv_decode18328417529454547004+0x298>
   2e2d8: d1 0e 80 52      mov    w17, #118
   2e2dc: 21 c0 33 91      add    x1, x1, #3312
   2e2e0: 69 0b 80 52      mov    w9, #91
   2e2e4: 6f 0b 80 12      mov    w15, #-92
   2e2e8: a0 05 80 12      mov    w0, #-46
   2e2ec: d0 0e 80 12      mov    w16, #-119
   2e2f0: cd 02 80 52      mov    w13, #22
   2e2f4: 28 00 40 39      ldrb    w8, [x1]
   2e2f8: 85 0d 80 12      mov    w5, #-109
   2e2fc: 95 0d 80 52      mov    w21, #108
   2e300: 27 0e 80 52      mov    w7, #113
   2e304: 43 0f 80 52      mov    w3, #122
   2e308: 19 0d 80 52      mov    w25, #104
   2e30c: ea 03 28 2a      mvn    w10, w8
   2e310: 0b 01 28 0a      bic    w11, w8, w8
   2e314: 0c 05 1a 12      and    w12, w8, #0xc0
...

   c913c: 06 1c 54 6d      ldp    d6, d7, [x0, #320]
   c9140: 08 24 55 6d      ldp    d8, d9, [x0, #336]
   c9144: 0a 2c 56 6d      ldp    d10, d11, [x0, #352]
   c9148: 0c 34 57 6d      ldp    d12, d13, [x0, #368]
   c914c: 0e 3c 58 6d      ldp    d14, d15, [x0, #384]
   c9150: 10 44 59 6d      ldp    d16, d17, [x0, #400]
   c9154: 12 4c 5a 6d      ldp    d18, d19, [x0, #416]
   c9158: 14 54 5b 6d      ldp    d20, d21, [x0, #432]
   c915c: 16 5c 5c 6d      ldp    d22, d23, [x0, #448]
   c9160: 18 64 5d 6d      ldp    d24, d25, [x0, #464]
   c9164: 1a 6c 5e 6d      ldp    d26, d27, [x0, #480]
   c9168: 1c 74 5f 6d      ldp    d28, d29, [x0, #496]
   c916c: 1e 00 41 fd      ldr    d30, [x0, #512]
   c9170: 1f 04 41 fd      ldr    d31, [x0, #520]
   c9174: 10 7c 40 f9      ldr    x16, [x0, #248]
   c9178: 00 04 40 a9      ldp    x0, x1, [x0]
   c917c: 1f 02 00 91      mov    sp, x16
   c9180: c0 03 5f d6      ret
   c9184: 5f 24 03 d5      hint    #34
   c9188: 00 04 00 a9      stp    x0, x1, [x0]
   c918c: 02 0c 01 a9      stp    x2, x3, [x0, #16]
   c9190: 04 14 02 a9      stp    x4, x5, [x0, #32]
   c9194: 06 1c 03 a9      stp    x6, x7, [x0, #48]
   c9198: 08 24 04 a9      stp    x8, x9, [x0, #64]
   c919c: 0a 2c 05 a9      stp    x10, x11, [x0, #80]
   c91a0: 0c 34 06 a9      stp    x12, x13, [x0, #96]
   c91a4: 0e 3c 07 a9      stp    x14, x15, [x0, #112]
   c91a8: 10 44 08 a9      stp    x16, x17, [x0, #128]
   c91ac: 12 4c 09 a9      stp    x18, x19, [x0, #144]
   c91b0: 14 54 0a a9      stp    x20, x21, [x0, #160]
   c91b4: 16 5c 0b a9      stp    x22, x23, [x0, #176]
   c91b8: 18 64 0c a9      stp    x24, x25, [x0, #192]
   c91bc: 1a 6c 0d a9      stp    x26, x27, [x0, #208]
   c91c0: 1c 74 0e a9      stp    x28, x29, [x0, #224]
   c91c4: 1e 78 00 f9      str    x30, [x0, #240]
   c91c8: e1 03 00 91      mov    x1, sp
   c91cc: 01 7c 00 f9      str    x1, [x0, #248]
   c91d0: 1e 80 00 f9      str    x30, [x0, #256]
   c91d4: 00 04 11 6d      stp    d0, d1, [x0, #272]
   c91d8: 02 0c 12 6d      stp    d2, d3, [x0, #288]
   c91dc: 04 14 13 6d      stp    d4, d5, [x0, #304]
   c91e0: 06 1c 14 6d      stp    d6, d7, [x0, #320]
   c91e4: 08 24 15 6d      stp    d8, d9, [x0, #336]
   c91e8: 0a 2c 16 6d      stp    d10, d11, [x0, #352]
   c91ec: 0c 34 17 6d      stp    d12, d13, [x0, #368]
   c91f0: 0e 3c 18 6d      stp    d14, d15, [x0, #384]
   c91f4: 10 44 19 6d      stp    d16, d17, [x0, #400]
   c91f8: 12 4c 1a 6d      stp    d18, d19, [x0, #416]
   c91fc: 14 54 1b 6d      stp    d20, d21, [x0, #432]
   c9200: 16 5c 1c 6d      stp    d22, d23, [x0, #448]
   c9204: 18 64 1d 6d      stp    d24, d25, [x0, #464]
   c9208: 1a 6c 1e 6d      stp    d26, d27, [x0, #480]
   c920c: 1c 74 1f 6d      stp    d28, d29, [x0, #496]
   c9210: 1e 00 01 fd      str    d30, [x0, #512]
   c9214: 1f 04 01 fd      str    d31, [x0, #520]
   c9218: 00 00 80 d2      mov    x0, #0
   c921c: c0 03 5f d6      ret

Disassembly of section .plt:

00000000000c9220 <.plt>:
   c9220: f0 7b bf a9      stp    x16, x30, [sp, #-16]!
   c9224: 30 00 00 90      adrp    x16, 0xcd000 <.plt+0x14>
   c9228: 11 5e 44 f9      ldr    x17, [x16, #2232]
   c922c: 10 e2 22 91      add    x16, x16, #2232
   c9230: 20 02 1f d6      br    x17
   c9234: 1f 20 03 d5      nop
   c9238: 1f 20 03 d5      nop
   c923c: 1f 20 03 d5      nop

00000000000c9240 <__cxa_finalize@plt>:
   c9240: 30 00 00 90      adrp    x16, 0xcd000 <__cxa_atexit@plt>
   c9244: 11 62 44 f9      ldr    x17, [x16, #2240]
   c9248: 10 02 23 91      add    x16, x16, #2240
   c924c: 20 02 1f d6      br    x17

...

00000000000c9370 <strlen@plt>:
   c9370: 30 00 00 90      adrp    x16, 0xcd000 <realloc@plt>
   c9374: 11 ae 44 f9      ldr    x17, [x16, #2392]
   c9378: 10 62 25 91      add    x16, x16, #2392
   c937c: 20 02 1f d6      br    x17

...

00000000000c9480 <getauxval@plt>:
   c9480: 30 00 00 90      adrp    x16, 0xcd000 <__system_property_get@plt>
   c9484: 11 f2 44 f9      ldr    x17, [x16, #2528]
   c9488: 10 82 27 91      add    x16, x16, #2528
   c948c: 20 02 1f d6      br    x17

00000000000c9490 <__system_property_get@plt>:
   c9490: 30 00 00 90      adrp    x16, 0xcd000 <strncmp@plt>
   c9494: 11 f6 44 f9      ldr    x17, [x16, #2536]
   c9498: 10 a2 27 91      add    x16, x16, #2536
   c949c: 20 02 1f d6      br    x17

00000000000c94a0 <strncmp@plt>:
   c94a0: 30 00 00 90      adrp    x16, 0xcd000 <fprintf@plt>
   c94a4: 11 fa 44 f9      ldr    x17, [x16, #2544]
   c94a8: 10 c2 27 91      add    x16, x16, #2544
   c94ac: 20 02 1f d6      br    x17

...

00000000000c94e0 <pthread_rwlock_unlock@plt>:
   c94e0: 30 00 00 90      adrp    x16, 0xcd000 <dl_iterate_phdr@plt>
   c94e4: 11 0a 45 f9      ldr    x17, [x16, #2576]
   c94e8: 10 42 28 91      add    x16, x16, #2576
   c94ec: 20 02 1f d6      br    x17

00000000000c94f0 <dl_iterate_phdr@plt>:
   c94f0: 30 00 00 90      adrp    x16, 0xcd000 <pthread_rwlock_rdlock@plt>
   c94f4: 11 0e 45 f9      ldr    x17, [x16, #2584]
   c94f8: 10 62 28 91      add    x16, x16, #2584
   c94fc: 20 02 1f d6      br    x17

00000000000c9500 <pthread_rwlock_rdlock@plt>:
   c9500: 30 00 00 90      adrp    x16, 0xcd000 <fwrite@plt>
   c9504: 11 12 45 f9      ldr    x17, [x16, #2592]
   c9508: 10 82 28 91      add    x16, x16, #2592
   c950c: 20 02 1f d6      br    x17

00000000000c9510 <fwrite@plt>:
   c9510: 30 00 00 90      adrp    x16, 0xcd000 <fwrite@plt+0x10>
   c9514: 11 16 45 f9      ldr    x17, [x16, #2600]
   c9518: 10 a2 28 91      add    x16, x16, #2600
   c951c: 20 02 1f d6      br    x17

-s：显示每个节的内容

➜  arm64-v8a objdump -s libtacker.so > libtacker_objdump_s.coffee
...
libtacker.so:    file format elf64-littleaarch64
Contents of section .note.android.ident:
 0238 08000000 84000000 01000000 416e6472  ............Andr
 0248 6f696400 15000000 72323400 00000000  oid.....r24.....
 0258 00000000 00000000 00000000 00000000  ................
 0268 00000000 00000000 00000000 00000000  ................
 0278 00000000 00000000 00000000 00000000  ................
 0288 00000000 00000000 38323135 38383800  ........8215888.
 0298 00000000 00000000 00000000 00000000  ................
 02a8 00000000 00000000 00000000 00000000  ................
 02b8 00000000 00000000 00000000 00000000  ................
 02c8 00000000 00000000                    ........
Contents of section .note.gnu.build-id:
 02d0 04000000 14000000 03000000 474e5500  ............GNU.
 02e0 3a269496 ef440c78 5356664f 89464681  :&...D.xSVfO.FF.
 02f0 5d3c61ad                             ]<a.
Contents of section .dynsym:
 02f8 00000000 00000000 00000000 00000000  ................
 0308 00000000 00000000 01000000 12000000  ................
 0318 00000000 00000000 00000000 00000000  ................
 0328 10000000 12000000 00000000 00000000  ................
 0338 00000000 00000000 1d000000 12000000  ................
 0348 00000000 00000000 00000000 00000000  ................
。。。
 d0f70 5a565416 5f564b5a 5c165849 49165550  ZVT._VKZ\.XII.UP
 d0f80 5b167758 4d504f5c 715c5549 5c4b3900  [.wXMPO\q\UI\K9.
 d0f90 a9cde0ef e5f3eee8 e5aee0f1 f1aec0f1  ................
 d0fa0 f1ede8e2 e0f5e8ee efbaa8d7 81000000  ................
 d0fb0 10000000 00000000 08000000 00000000  ................
 d0fc0 00000000 00000000 00000000 00000000  ................
 d0fd0 00000000 00000000 00000000 00000000  ................
 d0fe0 00000000 00000000 00000000 00000000  ................
 d0ff0 00000000 00000000 00000000 00000000  ................
 d1000 00000000 00000000                    ........
Contents of section .bss:
<skipping contents of bss section at [d1010, d1ae0)>
Contents of section .comment:
 0000 4c696e6b 65723a20 4c4c4420 31342e30  Linker: LLD 14.0
 0010 2e310063 6c616e67 20766572 73696f6e  .1.clang version
 0020 2031342e 302e3000 416e6472 6f696420   14.0.0.Android
 0030 28383037 35313738 2c206261 73656420  (8075178, based
 0040 6f6e2072 34333731 31326229 20636c61  on r437112b) cla
 0050 6e672076 65727369 6f6e2031 342e302e  ng version 14.0.
 0060 31202868 74747073 3a2f2f61 6e64726f  1 (https://andro
 0070 69642e67 6f6f676c 65736f75 7263652e  id.googlesource.
 0080 636f6d2f 746f6f6c 63686169 6e2f6c6c  com/toolchain/ll
 0090 766d2d70 726f6a65 63742038 36373133  vm-project 86713
 00a0 34386238 31623935 66633630 33353035  48b81b95fc603505
 00b0 64666338 38316234 35313033 62656531  dfc881b45103bee1
 00c0 37333129 0000                        731)..
Contents of section .shstrtab:
 0000 002e696e 69745f61 72726179 002e6669  ..init_array..fi
 0010 6e695f61 72726179 002e7465 7874002e  ni_array..text..
 0020 676f7400 2e636f6d 6d656e74 002e6e6f  got..comment..no
 0030 74652e61 6e64726f 69642e69 64656e74  te.android.ident
 0040 002e676f 742e706c 74002e72 656c612e  ..got.plt..rela.
 0050 706c7400 2e627373 002e6479 6e737472  plt..bss..dynstr
 0060 002e6568 5f667261 6d655f68 6472002e  ..eh_frame_hdr..
 0070 676e752e 76657273 696f6e5f 72002e64  gnu.version_r..d
 0080 6174612e 72656c2e 726f002e 72656c61  ata.rel.ro..rela
 0090 2e64796e 002e676e 752e7665 7273696f  .dyn..gnu.versio
 00a0 6e002e64 796e7379 6d002e67 6e752e68  n..dynsym..gnu.h
 00b0 61736800 2e65685f 6672616d 65002e67  ash..eh_frame..g
 00c0 63635f65 78636570 745f7461 626c6500  cc_except_table.
 00d0 2e6e6f74 652e676e 752e6275 696c642d  .note.gnu.build-
 00e0 6964002e 64796e61 6d696300 2e736873  id..dynamic..shs
 00f0 74727461 62002e72 6f646174 61002e64  trtab..rodata..d
 0100 61746100                             ata.

-t：显示符号表

➜  arm64-v8a objdump -t libtacker.so

libtacker.so:    file format elf64-littleaarch64

SYMBOL TABLE:

-T：显示动态符号表

➜  arm64-v8a objdump -T libtacker.so

libtacker.so:    file format elf64-littleaarch64

DYNAMIC SYMBOL TABLE:
0000000000000000      DF *UND*    0000000000000000 (LIBC)       __cxa_finalize
0000000000000000      DF *UND*    0000000000000000 (LIBC)       __cxa_atexit
0000000000000000      DF *UND*    0000000000000000              __android_log_print
0000000000000000      DF *UND*    0000000000000000 (LIBC)       __stack_chk_fail
0000000000000000      DF *UND*    0000000000000000 (LIBC)       memset
0000000000000000      DF *UND*    0000000000000000 (LIBC)       strncpy
0000000000000000      DF *UND*    0000000000000000 (LIBC)       strncat
0000000000000000      DF *UND*    0000000000000000 (LIBC)       pthread_self
0000000000000000      DF *UND*    0000000000000000 (LIBC)       malloc
0000000000000000      DF *UND*    0000000000000000 (LIBC)       free
0000000000000000      DF *UND*    0000000000000000 (LIBC)       posix_memalign
0000000000000000      DO *UND*    0000000000000000 (LIBC)       __sF
0000000000000000      DF *UND*    0000000000000000 (LIBC)       vfprintf
0000000000000000      DF *UND*    0000000000000000 (LIBC)       fputc
0000000000000000      DF *UND*    0000000000000000 (LIBC)       vasprintf
0000000000000000      DF *UND*    0000000000000000 (LIBC)       android_set_abort_message
0000000000000000      DF *UND*    0000000000000000 (LIBC)       openlog
0000000000000000      DF *UND*    0000000000000000 (LIBC)       syslog
0000000000000000      DF *UND*    0000000000000000 (LIBC)       closelog
0000000000000000      DF *UND*    0000000000000000 (LIBC)       abort
0000000000000000      DF *UND*    0000000000000000 (LIBC)       strlen
0000000000000000      DF *UND*    0000000000000000 (LIBC)       realloc
0000000000000000      DF *UND*    0000000000000000 (LIBC)       memmove
0000000000000000      DF *UND*    0000000000000000 (LIBC)       __memmove_chk
0000000000000000      DF *UND*    0000000000000000 (LIBC)       __strlen_chk
0000000000000000      DF *UND*    0000000000000000 (LIBC)       memchr
0000000000000000      DF *UND*    0000000000000000 (LIBC)       __vsnprintf_chk
0000000000000000      DF *UND*    0000000000000000 (LIBC)       memcpy
0000000000000000      DF *UND*    0000000000000000 (LIBC)       pthread_mutex_lock
0000000000000000      DF *UND*    0000000000000000 (LIBC)       pthread_mutex_unlock
0000000000000000      DF *UND*    0000000000000000 (LIBC)       calloc
0000000000000000      DF *UND*    0000000000000000 (LIBC)       strcmp
0000000000000000      DF *UND*    0000000000000000 (LIBC)       pthread_getspecific
0000000000000000      DF *UND*    0000000000000000 (LIBC)       pthread_once
0000000000000000      DF *UND*    0000000000000000 (LIBC)       pthread_setspecific
0000000000000000      DF *UND*    0000000000000000 (LIBC)       pthread_key_delete
0000000000000000      DF *UND*    0000000000000000 (LIBC)       pthread_key_create
0000000000000000      DF *UND*    0000000000000000 (LIBC)       getauxval
0000000000000000      DF *UND*    0000000000000000 (LIBC)       __system_property_get
0000000000000000      DF *UND*    0000000000000000 (LIBC)       strncmp
0000000000000000      DF *UND*    0000000000000000 (LIBC)       fprintf
0000000000000000      DF *UND*    0000000000000000 (LIBC)       fflush
0000000000000000      DF *UND*    0000000000000000 (LIBC)       pthread_rwlock_wrlock
0000000000000000      DF *UND*    0000000000000000 (LIBC)       pthread_rwlock_unlock
0000000000000000      DF *UND*    0000000000000000 (LIBC)       dl_iterate_phdr
0000000000000000      DF *UND*    0000000000000000 (LIBC)       pthread_rwlock_rdlock
0000000000000000      DF *UND*    0000000000000000 (LIBC)       fwrite
0000000000044ce8 g    DF .text    00000000000019d0              .datadiv_decode16117807209816376729
0000000000078a04 g    DF .text    0000000000000a88              .datadiv_decode9901940071257331957
00000000000a8a58 g    DF .text    0000000000000f34              .datadiv_decode14716202181486223822
0000000000076128 g    DF .text    0000000000000870              .datadiv_decode4891596974783633952
...
00000000000a8884 g    DF .text    0000000000000004              .datadiv_decode11706101414295225912
00000000000aa438 g    DF .text    000000000000059c              JNI_OnLoad
0000000000026d98 g    DF .text    00000000000048e0              .datadiv_decode12335027288954124723
...
000000000005c790 g    DF .text    0000000000000004              .datadiv_decode1552205700074701063
000000000005ed50 g    DF .text    00000000000018a0              .datadiv_decode15147620753704794795
00000000000a5e74 g    DF .text    0000000000000004              .datadiv_decode5454406552017557296

-r：显示静态重定位入口

➜  arm64-v8a objdump -r libtacker.so

libtacker.so:    file format elf64-littleaarch64

-R：显示动态重定位入口

➜  arm64-v8a objdump -R libtacker.so
...

00000000000cd858 R_AARCH64_RELATIVE       *ABS*+0xcc650
00000000000cd860 R_AARCH64_RELATIVE       *ABS*+0xf3b9
00000000000cd868 R_AARCH64_RELATIVE       *ABS*+0xcc668
00000000000cd870 R_AARCH64_RELATIVE       *ABS*+0xf3b0
00000000000cd878 R_AARCH64_RELATIVE       *ABS*+0xcc680
00000000000cd880 R_AARCH64_RELATIVE       *ABS*+0xcc698
00000000000cd888 R_AARCH64_RELATIVE       *ABS*+0xcd1a8
00000000000cd890 R_AARCH64_RELATIVE       *ABS*+0xcd1d0
00000000000cd898 R_AARCH64_RELATIVE       *ABS*+0xcd2a0
00000000000cd8a0 R_AARCH64_RELATIVE       *ABS*+0xcd2c8
00000000000cece8 R_AARCH64_RELATIVE       *ABS*+0xc206c
00000000000d0fd0 R_AARCH64_RELATIVE       *ABS*+0xacb9c
00000000000d0fd8 R_AARCH64_RELATIVE       *ABS*+0xaccbc
00000000000d0fe0 R_AARCH64_RELATIVE       *ABS*+0xd4a7
00000000000d0fe8 R_AARCH64_RELATIVE       *ABS*+0xd12a1
00000000000d0ff0 R_AARCH64_RELATIVE       *ABS*+0xd12e0
00000000000d0ff8 R_AARCH64_RELATIVE       *ABS*+0xd12e0
00000000000d1000 R_AARCH64_RELATIVE       *ABS*+0xd1ae0
00000000000cd828 R_AARCH64_GLOB_DAT       __sF
00000000000cd460 R_AARCH64_ABS64          .datadiv_decode16117807209816376729
00000000000cd500 R_AARCH64_ABS64          .datadiv_decode9901940071257331957
00000000000cd5f8 R_AARCH64_ABS64          .datadiv_decode14716202181486223822
00000000000cd4e8 R_AARCH64_ABS64          .datadiv_decode4891596974783633952
00000000000cd570 R_AARCH64_ABS64          .datadiv_decode9339716730803528690
00000000000cd488 R_AARCH64_ABS64          .datadiv_decode13183548145838600894
00000000000cd490 R_AARCH64_ABS64          .datadiv_decode3525000441545555282
00000000000cd4a0 R_AARCH64_ABS64          .datadiv_decode8298916886736451040
00000000000cd4e0 R_AARCH64_ABS64          .datadiv_decode6610309240369344955
00000000000cd5b8 R_AARCH64_ABS64          .datadiv_decode5742785139195766122
00000000000cd410 R_AARCH64_ABS64          .datadiv_decode12946686905750037712
00000000000cd4c0 R_AARCH64_ABS64          .datadiv_decode12620377358555187834
00000000000cd520 R_AARCH64_ABS64          .datadiv_decode15294134973280561020
00000000000cd578 R_AARCH64_ABS64          .datadiv_decode123525175395121774
00000000000cd598 R_AARCH64_ABS64          .datadiv_decode17486258817593906496
00000000000cd470 R_AARCH64_ABS64          .datadiv_decode15789135661111847785
00000000000cd508 R_AARCH64_ABS64          .datadiv_decode9708024290202508361
00000000000cd550 R_AARCH64_ABS64          .datadiv_decode12389017544255092540
00000000000cd5a8 R_AARCH64_ABS64          .datadiv_decode8646520184225136992
00000000000cd528 R_AARCH64_ABS64          .datadiv_decode5555087159661513939
00000000000cd538 R_AARCH64_ABS64          .datadiv_decode18018071361702630102
00000000000cd548 R_AARCH64_ABS64          .datadiv_decode11327300974587163078
00000000000cd568 R_AARCH64_ABS64          .datadiv_decode13214095259256631718
00000000000cd428 R_AARCH64_ABS64          .datadiv_decode3631146530348700705
00000000000cd4d0 R_AARCH64_ABS64          .datadiv_decode8050698040297613930
00000000000cd5f0 R_AARCH64_ABS64          .datadiv_decode11706101414295225912
00000000000cd3e8 R_AARCH64_ABS64          .datadiv_decode12335027288954124723
00000000000cd418 R_AARCH64_ABS64          .datadiv_decode18261546535841772752
00000000000cd450 R_AARCH64_ABS64          .datadiv_decode5616837089396308971
00000000000cd4f8 R_AARCH64_ABS64          .datadiv_decode13827763977763901235
00000000000cd458 R_AARCH64_ABS64          .datadiv_decode14151120317447827231
00000000000cd480 R_AARCH64_ABS64          .datadiv_decode11770512853690929982
00000000000cd5c0 R_AARCH64_ABS64          .datadiv_decode14401673864441325462
00000000000cd400 R_AARCH64_ABS64          .datadiv_decode8952246851265070369
00000000000cd478 R_AARCH64_ABS64          .datadiv_decode5074647643595886391
00000000000cd4a8 R_AARCH64_ABS64          .datadiv_decode11553230420239584337
00000000000cd4d8 R_AARCH64_ABS64          .datadiv_decode11784788714666544642
00000000000cd4f0 R_AARCH64_ABS64          .datadiv_decode15357274442415173716
00000000000cd510 R_AARCH64_ABS64          .datadiv_decode16313801769778548889
00000000000cd580 R_AARCH64_ABS64          .datadiv_decode18380577887196024106
00000000000cd3f8 R_AARCH64_ABS64          .datadiv_decode18328417529454547004
00000000000cd518 R_AARCH64_ABS64          .datadiv_decode12121706469311219939
00000000000cd540 R_AARCH64_ABS64          .datadiv_decode4193671268968804409
00000000000cd5c8 R_AARCH64_ABS64          .datadiv_decode6405721680354649260
00000000000cd5e8 R_AARCH64_ABS64          .datadiv_decode8316381480288167535
00000000000cd468 R_AARCH64_ABS64          .datadiv_decode12672127785521407892
00000000000cd530 R_AARCH64_ABS64          .datadiv_decode1095597082262436137
00000000000cd558 R_AARCH64_ABS64          .datadiv_decode11689284992262612148
00000000000cd588 R_AARCH64_ABS64          .datadiv_decode17940233878698364930
00000000000cd448 R_AARCH64_ABS64          .datadiv_decode1771790552069125206
00000000000cd4c8 R_AARCH64_ABS64          .datadiv_decode12950792008805936966
00000000000cd560 R_AARCH64_ABS64          .datadiv_decode6931257938975476985
00000000000cd5a0 R_AARCH64_ABS64          .datadiv_decode15620942718649555403
00000000000cd600 R_AARCH64_ABS64          .datadiv_decode8758840755024801160
00000000000cd408 R_AARCH64_ABS64          .datadiv_decode8010288038339893607
00000000000cd4b8 R_AARCH64_ABS64          .datadiv_decode2175705720332001599
00000000000cd590 R_AARCH64_ABS64          .datadiv_decode256915654516018196
00000000000cd5b0 R_AARCH64_ABS64          .datadiv_decode16710377636940783008
00000000000cd5d0 R_AARCH64_ABS64          .datadiv_decode1639262728706781308
00000000000cd5e0 R_AARCH64_ABS64          .datadiv_decode5533236249192328355
00000000000cd608 R_AARCH64_ABS64          .datadiv_decode2444497212690810360
00000000000cd420 R_AARCH64_ABS64          .datadiv_decode15481956303235929690
00000000000cd438 R_AARCH64_ABS64          .datadiv_decode17677705362567080649
00000000000cd440 R_AARCH64_ABS64          .datadiv_decode7614718738418908679
00000000000cd3f0 R_AARCH64_ABS64          .datadiv_decode17838636323198310142
00000000000cd430 R_AARCH64_ABS64          .datadiv_decode17330405497468958994
00000000000cd498 R_AARCH64_ABS64          .datadiv_decode1552205700074701063
00000000000cd4b0 R_AARCH64_ABS64          .datadiv_decode15147620753704794795
00000000000cd5d8 R_AARCH64_ABS64          .datadiv_decode5454406552017557296
00000000000cd8c0 R_AARCH64_JUMP_SLOT      __cxa_finalize
00000000000cd8c8 R_AARCH64_JUMP_SLOT      __cxa_atexit
00000000000cd8d0 R_AARCH64_JUMP_SLOT      __android_log_print
00000000000cd8d8 R_AARCH64_JUMP_SLOT      __stack_chk_fail
00000000000cd8e0 R_AARCH64_JUMP_SLOT      memset
00000000000cd8e8 R_AARCH64_JUMP_SLOT      strncpy
00000000000cd8f0 R_AARCH64_JUMP_SLOT      strncat
00000000000cd8f8 R_AARCH64_JUMP_SLOT      pthread_self
00000000000cd900 R_AARCH64_JUMP_SLOT      malloc
00000000000cd908 R_AARCH64_JUMP_SLOT      free
00000000000cd910 R_AARCH64_JUMP_SLOT      posix_memalign
00000000000cd918 R_AARCH64_JUMP_SLOT      vfprintf
00000000000cd920 R_AARCH64_JUMP_SLOT      fputc
00000000000cd928 R_AARCH64_JUMP_SLOT      vasprintf
00000000000cd930 R_AARCH64_JUMP_SLOT      android_set_abort_message
00000000000cd938 R_AARCH64_JUMP_SLOT      openlog
00000000000cd940 R_AARCH64_JUMP_SLOT      syslog
00000000000cd948 R_AARCH64_JUMP_SLOT      closelog
00000000000cd950 R_AARCH64_JUMP_SLOT      abort
00000000000cd958 R_AARCH64_JUMP_SLOT      strlen
00000000000cd960 R_AARCH64_JUMP_SLOT      realloc
00000000000cd968 R_AARCH64_JUMP_SLOT      memmove
00000000000cd970 R_AARCH64_JUMP_SLOT      __memmove_chk
00000000000cd978 R_AARCH64_JUMP_SLOT      __strlen_chk
00000000000cd980 R_AARCH64_JUMP_SLOT      memchr
00000000000cd988 R_AARCH64_JUMP_SLOT      __vsnprintf_chk
00000000000cd990 R_AARCH64_JUMP_SLOT      memcpy
00000000000cd998 R_AARCH64_JUMP_SLOT      pthread_mutex_lock
00000000000cd9a0 R_AARCH64_JUMP_SLOT      pthread_mutex_unlock
00000000000cd9a8 R_AARCH64_JUMP_SLOT      calloc
00000000000cd9b0 R_AARCH64_JUMP_SLOT      strcmp
00000000000cd9b8 R_AARCH64_JUMP_SLOT      pthread_getspecific
00000000000cd9c0 R_AARCH64_JUMP_SLOT      pthread_once
00000000000cd9c8 R_AARCH64_JUMP_SLOT      pthread_setspecific
00000000000cd9d0 R_AARCH64_JUMP_SLOT      pthread_key_delete
00000000000cd9d8 R_AARCH64_JUMP_SLOT      pthread_key_create
00000000000cd9e0 R_AARCH64_JUMP_SLOT      getauxval
00000000000cd9e8 R_AARCH64_JUMP_SLOT      __system_property_get
00000000000cd9f0 R_AARCH64_JUMP_SLOT      strncmp
00000000000cd9f8 R_AARCH64_JUMP_SLOT      fprintf
00000000000cda00 R_AARCH64_JUMP_SLOT      fflush
00000000000cda08 R_AARCH64_JUMP_SLOT      pthread_rwlock_wrlock
00000000000cda10 R_AARCH64_JUMP_SLOT      pthread_rwlock_unlock
00000000000cda18 R_AARCH64_JUMP_SLOT      dl_iterate_phdr
00000000000cda20 R_AARCH64_JUMP_SLOT      pthread_rwlock_rdlock
00000000000cda28 R_AARCH64_JUMP_SLOT      fwrite

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-02 23:09:26

help

objdump的语法help

➜  ~ objdump --help
OVERVIEW: llvm object file dumper

USAGE: objdump [options] <input object files>

OPTIONS:
  --adjust-vma=offset     Increase the displayed address by the specified offset
  --all-headers           Display all available header information, relocation entries and the symbol table
  --arch-name=<value>     Target arch to disassemble for, see --version for available targets
  --archive-headers       Display archive header information
  -a                      Alias for --archive-headers
  -C                      Alias for --demangle
  --debug-vars-indent=<value>
                          Distance to indent the source-level variable display, relative to the start of the disassembly
  --debug-vars=<value>    Print the locations (in registers or memory) of source-level variables alongside disassembly. Supported formats: ascii, unicode (default)
  --demangle              Demangle symbol names
  --disassemble-all       Disassemble all sections found in the input files
  --disassemble-symbols=<value>
                          List of symbols to disassemble. Accept demangled names when --demangle is specified, otherwise accept mangled names
  --disassemble-zeroes    Do not skip blocks of zeroes when disassembling
  --disassembler-options=options
                          Pass target specific disassembler options
  --disassemble           Disassemble all executable sections found in the input files
  --dwarf=<value>         Dump the specified DWARF debug sections. The only supported value is 'frames'
  --dynamic-reloc         Display the dynamic relocation entries in the file
  --dynamic-syms          Display the contents of the dynamic symbol table
  -D                      Alias for --disassemble-all
  -d                      Alias for --disassemble
  --fault-map-section     Display the content of the fault map section
  --file-headers          Display the contents of the overall file header
  --full-contents         Display the content of each section
  -f                      Alias for --file-headers
  --headers               Alias for --section-headers
  --help                  Display available options (--help-hidden for more)
  -h                      Alias for --section-headers
  -j <value>              Alias for --section
  --line-numbers          When disassembling, display source line numbers. Implies --disassemble
  -l                      Alias for --line-numbers
  --macho                 Use MachO specific object file parser
  --mattr=a1,+a2,-a3,...  Target specific attributes (--mattr=help for details)
  --mcpu=cpu-name         Target a specific cpu type (--mcpu=help for details)
  -M <value>              Alias for --disassembler-options=
  -m                      Alias for --macho
  --no-leading-addr       When disassembling, do not print leading addresses
  --no-print-imm-hex      Do not use hex format for immediate values (default)
  --no-show-raw-insn      When disassembling instructions, do not print the instruction bytes.
  --prefix-strip=prefix   Strip out initial directories from absolute paths. No effect without --prefix
  --prefix=prefix         Add prefix to absolute paths
  --print-imm-hex         Use hex format for immediate values
  --private-headers       Display format specific file headers
  -p                      Alias for --private-headers
  --raw-clang-ast         Dump the raw binary contents of the clang AST section
  --reloc                 Display the relocation entries in the file
  -R                      Alias for --dynamic-reloc
  -r                      Alias for --reloc
  --section-headers       Display summaries of the headers for each section.
  --section=<value>       Operate on the specified sections only. With --macho dump segment,section
  --show-lma              Display LMA column when dumping ELF section headers
  --source                When disassembling, display source interleaved with the disassembly. Implies --disassemble
  --start-address=address Set the start address for disassembling, printing relocations and printing symbols
  --stop-address=address  Set the stop address for disassembling, printing relocations and printing symbols
  --symbol-description    Add symbol description for disassembly. This option is for XCOFF files only.
  --symbolize-operands    Symbolize instruction operands when disassembling
  --syms                  Display the symbol table
  -S                      Alias for --source
  -s                      Alias for --full-contents
  --triple=<value>        Target triple to disassemble for, see --version for available targets
  -T                      Alias for --dynamic-syms
  -t                      Alias for --syms
  --unwind-info           Display unwind information
  -u                      Alias for --unwind-info
  --version               Display the version of this program
  -v                      Alias for --version
  --wide                  Ignored for compatibility with GNU objdump
  --x86-asm-syntax=att    Emit AT&T-style disassembly
  --x86-asm-syntax=intel  Emit Intel-style disassembly
  -x                      Alias for --all-headers
  -z                      Alias for --disassemble-zeroes

llvm-objdump MachO Specific Options:
  --arch=<value>         architecture(s) from a Mach-O file to dump
  --archive-member-offsets
                         Print the offset to each archive member for Mach-O archives (requires --macho and --archive-headers)
  --bind                 Display mach-o binding info
  --data-in-code         Print the data in code table for Mach-O objects (requires --macho)
  --dis-symname <value>  disassemble just this symbol's instructions (requires --macho)
  --dsym=<value>         Use .dSYM file for debug info
  --dyld_info            Print bind and rebase information used by dyld to resolve external references in a final linked binary (requires --macho)
  --dylib-id             Print the shared library's id for the dylib Mach-O file (requires --macho)
  --dylibs-used          Print the shared libraries used for linked Mach-O files (requires --macho)
  --exports-trie         Display mach-o exported symbols
  --full-leading-addr    Print full leading address
  --function-starts      Print the function starts table for Mach-O objects (requires --macho)
  -g                     Print line information from debug info if available
  --indirect-symbols     Print indirect symbol table for Mach-O objects (requires --macho)
  --info-plist           Print the info plist section as strings for Mach-O objects (requires --macho)
  --lazy-bind            Display mach-o lazy binding info
  --link-opt-hints       Print the linker optimization hints for Mach-O objects (requires --macho)
  --no-leading-headers   Print no leading headers
  --no-symbolic-operands do not symbolic operands when disassembling (requires --macho)
  --non-verbose          Print the info for Mach-O objects in non-verbose or numeric form (requires --macho)
  --objc-meta-data       Print the Objective-C runtime meta data for Mach-O files (requires --macho)
  --private-header       Display only the first format specific file header
  --rebase               Display mach-o rebasing info
  --rpaths               Print the runtime search paths for the Mach-O file (requires --macho)
  --universal-headers    Print Mach-O universal headers (requires --macho)
  --weak-bind            Display mach-o weak binding info

Pass @FILE as argument to read options from FILE.

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-02 23:10:39

man

objdump的man手册

OBJDUMP(1)                GNU Development Tools               OBJDUMP(1)

NAME         top
       objdump - display information from object files

SYNOPSIS         top
       objdump [-a|--archive-headers]
               [-b bfdname|--target=bfdname]
               [-C|--demangle[=style] ]
               [-d|--disassemble[=symbol]]
               [-D|--disassemble-all]
               [-z|--disassemble-zeroes]
               [-EB|-EL|--endian={big | little }]
               [-f|--file-headers]
               [-F|--file-offsets]
               [--file-start-context]
               [-g|--debugging]
               [-e|--debugging-tags]
               [-h|--section-headers|--headers]
               [-i|--info]
               [-j section|--section=section]
               [-l|--line-numbers]
               [-S|--source]
               [--source-comment[=text]]
               [-m machine|--architecture=machine]
               [-M options|--disassembler-options=options]
               [-p|--private-headers]
               [-P options|--private=options]
               [-r|--reloc]
               [-R|--dynamic-reloc]
               [-s|--full-contents]
               [-W[lLiaprmfFsoORtUuTgAck]|
                --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links]]
               [-WK|--dwarf=follow-links]
               [-WN|--dwarf=no-follow-links]
               [-wD|--dwarf=use-debuginfod]
               [-wE|--dwarf=do-not-use-debuginfod]
               [-L|--process-links]
               [--ctf=section]
               [--sframe=section]
               [-G|--stabs]
               [-t|--syms]
               [-T|--dynamic-syms]
               [-x|--all-headers]
               [-w|--wide]
               [--start-address=address]
               [--stop-address=address]
               [--no-addresses]
               [--prefix-addresses]
               [--[no-]show-raw-insn]
               [--adjust-vma=offset]
               [--show-all-symbols]
               [--dwarf-depth=n]
               [--dwarf-start=n]
               [--ctf-parent=section]
               [--no-recurse-limit|--recurse-limit]
               [--special-syms]
               [--prefix=prefix]
               [--prefix-strip=level]
               [--insn-width=width]
               [--visualize-jumps[=color|=extended-color|=off]
               [--disassembler-color=[off|terminal|on|extended]
               [-U method] [--unicode=method]
               [-V|--version]
               [-H|--help]
               objfile...

DESCRIPTION         top
       objdump displays information about one or more object files.  The
       options control what particular information to display.  This
       information is mostly useful to programmers who are working on
       the compilation tools, as opposed to programmers who just want
       their program to compile and work.

       objfile... are the object files to be examined.  When you specify
       archives, objdump shows information on each of the member object
       files.

OPTIONS         top
       The long and short forms of options, shown here as alternatives,
       are equivalent.  At least one option from the list
       -a,-d,-D,-e,-f,-g,-G,-h,-H,-p,-P,-r,-R,-s,-S,-t,-T,-V,-x must be
       given.

       -a
       --archive-header
           If any of the objfile files are archives, display the archive
           header information (in a format similar to ls -l).  Besides
           the information you could list with ar tv, objdump -a shows
           the object file format of each archive member.

       --adjust-vma=offset
           When dumping information, first add offset to all the section
           addresses.  This is useful if the section addresses do not
           correspond to the symbol table, which can happen when putting
           sections at particular addresses when using a format which
           can not represent section addresses, such as a.out.

       -b bfdname
       --target=bfdname
           Specify that the object-code format for the object files is
           bfdname.  This option may not be necessary; objdump can
           automatically recognize many formats.

           For example,

                   objdump -b oasys -m vax -h fu.o

           displays summary information from the section headers (-h) of
           fu.o, which is explicitly identified (-m) as a VAX object
           file in the format produced by Oasys compilers.  You can list
           the formats available with the -i option.

       -C
       --demangle[=style]
           Decode (demangle) low-level symbol names into user-level
           names.  Besides removing any initial underscore prepended by
           the system, this makes C++ function names readable.
           Different compilers have different mangling styles. The
           optional demangling style argument can be used to choose an
           appropriate demangling style for your compiler.

       --recurse-limit
       --no-recurse-limit
       --recursion-limit
       --no-recursion-limit
           Enables or disables a limit on the amount of recursion
           performed whilst demangling strings.  Since the name mangling
           formats allow for an infinite level of recursion it is
           possible to create strings whose decoding will exhaust the
           amount of stack space available on the host machine,
           triggering a memory fault.  The limit tries to prevent this
           from happening by restricting recursion to 2048 levels of
           nesting.

           The default is for this limit to be enabled, but disabling it
           may be necessary in order to demangle truly complicated
           names.  Note however that if the recursion limit is disabled
           then stack exhaustion is possible and any bug reports about
           such an event will be rejected.

       -g
       --debugging
           Display debugging information.  This attempts to parse STABS
           debugging format information stored in the file and print it
           out using a C like syntax.  If no STABS debugging was found
           this option falls back on the -W option to print any DWARF
           information in the file.

       -e
       --debugging-tags
           Like -g, but the information is generated in a format
           compatible with ctags tool.

       -d
       --disassemble
       --disassemble=symbol
           Display the assembler mnemonics for the machine instructions
           from the input file.  This option only disassembles those
           sections which are expected to contain instructions.  If the
           optional symbol argument is given, then display the assembler
           mnemonics starting at symbol.  If symbol is a function name
           then disassembly will stop at the end of the function,
           otherwise it will stop when the next symbol is encountered.
           If there are no matches for symbol then nothing will be
           displayed.

           Note if the --dwarf=follow-links option is enabled then any
           symbol tables in linked debug info files will be read in and
           used when disassembling.

       -D
       --disassemble-all
           Like -d, but disassemble the contents of all sections, not
           just those expected to contain instructions.

           This option also has a subtle effect on the disassembly of
           instructions in code sections.  When option -d is in effect
           objdump will assume that any symbols present in a code
           section occur on the boundary between instructions and it
           will refuse to disassemble across such a boundary.  When
           option -D is in effect however this assumption is supressed.
           This means that it is possible for the output of -d and -D to
           differ if, for example, data is stored in code sections.

           If the target is an ARM architecture this switch also has the
           effect of forcing the disassembler to decode pieces of data
           found in code sections as if they were instructions.

           Note if the --dwarf=follow-links option is enabled then any
           symbol tables in linked debug info files will be read in and
           used when disassembling.

       --no-addresses
           When disassembling, don't print addresses on each line or for
           symbols and relocation offsets.  In combination with
           --no-show-raw-insn this may be useful for comparing compiler
           output.

       --prefix-addresses
           When disassembling, print the complete address on each line.
           This is the older disassembly format.

       -EB
       -EL
       --endian={big|little}
           Specify the endianness of the object files.  This only
           affects disassembly.  This can be useful when disassembling a
           file format which does not describe endianness information,
           such as S-records.

       -f
       --file-headers
           Display summary information from the overall header of each
           of the objfile files.

       -F
       --file-offsets
           When disassembling sections, whenever a symbol is displayed,
           also display the file offset of the region of data that is
           about to be dumped.  If zeroes are being skipped, then when
           disassembly resumes, tell the user how many zeroes were
           skipped and the file offset of the location from where the
           disassembly resumes.  When dumping sections, display the file
           offset of the location from where the dump starts.

       --file-start-context
           Specify that when displaying interlisted source
           code/disassembly (assumes -S) from a file that has not yet
           been displayed, extend the context to the start of the file.

       -h
       --section-headers
       --headers
           Display summary information from the section headers of the
           object file.

           File segments may be relocated to nonstandard addresses, for
           example by using the -Ttext, -Tdata, or -Tbss options to ld.
           However, some object file formats, such as a.out, do not
           store the starting address of the file segments.  In those
           situations, although ld relocates the sections correctly,
           using objdump -h to list the file section headers cannot show
           the correct addresses.  Instead, it shows the usual
           addresses, which are implicit for the target.

           Note, in some cases it is possible for a section to have both
           the READONLY and the NOREAD attributes set.  In such cases
           the NOREAD attribute takes precedence, but objdump will
           report both since the exact setting of the flag bits might be
           important.

       -H
       --help
           Print a summary of the options to objdump and exit.

       -i
       --info
           Display a list showing all architectures and object formats
           available for specification with -b or -m.

       -j name
       --section=name
           Display information only for section name.

       -L
       --process-links
           Display the contents of non-debug sections found in separate
           debuginfo files that are linked to the main file.  This
           option automatically implies the -WK option, and only
           sections requested by other command line options will be
           displayed.

       -l
       --line-numbers
           Label the display (using debugging information) with the
           filename and source line numbers corresponding to the object
           code or relocs shown.  Only useful with -d, -D, or -r.

       -m machine
       --architecture=machine
           Specify the architecture to use when disassembling object
           files.  This can be useful when disassembling object files
           which do not describe architecture information, such as
           S-records.  You can list the available architectures with the
           -i option.

           For most architectures it is possible to supply an
           architecture name and a machine name, separated by a colon.
           For example foo:bar would refer to the bar machine type in
           the foo architecture.  This can be helpful if objdump has
           been configured to support multiple architectures.

           If the target is an ARM architecture then this switch has an
           additional effect.  It restricts the disassembly to only
           those instructions supported by the architecture specified by
           machine.  If it is necessary to use this switch because the
           input file does not contain any architecture information, but
           it is also desired to disassemble all the instructions use
           -marm.

       -M options
       --disassembler-options=options
           Pass target specific information to the disassembler.  Only
           supported on some targets.  If it is necessary to specify
           more than one disassembler option then multiple -M options
           can be used or can be placed together into a comma separated
           list.

           For ARC, dsp controls the printing of DSP instructions, spfp
           selects the printing of FPX single precision FP instructions,
           dpfp selects the printing of FPX double precision FP
           instructions, quarkse_em selects the printing of special
           QuarkSE-EM instructions, fpuda selects the printing of double
           precision assist instructions, fpus selects the printing of
           FPU single precision FP instructions, while fpud selects the
           printing of FPU double precision FP instructions.
           Additionally, one can choose to have all the immediates
           printed in hexadecimal using hex.  By default, the short
           immediates are printed using the decimal representation,
           while the long immediate values are printed as hexadecimal.

           cpu=... allows one to enforce a particular ISA when
           disassembling instructions, overriding the -m value or
           whatever is in the ELF file.  This might be useful to select
           ARC EM or HS ISA, because architecture is same for those and
           disassembler relies on private ELF header data to decide if
           code is for EM or HS.  This option might be specified
           multiple times - only the latest value will be used.  Valid
           values are same as for the assembler -mcpu=... option.

           If the target is an ARM architecture then this switch can be
           used to select which register name set is used during
           disassembler.  Specifying -M reg-names-std (the default) will
           select the register names as used in ARM's instruction set
           documentation, but with register 13 called 'sp', register 14
           called 'lr' and register 15 called 'pc'.  Specifying -M reg-
           names-apcs will select the name set used by the ARM Procedure
           Call Standard, whilst specifying -M reg-names-raw will just
           use r followed by the register number.

           There are also two variants on the APCS register naming
           scheme enabled by -M reg-names-atpcs and -M reg-names-
           special-atpcs which use the ARM/Thumb Procedure Call Standard
           naming conventions.  (Either with the normal register names
           or the special register names).

           This option can also be used for ARM architectures to force
           the disassembler to interpret all instructions as Thumb
           instructions by using the switch
           --disassembler-options=force-thumb.  This can be useful when
           attempting to disassemble thumb code produced by other
           compilers.

           For AArch64 targets this switch can be used to set whether
           instructions are disassembled as the most general instruction
           using the -M no-aliases option or whether instruction notes
           should be generated as comments in the disasssembly using -M
           notes.

           For the x86, some of the options duplicate functions of the
           -m switch, but allow finer grained control.

           "x86-64"
           "i386"
           "i8086"
               Select disassembly for the given architecture.

           "intel"
           "att"
               Select between intel syntax mode and AT&T syntax mode.

           "amd64"
           "intel64"
               Select between AMD64 ISA and Intel64 ISA.

           "intel-mnemonic"
           "att-mnemonic"
               Select between intel mnemonic mode and AT&T mnemonic
               mode.  Note: "intel-mnemonic" implies "intel" and
               "att-mnemonic" implies "att".

           "addr64"
           "addr32"
           "addr16"
           "data32"
           "data16"
               Specify the default address size and operand size.  These
               five options will be overridden if "x86-64", "i386" or
               "i8086" appear later in the option string.

           "suffix"
               When in AT&T mode and also for a limited set of
               instructions when in Intel mode, instructs the
               disassembler to print a mnemonic suffix even when the
               suffix could be inferred by the operands or, for certain
               instructions, the execution mode's defaults.

           For PowerPC, the -M argument raw selects disasssembly of
           hardware insns rather than aliases.  For example, you will
           see "rlwinm" rather than "clrlwi", and "addi" rather than
           "li".  All of the -m arguments for gas that select a CPU are
           supported.  These are: 403, 405, 440, 464, 476, 601, 603,
           604, 620, 7400, 7410, 7450, 7455, 750cl, 821, 850, 860, a2,
           booke, booke32, cell, com, e200z2, e200z4, e300, e500,
           e500mc, e500mc64, e500x2, e5500, e6500, efs, power4, power5,
           power6, power7, power8, power9, power10, ppc, ppc32, ppc64,
           ppc64bridge, ppcps, pwr, pwr2, pwr4, pwr5, pwr5x, pwr6, pwr7,
           pwr8, pwr9, pwr10, pwrx, titan, vle, and future.  32 and 64
           modify the default or a prior CPU selection, disabling and
           enabling 64-bit insns respectively.  In addition, altivec,
           any, lsp, htm, vsx, spe and  spe2 add capabilities to a
           previous or later CPU selection.  any will disassemble any
           opcode known to binutils, but in cases where an opcode has
           two different meanings or different arguments, you may not
           see the disassembly you expect.  If you disassemble without
           giving a CPU selection, a default will be chosen from
           information gleaned by BFD from the object files headers, but
           the result again may not be as you expect.

           For MIPS, this option controls the printing of instruction
           mnemonic names and register names in disassembled
           instructions.  Multiple selections from the following may be
           specified as a comma separated string, and invalid options
           are ignored:

           "no-aliases"
               Print the 'raw' instruction mnemonic instead of some
               pseudo instruction mnemonic.  I.e., print 'daddu' or 'or'
               instead of 'move', 'sll' instead of 'nop', etc.

           "msa"
               Disassemble MSA instructions.

           "virt"
               Disassemble the virtualization ASE instructions.

           "xpa"
               Disassemble the eXtended Physical Address (XPA) ASE
               instructions.

           "gpr-names=ABI"
               Print GPR (general-purpose register) names as appropriate
               for the specified ABI.  By default, GPR names are
               selected according to the ABI of the binary being
               disassembled.

           "fpr-names=ABI"
               Print FPR (floating-point register) names as appropriate
               for the specified ABI.  By default, FPR numbers are
               printed rather than names.

           "cp0-names=ARCH"
               Print CP0 (system control coprocessor; coprocessor 0)
               register names as appropriate for the CPU or architecture
               specified by ARCH.  By default, CP0 register names are
               selected according to the architecture and CPU of the
               binary being disassembled.

           "hwr-names=ARCH"
               Print HWR (hardware register, used by the "rdhwr"
               instruction) names as appropriate for the CPU or
               architecture specified by ARCH.  By default, HWR names
               are selected according to the architecture and CPU of the
               binary being disassembled.

           "reg-names=ABI"
               Print GPR and FPR names as appropriate for the selected
               ABI.

           "reg-names=ARCH"
               Print CPU-specific register names (CP0 register and HWR
               names) as appropriate for the selected CPU or
               architecture.

           For any of the options listed above, ABI or ARCH may be
           specified as numeric to have numbers printed rather than
           names, for the selected types of registers.  You can list the
           available values of ABI and ARCH using the --help option.

           For VAX, you can specify function entry addresses with -M
           entry:0xf00ba.  You can use this multiple times to properly
           disassemble VAX binary files that don't contain symbol tables
           (like ROM dumps).  In these cases, the function entry mask
           would otherwise be decoded as VAX instructions, which would
           probably lead the rest of the function being wrongly
           disassembled.

       -p
       --private-headers
           Print information that is specific to the object file format.
           The exact information printed depends upon the object file
           format.  For some object file formats, no additional
           information is printed.

       -P options
       --private=options
           Print information that is specific to the object file format.
           The argument options is a comma separated list that depends
           on the format (the lists of options is displayed with the
           help).

           For XCOFF, the available options are:

           "header"
           "aout"
           "sections"
           "syms"
           "relocs"
           "lineno,"
           "loader"
           "except"
           "typchk"
           "traceback"
           "toc"
           "ldinfo"

           Not all object formats support this option.  In particular
           the ELF format does not use it.

       -r
       --reloc
           Print the relocation entries of the file.  If used with -d or
           -D, the relocations are printed interspersed with the
           disassembly.

       -R
       --dynamic-reloc
           Print the dynamic relocation entries of the file.  This is
           only meaningful for dynamic objects, such as certain types of
           shared libraries.  As for -r, if used with -d or -D, the
           relocations are printed interspersed with the disassembly.

       -s
       --full-contents
           Display the full contents of any sections requested.  By
           default all non-empty sections are displayed.

       -S
       --source
           Display source code intermixed with disassembly, if possible.
           Implies -d.

       --show-all-symbols
           When disassembling, show all the symbols that match a given
           address, not just the first one.

       --source-comment[=txt]
           Like the -S option, but all source code lines are displayed
           with a prefix of txt.  Typically txt will be a comment string
           which can be used to distinguish the assembler code from the
           source code.  If txt is not provided then a default string of
           "# " (hash followed by a space), will be used.

       --prefix=prefix
           Specify prefix to add to the absolute paths when used with
           -S.

       --prefix-strip=level
           Indicate how many initial directory names to strip off the
           hardwired absolute paths. It has no effect without
           --prefix=prefix.

       --show-raw-insn
           When disassembling instructions, print the instruction in hex
           as well as in symbolic form.  This is the default except when
           --prefix-addresses is used.

       --no-show-raw-insn
           When disassembling instructions, do not print the instruction
           bytes.  This is the default when --prefix-addresses is used.

       --insn-width=width
           Display width bytes on a single line when disassembling
           instructions.

       --visualize-jumps[=color|=extended-color|=off]
           Visualize jumps that stay inside a function by drawing ASCII
           art between the start and target addresses.  The optional
           =color argument adds color to the output using simple
           terminal colors.  Alternatively the =extended-color argument
           will add color using 8bit colors, but these might not work on
           all terminals.

           If it is necessary to disable the visualize-jumps option
           after it has previously been enabled then use
           visualize-jumps=off.

       --disassembler-color=off
       --disassembler-color=terminal
       --disassembler-color=on|color|colour
       --disassembler-color=extened|extended-color|extened-colour
           Enables or disables the use of colored syntax highlighting in
           disassembly output.  The default behaviour is determined via
           a configure time option.  Note, not all architectures support
           colored syntax highlighting, and depending upon the terminal
           used, colored output may not actually be legible.

           The on argument adds colors using simple terminal colors.

           The terminal argument does the same, but only if the output
           device is a terminal.

           The extended-color argument is similar to the on argument,
           but it uses 8-bit colors.  These may not work on all
           terminals.

           The off argument disables colored disassembly.

       -W[lLiaprmfFsoORtUuTgAckK]
       --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links,=follow-links]
           Displays the contents of the DWARF debug sections in the
           file, if any are present.  Compressed debug sections are
           automatically decompressed (temporarily) before they are
           displayed.  If one or more of the optional letters or words
           follows the switch then only those type(s) of data will be
           dumped.  The letters and words refer to the following
           information:

           "a"
           "=abbrev"
               Displays the contents of the .debug_abbrev section.

           "A"
           "=addr"
               Displays the contents of the .debug_addr section.

           "c"
           "=cu_index"
               Displays the contents of the .debug_cu_index and/or
               .debug_tu_index sections.

           "f"
           "=frames"
               Display the raw contents of a .debug_frame section.

           "F"
           "=frames-interp"
               Display the interpreted contents of a .debug_frame
               section.

           "g"
           "=gdb_index"
               Displays the contents of the .gdb_index and/or
               .debug_names sections.

           "i"
           "=info"
               Displays the contents of the .debug_info section.  Note:
               the output from this option can also be restricted by the
               use of the --dwarf-depth and --dwarf-start options.

           "k"
           "=links"
               Displays the contents of the .gnu_debuglink,
               .gnu_debugaltlink and .debug_sup sections, if any of them
               are present.  Also displays any links to separate dwarf
               object files (dwo), if they are specified by the
               DW_AT_GNU_dwo_name or DW_AT_dwo_name attributes in the
               .debug_info section.

           "K"
           "=follow-links"
               Display the contents of any selected debug sections that
               are found in linked, separate debug info file(s).  This
               can result in multiple versions of the same debug section
               being displayed if it exists in more than one file.

               In addition, when displaying DWARF attributes, if a form
               is found that references the separate debug info file,
               then the referenced contents will also be displayed.

               Note - in some distributions this option is enabled by
               default.  It can be disabled via the N debug option.  The
               default can be chosen when configuring the binutils via
               the --enable-follow-debug-links=yes or
               --enable-follow-debug-links=no options.  If these are not
               used then the default is to enable the following of debug
               links.

               Note - if support for the debuginfod protocol was enabled
               when the binutils were built then this option will also
               include an attempt to contact any debuginfod servers
               mentioned in the DEBUGINFOD_URLS environment variable.
               This could take some time to resolve.  This behaviour can
               be disabled via the =do-not-use-debuginfod debug option.

           "N"
           "=no-follow-links"
               Disables the following of links to separate debug info
               files.

           "D"
           "=use-debuginfod"
               Enables contacting debuginfod servers if there is a need
               to follow debug links.  This is the default behaviour.

           "E"
           "=do-not-use-debuginfod"
               Disables contacting debuginfod servers when there is a
               need to follow debug links.

           "l"
           "=rawline"
               Displays the contents of the .debug_line section in a raw
               format.

           "L"
           "=decodedline"
               Displays the interpreted contents of the .debug_line
               section.

           "m"
           "=macro"
               Displays the contents of the .debug_macro and/or
               .debug_macinfo sections.

           "o"
           "=loc"
               Displays the contents of the .debug_loc and/or
               .debug_loclists sections.

           "O"
           "=str-offsets"
               Displays the contents of the .debug_str_offsets section.

           "p"
           "=pubnames"
               Displays the contents of the .debug_pubnames and/or
               .debug_gnu_pubnames sections.

           "r"
           "=aranges"
               Displays the contents of the .debug_aranges section.

           "R"
           "=Ranges"
               Displays the contents of the .debug_ranges and/or
               .debug_rnglists sections.

           "s"
           "=str"
               Displays the contents of the .debug_str, .debug_line_str
               and/or .debug_str_offsets sections.

           "t"
           "=pubtype"
               Displays the contents of the .debug_pubtypes and/or
               .debug_gnu_pubtypes sections.

           "T"
           "=trace_aranges"
               Displays the contents of the .trace_aranges section.

           "u"
           "=trace_abbrev"
               Displays the contents of the .trace_abbrev section.

           "U"
           "=trace_info"
               Displays the contents of the .trace_info section.

           Note: displaying the contents of .debug_static_funcs,
           .debug_static_vars and debug_weaknames sections is not
           currently supported.

       --dwarf-depth=n
           Limit the dump of the ".debug_info" section to n children.
           This is only useful with --debug-dump=info.  The default is
           to print all DIEs; the special value 0 for n will also have
           this effect.

           With a non-zero value for n, DIEs at or deeper than n levels
           will not be printed.  The range for n is zero-based.

       --dwarf-start=n
           Print only DIEs beginning with the DIE numbered n.  This is
           only useful with --debug-dump=info.

           If specified, this option will suppress printing of any
           header information and all DIEs before the DIE numbered n.
           Only siblings and children of the specified DIE will be
           printed.

           This can be used in conjunction with --dwarf-depth.

       --dwarf-check
           Enable additional checks for consistency of Dwarf
           information.

       --ctf[=section]
           Display the contents of the specified CTF section.  CTF
           sections themselves contain many subsections, all of which
           are displayed in order.

           By default, display the name of the section named .ctf, which
           is the name emitted by ld.

       --ctf-parent=member
           If the CTF section contains ambiguously-defined types, it
           will consist of an archive of many CTF dictionaries, all
           inheriting from one dictionary containing unambiguous types.
           This member is by default named .ctf, like the section
           containing it, but it is possible to change this name using
           the "ctf_link_set_memb_name_changer" function at link time.
           When looking at CTF archives that have been created by a
           linker that uses the name changer to rename the parent
           archive member, --ctf-parent can be used to specify the name
           used for the parent.

       --sframe[=section]
           Display the contents of the specified SFrame section.

           By default, display the name of the section named .sframe,
           which is the name emitted by ld.

       -G
       --stabs
           Display the full contents of any sections requested.  Display
           the contents of the .stab and .stab.index and .stab.excl
           sections from an ELF file.  This is only useful on systems
           (such as Solaris 2.0) in which ".stab" debugging symbol-table
           entries are carried in an ELF section.  In most other file
           formats, debugging symbol-table entries are interleaved with
           linkage symbols, and are visible in the --syms output.

       --start-address=address
           Start displaying data at the specified address.  This affects
           the output of the -d, -r and -s options.

       --stop-address=address
           Stop displaying data at the specified address.  This affects
           the output of the -d, -r and -s options.

       -t
       --syms
           Print the symbol table entries of the file.  This is similar
           to the information provided by the nm program, although the
           display format is different.  The format of the output
           depends upon the format of the file being dumped, but there
           are two main types.  One looks like this:

                   [  4](sec  3)(fl 0x00)(ty   0)(scl   3) (nx 1) 0x00000000 .bss
                   [  6](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 fred

           where the number inside the square brackets is the number of
           the entry in the symbol table, the sec number is the section
           number, the fl value are the symbol's flag bits, the ty
           number is the symbol's type, the scl number is the symbol's
           storage class and the nx value is the number of auxiliary
           entries associated with the symbol.  The last two fields are
           the symbol's value and its name.

           The other common output format, usually seen with ELF based
           files, looks like this:

                   00000000 l    d  .bss   00000000 .bss
                   00000000 g       .text  00000000 fred

           Here the first number is the symbol's value (sometimes
           referred to as its address).  The next field is actually a
           set of characters and spaces indicating the flag bits that
           are set on the symbol.  These characters are described below.
           Next is the section with which the symbol is associated or
           *ABS* if the section is absolute (ie not connected with any
           section), or *UND* if the section is referenced in the file
           being dumped, but not defined there.

           After the section name comes another field, a number, which
           for common symbols is the alignment and for other symbol is
           the size.  Finally the symbol's name is displayed.

           The flag characters are divided into 7 groups as follows:

           "l"
           "g"
           "u"
           "!" The symbol is a local (l), global (g), unique global (u),
               neither global nor local (a space) or both global and
               local (!).  A symbol can be neither local or global for a
               variety of reasons, e.g., because it is used for
               debugging, but it is probably an indication of a bug if
               it is ever both local and global.  Unique global symbols
               are a GNU extension to the standard set of ELF symbol
               bindings.  For such a symbol the dynamic linker will make
               sure that in the entire process there is just one symbol
               with this name and type in use.

           "w" The symbol is weak (w) or strong (a space).

           "C" The symbol denotes a constructor (C) or an ordinary
               symbol (a space).

           "W" The symbol is a warning (W) or a normal symbol (a space).
               A warning symbol's name is a message to be displayed if
               the symbol following the warning symbol is ever
               referenced.

           "I"
           "i" The symbol is an indirect reference to another symbol
               (I), a function to be evaluated during reloc processing
               (i) or a normal symbol (a space).

           "d"
           "D" The symbol is a debugging symbol (d) or a dynamic symbol
               (D) or a normal symbol (a space).

           "F"
           "f"
           "O" The symbol is the name of a function (F) or a file (f) or
               an object (O) or just a normal symbol (a space).

       -T
       --dynamic-syms
           Print the dynamic symbol table entries of the file.  This is
           only meaningful for dynamic objects, such as certain types of
           shared libraries.  This is similar to the information
           provided by the nm program when given the -D (--dynamic)
           option.

           The output format is similar to that produced by the --syms
           option, except that an extra field is inserted before the
           symbol's name, giving the version information associated with
           the symbol.  If the version is the default version to be used
           when resolving unversioned references to the symbol then it's
           displayed as is, otherwise it's put into parentheses.

       --special-syms
           When displaying symbols include those which the target
           considers to be special in some way and which would not
           normally be of interest to the user.

       -U [d|i|l|e|x|h]
       --unicode=[default|invalid|locale|escape|hex|highlight]
           Controls the display of UTF-8 encoded multibyte characters in
           strings.  The default (--unicode=default) is to give them no
           special treatment.  The --unicode=locale option displays the
           sequence in the current locale, which may or may not support
           them.  The options --unicode=hex and --unicode=invalid
           display them as hex byte sequences enclosed by either angle
           brackets or curly braces.

           The --unicode=escape option displays them as escape sequences
           (\uxxxx) and the --unicode=highlight option displays them as
           escape sequences highlighted in red (if supported by the
           output device).  The colouring is intended to draw attention
           to the presence of unicode sequences where they might not be
           expected.

       -V
       --version
           Print the version number of objdump and exit.

       -x
       --all-headers
           Display all available header information, including the
           symbol table and relocation entries.  Using -x is equivalent
           to specifying all of -a -f -h -p -r -t.

       -w
       --wide
           Format some lines for output devices that have more than 80
           columns.  Also do not truncate symbol names when they are
           displayed.

       -z
       --disassemble-zeroes
           Normally the disassembly output will skip blocks of zeroes.
           This option directs the disassembler to disassemble those
           blocks, just like any other data.

       @file
           Read command-line options from file.  The options read are
           inserted in place of the original @file option.  If file does
           not exist, or cannot be read, then the option will be treated
           literally, and not removed.

           Options in file are separated by whitespace.  A whitespace
           character may be included in an option by surrounding the
           entire option in either single or double quotes.  Any
           character (including a backslash) may be included by
           prefixing the character to be included with a backslash.  The
           file may itself contain additional @file options; any such
           options will be processed recursively.

SEE ALSO         top
       nm(1), readelf(1), and the Info entries for binutils.

COPYRIGHT         top
       Copyright (c) 1991-2023 Free Software Foundation, Inc.

       Permission is granted to copy, distribute and/or modify this
       document under the terms of the GNU Free Documentation License,
       Version 1.3 or any later version published by the Free Software
       Foundation; with no Invariant Sections, with no Front-Cover
       Texts, and with no Back-Cover Texts.  A copy of the license is
       included in the section entitled "GNU Free Documentation
       License".

COLOPHON         top
       This page is part of the binutils (a collection of tools for
       working with executable binaries) project.  Information about the
       project can be found at ⟨http://www.gnu.org/software/binutils/⟩.
       If you have a bug report for this manual page, see
       ⟨http://sourceware.org/bugzilla/enter_bug.cgi?product=binutils⟩.
       This page was obtained from the tarball binutils-2.40.tar.gz
       fetched from ⟨https://ftp.gnu.org/gnu/binutils/⟩ on 2023-06-23.
       If you discover any rendering problems in this HTML version of
       the page, or you believe there is a better or more up-to-date
       source for the page, or you have corrections or improvements to
       the information in this COLOPHON (which is not part of the
       original manual page), send a mail to man-pages@man7.org

binutils-2.40.00               2023-06-23                     OBJDUMP(1)

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-02 23:11:04

rabin2

rabin2

rabin2

是什么：radare2的其中一个命令行工具

作用：查看二进制信息

文档

Rabin2 - The Official Radare2 Book

rabin2 - r2wiki

下载

radare2

Releases · radareorg/radare2

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 11:14:35

用法

rabin2用法

概述：

-I：binary info

rabin2 -I binaryFile

-i：imports

rabin2 -i binaryFile

-E：exports

rabin2 -E binaryFile

-l：linked libraries

rabin2 -l binaryFile

-z：strings (from data section)

rabin2 -z binaryFile

-s：symbols

rabin2 -s binaryFile

-S：sections

rabin2 -S binaryFile

-SS：segments

rabin2 -SS binaryFile

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 11:08:26

举例

rabin2用法举例

-I：binary info

➜  arm64-v8a rabin2 -I libtacker.so
arch     arm
baddr    0x0
binsz    848338
bintype  elf
bits     64
canary   true
class    ELF64
compiler Linker: LLD 14.0.1 clang version 14.0.0
crypto   false
endian   little
havecode true
laddr    0x0
lang     c
linenum  false
lsyms    false
machine  ARM aarch64
nx       true
os       android
pic      true
relocs   false
relro    full
rpath    NONE
sanitize false
static   false
stripped true
subsys   android
va       true

-i：imports

➜  arm64-v8a rabin2 -i libtacker.so
[Imports]
nth vaddr      bind   type lib name
―――――――――――――――――――――――――――――――――――
1   0x000c9240 GLOBAL FUNC     __cxa_finalize
2   0x000c9250 GLOBAL FUNC     __cxa_atexit
3   0x000c9260 GLOBAL FUNC     __android_log_print
4   0x000c9270 GLOBAL FUNC     __stack_chk_fail
5   0x000c9280 GLOBAL FUNC     memset
6   0x000c9290 GLOBAL FUNC     strncpy
7   0x000c92a0 GLOBAL FUNC     strncat
8   0x000c92b0 GLOBAL FUNC     pthread_self
9   0x000c92c0 GLOBAL FUNC     malloc
10  0x000c92d0 GLOBAL FUNC     free
11  0x000c92e0 GLOBAL FUNC     posix_memalign
12  ---------- GLOBAL OBJ      __sF
13  0x000c92f0 GLOBAL FUNC     vfprintf
14  0x000c9300 GLOBAL FUNC     fputc
15  0x000c9310 GLOBAL FUNC     vasprintf
16  0x000c9320 GLOBAL FUNC     android_set_abort_message
17  0x000c9330 GLOBAL FUNC     openlog
18  0x000c9340 GLOBAL FUNC     syslog
19  0x000c9350 GLOBAL FUNC     closelog
20  0x000c9360 GLOBAL FUNC     abort
21  0x000c9370 GLOBAL FUNC     strlen
22  0x000c9380 GLOBAL FUNC     realloc
23  0x000c9390 GLOBAL FUNC     memmove
24  0x000c93a0 GLOBAL FUNC     __memmove_chk
25  0x000c93b0 GLOBAL FUNC     __strlen_chk
26  0x000c93c0 GLOBAL FUNC     memchr
27  0x000c93d0 GLOBAL FUNC     __vsnprintf_chk
28  0x000c93e0 GLOBAL FUNC     memcpy
29  0x000c93f0 GLOBAL FUNC     pthread_mutex_lock
30  0x000c9400 GLOBAL FUNC     pthread_mutex_unlock
31  0x000c9410 GLOBAL FUNC     calloc
32  0x000c9420 GLOBAL FUNC     strcmp
33  0x000c9430 GLOBAL FUNC     pthread_getspecific
34  0x000c9440 GLOBAL FUNC     pthread_once
35  0x000c9450 GLOBAL FUNC     pthread_setspecific
36  0x000c9460 GLOBAL FUNC     pthread_key_delete
37  0x000c9470 GLOBAL FUNC     pthread_key_create
38  0x000c9480 GLOBAL FUNC     getauxval
39  0x000c9490 GLOBAL FUNC     __system_property_get
40  0x000c94a0 GLOBAL FUNC     strncmp
41  0x000c94b0 GLOBAL FUNC     fprintf
42  0x000c94c0 GLOBAL FUNC     fflush
43  0x000c94d0 GLOBAL FUNC     pthread_rwlock_wrlock
44  0x000c94e0 GLOBAL FUNC     pthread_rwlock_unlock
45  0x000c94f0 GLOBAL FUNC     dl_iterate_phdr
46  0x000c9500 GLOBAL FUNC     pthread_rwlock_rdlock
47  0x000c9510 GLOBAL FUNC     fwrite

-E：exports

➜  arm64-v8a rabin2 -E libtacker.so
[Exports]
nth paddr      vaddr      bind   type size  lib name                                demangled
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
48  0x00044ce8 0x00044ce8 GLOBAL FUNC 6608      .datadiv_decode16117807209816376729
49  0x00078a04 0x00078a04 GLOBAL FUNC 2696      .datadiv_decode9901940071257331957
50  0x000a8a58 0x000a8a58 GLOBAL FUNC 3892      .datadiv_decode14716202181486223822
...
70  0x0008e650 0x0008e650 GLOBAL FUNC 3772      .datadiv_decode13214095259256631718
71  0x000381fc 0x000381fc GLOBAL FUNC 3696      .datadiv_decode3631146530348700705
72  0x0006f220 0x0006f220 GLOBAL FUNC 3892      .datadiv_decode8050698040297613930
73  0x000a8884 0x000a8884 GLOBAL FUNC 4         .datadiv_decode11706101414295225912
74  0x000aa438 0x000aa438 GLOBAL FUNC 1436      JNI_OnLoad
75  0x00026d98 0x00026d98 GLOBAL FUNC 18656     .datadiv_decode12335027288954124723
76  0x00033a2c 0x00033a2c GLOBAL FUNC 11972     .datadiv_decode18261546535841772752
77  0x0003c8dc 0x0003c8dc GLOBAL FUNC 8072      .datadiv_decode5616837089396308971
...
115 0x0005c790 0x0005c790 GLOBAL FUNC 4         .datadiv_decode1552205700074701063
116 0x0005ed50 0x0005ed50 GLOBAL FUNC 6304      .datadiv_decode15147620753704794795
117 0x000a5e74 0x000a5e74 GLOBAL FUNC 4         .datadiv_decode5454406552017557296

-l：linked libraries

➜  arm64-v8a rabin2 -l libtacker.so
[Linked libraries]
liblog.so
libm.so
libdl.so
libc.so

4 libraries

-z：strings (from data section)

➜  arm64-v8a rabin2 -z libtacker.so
[Strings]
nth paddr      vaddr      len size section type    string
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――
0   0x0000c6f9 0x0000c6f9 26  27   .rodata ascii   covariant return thunk to
1   0x0000c719 0x0000c719 10  11   .rodata ascii   operator^=
2   0x0000c724 0x0000c724 10  11   .rodata ascii   operator<=
3   0x0000c72f 0x0000c72f 24  25   .rodata ascii   unknown pointer encoding
4   0x0000c748 0x0000c748 47  48   .rodata ascii   unsupported restore location for float register
5   0x0000c782 0x0000c782 9   10   .rodata ascii   decltype(
6   0x0000c78f 0x0000c78f 8   9    .rodata ascii   typeid (
7   0x0000c798 0x0000c798 5   6    .rodata ascii   {...}
8   0x0000c79e 0x0000c79e 11  12   .rodata ascii   operator>>=
9   0x0000c7aa 0x0000c7aa 11  12   .rodata ascii   operator<=>
10  0x0000c7b6 0x0000c7b6 4   5    .rodata ascii   long
11  0x0000c7bb 0x0000c7bb 8   9    .rodata ascii   char32_t
12  0x0000c7c4 0x0000c7c4 64  65   .rodata ascii   libunwind: malformed DW_CFA_register DWARF unwind, reg2 too big\n
13  0x0000c805 0x0000c805 68  69   .rodata ascii   libunwind: malformed DW_CFA_val_offset_sf DWARF unwind, reg too big\n
14  0x0000c84e 0x0000c84e 5   6    .rodata ascii   throw
15  0x0000c854 0x0000c854 7   8    .rodata ascii   wchar_t
16  0x0000c85c 0x0000c85c 7   8    .rodata ascii   'lambda
17  0x0000c864 0x0000c864 9   10   .rodata ascii   operator~
18  0x0000c86e 0x0000c86e 11  12   .rodata ascii   operator""
19  0x0000c87a 0x0000c87a 17  18   .rodata ascii   std::basic_string
20  0x0000c88c 0x0000c88c 14  15   .rodata ascii   decltype(auto)
21  0x0000c89b 0x0000c89b 32  33   .rodata ascii   Deleted virtual function called!
22  0x0000c8bc 0x0000c8bc 14  15   .rodata ascii   std::exception
23  0x0000c8cb 0x0000c8cb 40  41   .rodata ascii   terminating with %s exception of type %s
24  0x0000c8f4 0x0000c8f4 10  11   .rodata ascii   const_cast
25  0x0000c902 0x0000c902 17  18   .rodata ascii   unsigned __int128
26  0x0000c914 0x0000c914 15  16   .rodata ascii   operator delete
27  0x0000c924 0x0000c924 10  11   .rodata ascii   operator>=
28  0x0000c92f 0x0000c92f 13  14   .rodata ascii   unwind_phase2
29  0x0000c93d 0x0000c93d 26  27   .rodata ascii   unsupported arm64 register
30  0x0000c958 0x0000c958 62  63   .rodata ascii   libunwind: malformed DW_CFA_def_cfa DWARF unwind, reg too big\n
31  0x0000c997 0x0000c997 10  11   .rodata ascii   getSLEB128
32  0x0000c9a2 0x0000c9a2 16  17   .rodata ascii   getSavedRegister
33  0x0000c9bb 0x0000c9bb 18  19   .rodata ascii   typeinfo name for
34  0x0000c9ce 0x0000c9ce 12  13   .rodata ascii   operator new
35  0x0000c9db 0x0000c9db 5   6    .rodata ascii   ) ? (
36  0x0000c9e1 0x0000c9e1 12  13   .rodata ascii    [enable_if:
37  0x0000c9ee 0x0000c9ee 14  15   .rodata ascii   std::nullptr_t
38  0x0000c9fd 0x0000c9fd 11  12   .rodata ascii   objc_object
39  0x0000ca09 0x0000ca09 14  15   .rodata ascii   std::bad_alloc
40  0x0000ca18 0x0000ca18 15  16   .rodata ascii   std::bad_typeid
41  0x0000ca28 0x0000ca28 11  12   .rodata ascii   getEncodedP
42  0x0000ca3e 0x0000ca3e 13  14   .rodata ascii   typeinfo for
43  0x0000ca4c 0x0000ca4c 24  25   .rodata ascii   reference temporary for
44  0x0000ca65 0x0000ca65 13  14   .rodata ascii   unsigned char
45  0x0000ca75 0x0000ca75 10  11   .rodata ascii   operator&=
46  0x0000ca80 0x0000ca80 10  11   .rodata ascii   operator*=
47  0x0000ca8b 0x0000ca8b 70  71   .rodata ascii   std::basic_string<char, std::char_traits<char>, std::allocator<char> >
48  0x0000cad2 0x0000cad2 21  22   .rodata ascii   getSavedFloatRegister
49  0x0000caf6 0x0000caf6 17  18   .rodata ascii   operator delete[]
50  0x0000cb10 0x0000cb10 11  12   .rodata ascii   std::string
51  0x0000cb23 0x0000cb23 4   5    .rodata ascii   auto
52  0x0000cb2a 0x0000cb2a 14  15   .rodata ascii   unsigned short
53  0x0000cb39 0x0000cb39 5   6    .rodata ascii   false
54  0x0000cb3f 0x0000cb3f 4   5    .rodata ascii   %LaL
55  0x0000cb44 0x0000cb44 9   10   .rodata ascii   operator/
56  0x0000cb4e 0x0000cb4e 9   10   .rodata ascii   operator|
57  0x0000cb5c 0x0000cb5c 10  11   .rodata ascii   exynos9810
58  0x0000cb67 0x0000cb67 77  78   .rodata ascii   libunwind: malformed DW_CFA_val_offset DWARF unwind, reg (%lu) out of range\n\n
59  0x0000cbb9 0x0000cbb9 19  20   .rodata ascii   FDE has zero length
60  0x0000cbcd 0x0000cbcd 19  20   .rodata ascii   FDE is really a CIE
61  0x0000cbe5 0x0000cbe5 6   7    .rodata ascii   delete
62  0x0000cbec 0x0000cbec 9   10   .rodata ascii   operator&
63  0x0000cbf6 0x0000cbf6 9   10   .rodata ascii   operator%
64  0x0000cc00 0x0000cc00 10  11   .rodata ascii   operator>>
65  0x0000cc0b 0x0000cc0b 5   6    .rodata ascii   ) : (
66  0x0000cc11 0x0000cc11 5   6    .rodata ascii   [abi:
67  0x0000cc1b 0x0000cc1b 65  66   .rodata ascii   libunwind: malformed DW_CFA_same_value DWARF unwind, reg too big\n
68  0x0000cc5d 0x0000cc5d 47  48   .rodata ascii   DW_EH_PE_aligned pointer encoding not supported
69  0x0000cc8d 0x0000cc8d 28  29   .rodata ascii   truncated sleb128 expression
70  0x0000ccad 0x0000ccad 39  40   .rodata ascii   terminate_handler unexpectedly returned
71  0x0000ccd7 0x0000ccd7 11  12   .rodata ascii   signed char
72  0x0000cce6 0x0000cce6 10  11   .rodata ascii   sizeof...(
73  0x0000ccf1 0x0000ccf1 13  14   .rodata ascii   basic_ostream
74  0x0000ccff 0x0000ccff 12  13   .rodata ascii   std::ostream
75  0x0000cd0c 0x0000cd0c 13  14   .rodata ascii   std::iostream
76  0x0000cd1a 0x0000cd1a 9   10   .rodata ascii   long long
77  0x0000cd24 0x0000cd24 9   10   .rodata ascii   noexcept(
78  0x0000cd2e 0x0000cd2e 41  42   .rodata ascii   unsupported restore location for register
79  0x0000cd6a 0x0000cd6a 14  15   .rodata ascii   operator new[]
80  0x0000cd79 0x0000cd79 9   10   .rodata ascii   operator!
81  0x0000cd83 0x0000cd83 49  50   .rodata ascii   std::basic_ostream<char, std::char_traits<char> >
82  0x0000cdb5 0x0000cdb5 10  11   .rodata ascii   __float128
83  0x0000cdc0 0x0000cdc0 8   9    .rodata ascii   char16_t
84  0x0000cdc9 0x0000cdc9 98  99   .rodata ascii   during phase1 personality function said it would stop here, but now in phase2 it did not stop here
85  0x0000ce2c 0x0000ce2c 83  84   .rodata ascii   libunwind: malformed DW_CFA_GNU_negative_offset_extended DWARF unwind, reg too big\n
86  0x0000ce96 0x0000ce96 9   10   .rodata ascii   typename
87  0x0000cea4 0x0000cea4 10  11   .rodata ascii   operator()
88  0x0000ceaf 0x0000ceaf 9   10   .rodata ascii   operator>
89  0x0000ceb9 0x0000ceb9 10  11   .rodata ascii   operator[]
90  0x0000cec4 0x0000cec4 10  11   .rodata ascii   operator->
91  0x0000cecf 0x0000cecf 13  14   .rodata ascii   unsigned long
92  0x0000cee1 0x0000cee1 13  14   .rodata ascii   std::bad_cast
93  0x0000ceef 0x0000ceef 11  12   .rodata ascii   setRegister
94  0x0000cefb 0x0000cefb 70  71   .rodata ascii   libunwind: malformed DW_CFA_offset_extended DWARF unwind, reg too big\n
95  0x0000cf45 0x0000cf45 11  12   .rodata ascii   > typename
96  0x0000cf51 0x0000cf51 21  22   .rodata ascii   (anonymous namespace)
97  0x0000cf67 0x0000cf67 10  11   .rodata ascii   operator==
98  0x0000cf72 0x0000cf72 8   9    .rodata ascii    complex
99  0x0000cf7b 0x0000cf7b 25  26   .rodata ascii   CIE version is not 1 or 3
100 0x0000cf9d 0x0000cf9d 11  12   .rodata ascii   vtable for
101 0x0000cfa9 0x0000cfa9 8   9    .rodata ascii   VTT for
102 0x0000cfb2 0x0000cfb2 9   10   .rodata ascii   alignof (
103 0x0000cfbe 0x0000cfbe 10  11   .rodata ascii   noexcept (
104 0x0000cfc9 0x0000cfc9 4   5    .rodata ascii   char
105 0x0000cfd0 0x0000cfd0 9   10   .rodata ascii   operator<
106 0x0000cfda 0x0000cfda 11  12   .rodata ascii   operator->*
107 0x0000cfe6 0x0000cfe6 12  13   .rodata ascii   unsigned int
108 0x0000cff3 0x0000cff3 47  48   .rodata ascii   DW_EH_PE_funcrel pointer encoding not supported
109 0x0000d023 0x0000d023 45  46   .rodata ascii   libunwind: Unsupported .eh_frame_hdr version\n
110 0x0000d055 0x0000d055 9   10   .rodata ascii   libc++abi
111 0x0000d05f 0x0000d05f 12  13   .rodata ascii   dynamic_cast
112 0x0000d074 0x0000d074 5   6    .rodata ascii   short
113 0x0000d07a 0x0000d07a 5   6    .rodata ascii    ...
114 0x0000d080 0x0000d080 6   7    .rodata ascii   string
115 0x0000d087 0x0000d087 7   8    .rodata ascii   ostream
116 0x0000d08f 0x0000d08f 11  12   .rodata ascii   long double
117 0x0000d0a2 0x0000d0a2 10  11   .rodata ascii   unexpected
118 0x0000d0ad 0x0000d0ad 19  20   .rodata ascii   guard variable for
119 0x0000d0c4 0x0000d0c4 4   5    .rodata ascii   true
120 0x0000d0c9 0x0000d0c9 9   10   .rodata ascii   operator?
121 0x0000d0d3 0x0000d0d3 20  21   .rodata ascii   bad_array_new_length
122 0x0000d0e8 0x0000d0e8 19  20   .rodata ascii   libunwind: %s - %s\n
123 0x0000d103 0x0000d103 17  18   .rodata ascii   virtual thunk to
124 0x0000d123 0x0000d123 9   10   .rodata ascii   operator*
125 0x0000d12d 0x0000d12d 10  11   .rodata ascii   operator||
126 0x0000d138 0x0000d138 7   8    .rodata ascii   istream
127 0x0000d144 0x0000d144 7   8    .rodata ascii   char8_t
128 0x0000d14c 0x0000d14c 30  31   .rodata ascii   DW_OP_deref_size with bad size
129 0x0000d16b 0x0000d16b 40  41   .rodata ascii   Unknown DWARF encoding for search table.
130 0x0000d19c 0x0000d19c 40  41   .rodata ascii   unexpected_handler unexpectedly returned
131 0x0000d1c5 0x0000d1c5 24  25   .rodata ascii   construction vtable for
132 0x0000d1e3 0x0000d1e3 8   9    .rodata ascii   __int128
133 0x0000d1ec 0x0000d1ec 9   10   .rodata ascii   template<
134 0x0000d1f6 0x0000d1f6 10  11   .rodata ascii   operator<<
135 0x0000d201 0x0000d201 9   10   .rodata ascii   operator+
136 0x0000d20b 0x0000d20b 10  11   .rodata ascii   operator+=
137 0x0000d216 0x0000d216 10  11   .rodata ascii   operator++
138 0x0000d221 0x0000d221 14  15   .rodata ascii   string literal
139 0x0000d230 0x0000d230 18  19   .rodata ascii   unsigned long long
140 0x0000d243 0x0000d243 10  11   .rodata ascii    imaginary
141 0x0000d24e 0x0000d24e 65  66   .rodata ascii   libunwind: malformed DW_CFA_expression DWARF unwind, reg too big\n
142 0x0000d2a6 0x0000d2a6 9   10   .rodata ascii   operator=
143 0x0000d2b0 0x0000d2b0 10  11   .rodata ascii   operator/=
144 0x0000d2bb 0x0000d2bb 4   5    .rodata ascii   bool
145 0x0000d2c0 0x0000d2c0 18  19   .rodata ascii   evaluateExpression
146 0x0000d2de 0x0000d2de 9   10   .rodata ascii   operator^
147 0x0000d2e8 0x0000d2e8 9   10   .rodata ascii    restrict
148 0x0000d2f2 0x0000d2f2 9   10   .rodata ascii   decimal64
149 0x0000d2fc 0x0000d2fc 64  65   .rodata ascii   libunwind: malformed DW_CFA_undefined DWARF unwind, reg too big\n
150 0x0000d34c 0x0000d34c 44  45   .rodata ascii   terminating with %s exception of type %s: %s
151 0x0000d379 0x0000d379 21  22   .rodata ascii   non-virtual thunk to
152 0x0000d396 0x0000d396 49  50   .rodata ascii   std::basic_istream<char, std::char_traits<char> >
153 0x0000d3c8 0x0000d3c8 8   9    .rodata ascii   iostream
154 0x0000d3d1 0x0000d3d1 13  14   .rodata ascii   pixel vector[
155 0x0000d3df 0x0000d3df 5   6    .rodata ascii   union
156 0x0000d3e5 0x0000d3e5 29  30   .rodata ascii   _Unwind_Resume() can't return
157 0x0000d403 0x0000d403 63  64   .rodata ascii   libunwind: malformed DW_CFA_register DWARF unwind, reg too big\n
158 0x0000d446 0x0000d446 4   5    .rodata ascii   yptn
159 0x0000d44b 0x0000d44b 10  11   .rodata ascii   operator%=
160 0x0000d456 0x0000d456 6   7    .rodata ascii    const
161 0x0000d45d 0x0000d45d 27  28   .rodata ascii   DW_OP_fbreg not implemented
162 0x0000d481 0x0000d481 37  38   .rodata ascii   terminating with %s foreign exception
163 0x0000d4a7 0x0000d4a7 8   9    .rodata ascii   uncaught
164 0x0000d4b3 0x0000d4b3 10  11   .rodata ascii   operator--
165 0x0000d4be 0x0000d4be 10  11   .rodata ascii   operator|=
166 0x0000d4c9 0x0000d4c9 50  51   .rodata ascii   std::basic_iostream<char, std::char_traits<char> >
167 0x0000d4fc 0x0000d4fc 14  15   .rodata ascii   _Unwind_Resume
168 0x0000d50b 0x0000d50b 65  66   .rodata ascii   libunwind: malformed DW_CFA_def_cfa_sf DWARF unwind, reg too big\n
169 0x0000d55d 0x0000d55d 15  16   .rodata ascii   'block-literal'
170 0x0000d56d 0x0000d56d 9   10   .rodata ascii   operator-
171 0x0000d577 0x0000d577 13  14   .rodata ascii   basic_istream
172 0x0000d585 0x0000d585 12  13   .rodata ascii   std::istream
173 0x0000d592 0x0000d592 6   7    .rodata ascii   double
174 0x0000d59c 0x0000d59c 33  34   .rodata ascii   invocation function for block in
175 0x0000d5be 0x0000d5be 11  12   .rodata ascii   static_cast
176 0x0000d5ca 0x0000d5ca 11  12   .rodata ascii   sizeof... (
177 0x0000d5dc 0x0000d5dc 10  11   .rodata ascii   operator-=
178 0x0000d5e7 0x0000d5e7 73  74   .rodata ascii   libunwind: malformed DW_CFA_offset_extended_sf DWARF unwind, reg too big\n
179 0x0000d631 0x0000d631 10  11   .rodata ascii   getULEB128
180 0x0000d63c 0x0000d63c 28  29   .rodata ascii   malformed uleb128 expression
181 0x0000d659 0x0000d659 28  29   .rodata ascii   DWARF opcode not implemented
182 0x0000d683 0x0000d683 7   8    .rodata ascii   nullptr
183 0x0000d68b 0x0000d68b 11  12   .rodata ascii   operator<<=
184 0x0000d697 0x0000d697 11  12   .rodata ascii   ::operator
185 0x0000d6a3 0x0000d6a3 4   5    .rodata ascii   enum
186 0x0000d6a8 0x0000d6a8 69  70   .rodata ascii   libunwind: malformed DW_CFA_val_expression DWARF unwind, reg too big\n
187 0x0000d6fb 0x0000d6fb 11  12   .rodata ascii   terminating
188 0x0000d70b 0x0000d70b 16  17   .rodata ascii   reinterpret_cast
189 0x0000d721 0x0000d721 47  48   .rodata ascii   DW_EH_PE_textrel pointer encoding not supported
190 0x0000d751 0x0000d751 28  29   .rodata ascii   truncated uleb128 expression
191 0x0000d773 0x0000d773 9   10   .rodata ascii   operator
192 0x0000d77d 0x0000d77d 6   7    .rodata ascii   throw
193 0x0000d784 0x0000d784 12  13   .rodata ascii   basic_string
194 0x0000d791 0x0000d791 4   5    .rodata ascii   void
195 0x0000d796 0x0000d796 5   6    .rodata ascii   float
196 0x0000d79c 0x0000d79c 10  11   .rodata ascii   decimal128
197 0x0000d7a7 0x0000d7a7 7   8    .rodata ascii   ro.arch
198 0x0000d7af 0x0000d7af 71  72   .rodata ascii   libunwind: malformed DW_CFA_restore_extended DWARF unwind, reg too big\n
199 0x0000d7f7 0x0000d7f7 17  18   .rodata ascii   getTableEntrySize
200 0x0000d81f 0x0000d81f 10  11   .rodata ascii   operator&&
201 0x0000d82a 0x0000d82a 9   10   .rodata ascii   decimal32
202 0x0000d834 0x0000d834 18  19   .rodata ascii   CIE ID is not zero
203 0x0000d84f 0x0000d84f 33  34   .rodata ascii   thread-local wrapper routine for
204 0x0000d871 0x0000d871 40  41   .rodata ascii   thread-local initialization routine for
205 0x0000d89a 0x0000d89a 8   9    .rodata ascii   sizeof (
206 0x0000d8a3 0x0000d8a3 10  11   .rodata ascii   operator!=
207 0x0000d8ae 0x0000d8ae 9   10   .rodata ascii   __uuidof(
208 0x0000d8b8 0x0000d8b8 14  15   .rodata ascii   std::allocator
209 0x0000d8c7 0x0000d8c7 9   10   .rodata ascii   allocator
210 0x0000d8d1 0x0000d8d1 6   7    .rodata ascii   struct
211 0x0000d8d8 0x0000d8d8 71  72   .rodata ascii   libunwind: malformed DW_CFA_def_cfa_register DWARF unwind, reg too big\n
212 0x0000d920 0x0000d920 52  53   .rodata ascii   Can't binary search on variable length encoded data.
213 0x0000d95d 0x0000d95d 49  50   .rodata ascii   terminate_handler unexpectedly threw an exception
214 0x0000d992 0x0000d992 9   10   .rodata ascii   operator,
215 0x0000d99c 0x0000d99c 9   10   .rodata ascii   decimal16
216 0x0000d9a6 0x0000d9a6 8   9    .rodata ascii   noexcept
217 0x0000d9af 0x0000d9af 11  12   .rodata ascii   getRegister
218 0x0000d9bb 0x0000d9bb 51  52   .rodata ascii   DW_EH_PE_datarel is invalid with a datarelBase of 0
219 0x0000d9f9 0x0000d9f9 16  17   .rodata ascii   unknown register
220 0x0000da0c 0x0000da0c 14  15   .rodata ascii   basic_iostream
221 0x0000da1b 0x0000da1b 5   6    .rodata ascii   std::
222 0x0000da21 0x0000da21 9   10   .rodata ascii    volatile
223 0x0000da2b 0x0000da2b 6   7    .rodata ascii   throw(
224 0x0000da32 0x0000da32 29  30   .rodata ascii   Pure virtual function called!
225 0x0000da50 0x0000da50 18  19   .rodata ascii   std::bad_exception
226 0x0000da63 0x0000da63 27  28   .rodata ascii   DW_OP_piece not implemented
227 0x0000df91 0x0000df91 5   6    .rodata ascii   \t\t\t\t\t
228 0x0000df97 0x0000df97 25  26   .rodata ascii   \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
229 0x0000dfb1 0x0000dfb1 5   6    .rodata ascii   \t\t\t\t\t
230 0x0000dfc2 0x0000dfc2 4   5    .rodata ascii   Ocv}
231 0x0000e135 0x0000e135 14  15   .rodata ascii   \t7\t\t\t\t\t\t\t\t\t\t\t\t
232 0x0000e150 0x0000e150 32  65   .rodata utf16le PPPPPPPPPPPPPPPPPPPPPPPPPPPP~PP\
233 0x0000e194 0x0000e194 17  35   .rodata utf16le ddddddddddddddddd
234 0x0000e1c0 0x0000e1c0 9   19   .rodata utf16le ddddddddd
235 0x0000e27a 0x0000e27a 49  50   .rodata ascii    (N12_GLOBAL__N_116itanium_demangle11SpecialNameE
236 0x0000e2ac 0x0000e2ac 39  40   .rodata ascii   N12_GLOBAL__N_116itanium_demangle4NodeE
237 0x0000e2d4 0x0000e2d4 57  58   .rodata ascii   N12_GLOBAL__N_116itanium_demangle21CtorVtableSpecialNameE
238 0x0000e30e 0x0000e30e 43  44   .rodata ascii   N12_GLOBAL__N_116itanium_demangle8NameTypeE
239 0x0000e33a 0x0000e33a 46  47   .rodata ascii   N12_GLOBAL__N_116itanium_demangle10NestedNameE
240 0x0000e369 0x0000e369 60  61   .rodata ascii   N12_GLOBAL__N_116itanium_demangle24ForwardTemplateReferenceE
241 0x0000e3a6 0x0000e3a6 50  51   .rodata ascii   N12_GLOBAL__N_116itanium_demangle14IntegerLiteralE
242 0x0000e3d9 0x0000e3d9 43  44   .rodata ascii   N12_GLOBAL__N_116itanium_demangle8BoolExprE
243 0x0000e405 0x0000e405 55  56   .rodata ascii   N12_GLOBAL__N_116itanium_demangle16FloatLiteralImplIfEE
244 0x0000e43d 0x0000e43d 55  56   .rodata ascii   N12_GLOBAL__N_116itanium_demangle16FloatLiteralImplIdEE
245 0x0000e475 0x0000e475 55  56   .rodata ascii   N12_GLOBAL__N_116itanium_demangle16FloatLiteralImplIeEE
246 0x0000e4ad 0x0000e4ad 49  50   .rodata ascii   N12_GLOBAL__N_116itanium_demangle13StringLiteralE
247 0x0000e4df 0x0000e4df 51  52   .rodata ascii   N12_GLOBAL__N_116itanium_demangle15UnnamedTypeNameE
248 0x0000e513 0x0000e513 62  63   .rodata ascii   N12_GLOBAL__N_116itanium_demangle26SyntheticTemplateParamNameE
249 0x0000e552 0x0000e552 57  58   .rodata ascii   N12_GLOBAL__N_116itanium_demangle21TypeTemplateParamDeclE
250 0x0000e58c 0x0000e58c 60  61   .rodata ascii   N12_GLOBAL__N_116itanium_demangle24NonTypeTemplateParamDeclE
251 0x0000e5c9 0x0000e5c9 61  62   .rodata ascii   N12_GLOBAL__N_116itanium_demangle25TemplateTemplateParamDeclE
252 0x0000e607 0x0000e607 57  58   .rodata ascii   N12_GLOBAL__N_116itanium_demangle21TemplateParamPackDeclE
253 0x0000e641 0x0000e641 51  52   .rodata ascii   N12_GLOBAL__N_116itanium_demangle15ClosureTypeNameE
254 0x0000e675 0x0000e675 46  47   .rodata ascii   N12_GLOBAL__N_116itanium_demangle10LambdaExprE
255 0x0000e6a4 0x0000e6a4 51  52   .rodata ascii   N12_GLOBAL__N_116itanium_demangle15IntegerCastExprE
256 0x0000e6d8 0x0000e6d8 49  50   .rodata ascii   N12_GLOBAL__N_116itanium_demangle13FunctionParamE
257 0x0000e70a 0x0000e70a 43  44   .rodata ascii   N12_GLOBAL__N_116itanium_demangle8FoldExprE
258 0x0000e736 0x0000e736 58  59   .rodata ascii   N12_GLOBAL__N_116itanium_demangle22ParameterPackExpansionE
259 0x0000e771 0x0000e771 46  47   .rodata ascii   N12_GLOBAL__N_116itanium_demangle10BinaryExprE
260 0x0000e7a0 0x0000e7a0 46  47   .rodata ascii   N12_GLOBAL__N_116itanium_demangle10PrefixExprE
261 0x0000e7cf 0x0000e7cf 43  44   .rodata ascii   N12_GLOBAL__N_116itanium_demangle8CastExprE
262 0x0000e7fb 0x0000e7fb 43  44   .rodata ascii   N12_GLOBAL__N_116itanium_demangle8CallExprE
263 0x0000e827 0x0000e827 50  51   .rodata ascii   N12_GLOBAL__N_116itanium_demangle14ConversionExprE
264 0x0000e85a 0x0000e85a 46  47   .rodata ascii   N12_GLOBAL__N_116itanium_demangle10DeleteExprE
265 0x0000e889 0x0000e889 49  50   .rodata ascii   N12_GLOBAL__N_116itanium_demangle13QualifiedNameE
266 0x0000e8bb 0x0000e8bb 43  44   .rodata ascii   N12_GLOBAL__N_116itanium_demangle8DtorNameE
267 0x0000e8e7 0x0000e8e7 58  59   .rodata ascii   N12_GLOBAL__N_116itanium_demangle22ConversionOperatorTypeE
268 0x0000e922 0x0000e922 51  52   .rodata ascii   N12_GLOBAL__N_116itanium_demangle15LiteralOperatorE
269 0x0000e956 0x0000e956 55  56   .rodata ascii   N12_GLOBAL__N_116itanium_demangle19GlobalQualifiedNameE
270 0x0000e98e 0x0000e98e 46  47   .rodata ascii   N12_GLOBAL__N_116itanium_demangle10MemberExprE
271 0x0000e9bd 0x0000e9bd 54  55   .rodata ascii   N12_GLOBAL__N_116itanium_demangle18ArraySubscriptExprE
272 0x0000e9f4 0x0000e9f4 46  47   .rodata ascii   N12_GLOBAL__N_116itanium_demangle10BracedExprE
273 0x0000ea23 0x0000ea23 51  52   .rodata ascii   N12_GLOBAL__N_116itanium_demangle15BracedRangeExprE
274 0x0000ea57 0x0000ea57 48  49   .rodata ascii   N12_GLOBAL__N_116itanium_demangle12InitListExprE
275 0x0000ea88 0x0000ea88 47  48   .rodata ascii   N12_GLOBAL__N_116itanium_demangle11PostfixExprE
276 0x0000eab8 0x0000eab8 42  43   .rodata ascii   N12_GLOBAL__N_116itanium_demangle7NewExprE
277 0x0000eae3 0x0000eae3 49  50   .rodata ascii   N12_GLOBAL__N_116itanium_demangle13EnclosingExprE
278 0x0000eb15 0x0000eb15 51  52   .rodata ascii   N12_GLOBAL__N_116itanium_demangle15ConditionalExprE
279 0x0000eb49 0x0000eb49 55  56   .rodata ascii   N12_GLOBAL__N_116itanium_demangle19SizeofParamPackExprE
280 0x0000eb81 0x0000eb81 49  50   .rodata ascii   N12_GLOBAL__N_116itanium_demangle13NodeArrayNodeE
281 0x0000ebb3 0x0000ebb3 44  45   .rodata ascii   N12_GLOBAL__N_116itanium_demangle9ThrowExprE
282 0x0000ebe0 0x0000ebe0 46  47   .rodata ascii   N12_GLOBAL__N_116itanium_demangle10UUIDOfExprE
283 0x0000ec0f 0x0000ec0f 63  64   .rodata ascii   N12_GLOBAL__N_116itanium_demangle27ExpandedSpecialSubstitutionE
284 0x0000ec4f 0x0000ec4f 48  49   .rodata ascii   N12_GLOBAL__N_116itanium_demangle12CtorDtorNameE
285 0x0000ec80 0x0000ec80 46  47   .rodata ascii   N12_GLOBAL__N_116itanium_demangle10AbiTagAttrE
286 0x0000ecaf 0x0000ecaf 57  58   .rodata ascii   N12_GLOBAL__N_116itanium_demangle21StructuredBindingNameE
287 0x0000ece9 0x0000ece9 44  45   .rodata ascii   N12_GLOBAL__N_116itanium_demangle9LocalNameE
288 0x0000ed16 0x0000ed16 55  56   .rodata ascii   N12_GLOBAL__N_116itanium_demangle19SpecialSubstitutionE
289 0x0000ed4e 0x0000ed4e 49  50   .rodata ascii   N12_GLOBAL__N_116itanium_demangle13ParameterPackE
290 0x0000ed80 0x0000ed80 48  49   .rodata ascii   N12_GLOBAL__N_116itanium_demangle12TemplateArgsE
291 0x0000edb1 0x0000edb1 56  57   .rodata ascii   N12_GLOBAL__N_116itanium_demangle20NameWithTemplateArgsE
292 0x0000edea 0x0000edea 52  53   .rodata ascii   N12_GLOBAL__N_116itanium_demangle16StdQualifiedNameE
293 0x0000ee1f 0x0000ee1f 56  57   .rodata ascii   N12_GLOBAL__N_116itanium_demangle20TemplateArgumentPackE
294 0x0000ee58 0x0000ee58 48  49   .rodata ascii   N12_GLOBAL__N_116itanium_demangle12EnableIfAttrE
295 0x0000ee89 0x0000ee89 52  53   .rodata ascii   N12_GLOBAL__N_116itanium_demangle16FunctionEncodingE
296 0x0000eebe 0x0000eebe 44  45   .rodata ascii   N12_GLOBAL__N_116itanium_demangle9DotSuffixE
297 0x0000eeeb 0x0000eeeb 48  49   .rodata ascii   N12_GLOBAL__N_116itanium_demangle12NoexceptSpecE
298 0x0000ef1c 0x0000ef1c 56  57   .rodata ascii   N12_GLOBAL__N_116itanium_demangle20DynamicExceptionSpecE
299 0x0000ef55 0x0000ef55 48  49   .rodata ascii   N12_GLOBAL__N_116itanium_demangle12FunctionTypeE
300 0x0000ef86 0x0000ef86 49  50   .rodata ascii   N12_GLOBAL__N_116itanium_demangle13ObjCProtoNameE
301 0x0000efb8 0x0000efb8 53  54   .rodata ascii   N12_GLOBAL__N_116itanium_demangle17VendorExtQualTypeE
302 0x0000efee 0x0000efee 43  44   .rodata ascii   N12_GLOBAL__N_116itanium_demangle8QualTypeE
303 0x0000f01a 0x0000f01a 51  52   .rodata ascii   N12_GLOBAL__N_116itanium_demangle15PixelVectorTypeE
304 0x0000f04e 0x0000f04e 46  47   .rodata ascii   N12_GLOBAL__N_116itanium_demangle10VectorTypeE
305 0x0000f07d 0x0000f07d 44  45   .rodata ascii   N12_GLOBAL__N_116itanium_demangle9ArrayTypeE
306 0x0000f0aa 0x0000f0aa 55  56   .rodata ascii   N12_GLOBAL__N_116itanium_demangle19PointerToMemberTypeE
307 0x0000f0e2 0x0000f0e2 58  59   .rodata ascii   N12_GLOBAL__N_116itanium_demangle22ElaboratedTypeSpefTypeE
308 0x0000f11d 0x0000f11d 47  48   .rodata ascii   N12_GLOBAL__N_116itanium_demangle11PointerTypeE
309 0x0000f14d 0x0000f14d 49  50   .rodata ascii   N12_GLOBAL__N_116itanium_demangle13ReferenceTypeE
310 0x0000f17f 0x0000f17f 56  57   .rodata ascii   N12_GLOBAL__N_116itanium_demangle20PostfixQualifiedTypeE
311 0x0000f21d 0x0000f21d 5   6    .rodata ascii   KKKK6
312 0x0000f290 0x0000f290 32  33   .rodata ascii   N10__cxxabiv116__shim_type_infoE
313 0x0000f2b1 0x0000f2b1 33  34   .rodata ascii   N10__cxxabiv117__class_type_infoE
314 0x0000f2d3 0x0000f2d3 33  34   .rodata ascii   N10__cxxabiv117__pbase_type_infoE
315 0x0000f2f5 0x0000f2f5 35  36   .rodata ascii   N10__cxxabiv119__pointer_type_infoE
316 0x0000f319 0x0000f319 36  37   .rodata ascii   N10__cxxabiv120__function_type_infoE
317 0x0000f33e 0x0000f33e 45  46   .rodata ascii   N10__cxxabiv129__pointer_to_member_type_infoE
318 0x0000f388 0x0000f388 39  40   .rodata ascii   N10__cxxabiv123__fundamental_type_infoE
319 0x0000f3c0 0x0000f3c0 4   5    .rodata ascii   PKDn
320 0x0000f453 0x0000f453 4   5    .rodata ascii   PKDh
321 0x0000f483 0x0000f483 4   5    .rodata ascii   PKDu
322 0x0000f48f 0x0000f48f 4   5    .rodata ascii   PKDs
323 0x0000f49b 0x0000f49b 4   5    .rodata ascii   PKDi
324 0x0000f4a0 0x0000f4a0 33  34   .rodata ascii   N10__cxxabiv117__array_type_infoE
325 0x0000f4c2 0x0000f4c2 32  33   .rodata ascii   N10__cxxabiv116__enum_type_infoE
326 0x0000f4e3 0x0000f4e3 36  37   .rodata ascii   N10__cxxabiv120__si_class_type_infoE
327 0x0000f508 0x0000f508 37  38   .rodata ascii   N10__cxxabiv121__vmi_class_type_infoE
328 0x0000f52e 0x0000f52e 12  13   .rodata ascii   St9exception
329 0x0000f53b 0x0000f53b 17  18   .rodata ascii   St13bad_exception
330 0x0000f54d 0x0000f54d 12  13   .rodata ascii   St9bad_alloc
331 0x0000f55a 0x0000f55a 24  25   .rodata ascii   St20bad_array_new_length
332 0x0000f573 0x0000f573 12  13   .rodata ascii   St9type_info
333 0x0000f580 0x0000f580 11  12   .rodata ascii   St8bad_cast
334 0x0000f58c 0x0000f58c 14  15   .rodata ascii   St10bad_typeid
335 0x0000f610 0x0000f610 30  124  .rodata utf32le DPpppppppppppppppppppppppppppp
336 0x0000f6a4 0x0000f6a4 4   20   .rodata utf32le P|`l
337 0x0000f6da 0x0000f6da 6   14   .rodata utf16le \e,7L`|
338 0x0000f76a 0x0000f76a 5   6    .rodata ascii   +\n:IE
339 0x0000f808 0x0000f808 32  66   .rodata utf16le &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
0   0x000cca31 0x000cea31 4   5    .data   ascii   STSN
1   0x000cca40 0x000cea40 17  18   .data   ascii   G1ARyk_p}ooUroh}r
...
70  0x000cd304 0x000cf304 4   5    .data   ascii   hi\t@
71  0x000cd30e 0x000cf30e 14  16   .data   utf8    ǡ#Gaj}j$gjel$X blocks=Latin Extended-B,Basic Latin
72  0x000cd31e 0x000cf31e 20  21   .data   ascii   ybel0B"Gaj}j$gjel$Be
73  0x000cd333 0x000cf333 6   7    .data   ascii   nlny0\v
74  0x000cd340 0x000cf340 10  11   .data   ascii   ?=,\b9;39?=
75  0x000cd34b 0x000cf34b 4   5    .data   ascii   6>7X
...
195 0x000ce8b0 0x000d08b0 11  12   .data   ascii   2V{t~hus~5t
196 0x000ce8bc 0x000d08bc 97  98   .data   ascii   n5Ohs!AVp{l{5v{t}5Inhst}!Vp{l{5v{t}5Inhst}!AVp{l{5v{t}5Inhst}!Vp{l{5v{t}5Inhst}!3V{t~hus~5~{n{x{i
197 0x000ce91e 0x000d091e 8   9    .data   ascii   5Yohiuh!
...
225 0x000cef2e 0x000d0f2e 31  32   .data   ascii   P-]ahl~h-nlaa-dcdy%$-bc-`ldc-ye
226 0x000cef4e 0x000d0f4e 5   6    .data   ascii   hli#\r
227 0x000cef58 0x000d0f58 19  20   .data   ascii   ALVUID\%l|mzzq@lwjk
228 0x000cef74 0x000d0f74 5   6    .data   ascii   _VKZ\
229 0x000cef82 0x000d0f82 13  14   .data   ascii   wXMPO\q\UI\K9

-s：symbols

➜  arm64-v8a rabin2 -s libtacker.so
[Symbols]
nth paddr      vaddr      bind   type size  lib name                                demangled
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
48  0x00044ce8 0x00044ce8 GLOBAL FUNC 6608      .datadiv_decode16117807209816376729
49  0x00078a04 0x00078a04 GLOBAL FUNC 2696      .datadiv_decode9901940071257331957
...
73  0x000a8884 0x000a8884 GLOBAL FUNC 4         .datadiv_decode11706101414295225912
74  0x000aa438 0x000aa438 GLOBAL FUNC 1436      JNI_OnLoad
75  0x00026d98 0x00026d98 GLOBAL FUNC 18656     .datadiv_decode12335027288954124723
...
117 0x000a5e74 0x000a5e74 GLOBAL FUNC 4         .datadiv_decode5454406552017557296
1   0x000c9240 0x000c9240 GLOBAL FUNC 16        imp.__cxa_finalize
2   0x000c9250 0x000c9250 GLOBAL FUNC 16        imp.__cxa_atexit
3   0x000c9260 0x000c9260 GLOBAL FUNC 16        imp.__android_log_print
4   0x000c9270 0x000c9270 GLOBAL FUNC 16        imp.__stack_chk_fail
5   0x000c9280 0x000c9280 GLOBAL FUNC 16        imp.memset
6   0x000c9290 0x000c9290 GLOBAL FUNC 16        imp.strncpy
7   0x000c92a0 0x000c92a0 GLOBAL FUNC 16        imp.strncat
8   0x000c92b0 0x000c92b0 GLOBAL FUNC 16        imp.pthread_self
9   0x000c92c0 0x000c92c0 GLOBAL FUNC 16        imp.malloc
10  0x000c92d0 0x000c92d0 GLOBAL FUNC 16        imp.free
11  0x000c92e0 0x000c92e0 GLOBAL FUNC 16        imp.posix_memalign
12  ---------- ---------- GLOBAL OBJ  16        imp.__sF
13  0x000c92f0 0x000c92f0 GLOBAL FUNC 16        imp.vfprintf
14  0x000c9300 0x000c9300 GLOBAL FUNC 16        imp.fputc
15  0x000c9310 0x000c9310 GLOBAL FUNC 16        imp.vasprintf
16  0x000c9320 0x000c9320 GLOBAL FUNC 16        imp.android_set_abort_message
17  0x000c9330 0x000c9330 GLOBAL FUNC 16        imp.openlog
18  0x000c9340 0x000c9340 GLOBAL FUNC 16        imp.syslog
19  0x000c9350 0x000c9350 GLOBAL FUNC 16        imp.closelog
20  0x000c9360 0x000c9360 GLOBAL FUNC 16        imp.abort
21  0x000c9370 0x000c9370 GLOBAL FUNC 16        imp.strlen
22  0x000c9380 0x000c9380 GLOBAL FUNC 16        imp.realloc
23  0x000c9390 0x000c9390 GLOBAL FUNC 16        imp.memmove
24  0x000c93a0 0x000c93a0 GLOBAL FUNC 16        imp.__memmove_chk
25  0x000c93b0 0x000c93b0 GLOBAL FUNC 16        imp.__strlen_chk
26  0x000c93c0 0x000c93c0 GLOBAL FUNC 16        imp.memchr
27  0x000c93d0 0x000c93d0 GLOBAL FUNC 16        imp.__vsnprintf_chk
28  0x000c93e0 0x000c93e0 GLOBAL FUNC 16        imp.memcpy
29  0x000c93f0 0x000c93f0 GLOBAL FUNC 16        imp.pthread_mutex_lock
30  0x000c9400 0x000c9400 GLOBAL FUNC 16        imp.pthread_mutex_unlock
31  0x000c9410 0x000c9410 GLOBAL FUNC 16        imp.calloc
32  0x000c9420 0x000c9420 GLOBAL FUNC 16        imp.strcmp
33  0x000c9430 0x000c9430 GLOBAL FUNC 16        imp.pthread_getspecific
34  0x000c9440 0x000c9440 GLOBAL FUNC 16        imp.pthread_once
35  0x000c9450 0x000c9450 GLOBAL FUNC 16        imp.pthread_setspecific
36  0x000c9460 0x000c9460 GLOBAL FUNC 16        imp.pthread_key_delete
37  0x000c9470 0x000c9470 GLOBAL FUNC 16        imp.pthread_key_create
38  0x000c9480 0x000c9480 GLOBAL FUNC 16        imp.getauxval
39  0x000c9490 0x000c9490 GLOBAL FUNC 16        imp.__system_property_get
40  0x000c94a0 0x000c94a0 GLOBAL FUNC 16        imp.strncmp
41  0x000c94b0 0x000c94b0 GLOBAL FUNC 16        imp.fprintf
42  0x000c94c0 0x000c94c0 GLOBAL FUNC 16        imp.fflush
43  0x000c94d0 0x000c94d0 GLOBAL FUNC 16        imp.pthread_rwlock_wrlock
44  0x000c94e0 0x000c94e0 GLOBAL FUNC 16        imp.pthread_rwlock_unlock
45  0x000c94f0 0x000c94f0 GLOBAL FUNC 16        imp.dl_iterate_phdr
46  0x000c9500 0x000c9500 GLOBAL FUNC 16        imp.pthread_rwlock_rdlock
47  0x000c9510 0x000c9510 GLOBAL FUNC 16        imp.fwrite

-S：sections

➜  arm64-v8a rabin2 -S libtacker.so
[Sections]

nth paddr          size vaddr         vsize perm type        name
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
0   0x00000000      0x0 0x00000000      0x0 ---- NULL
1   0x00000238     0x98 0x00000238     0x98 -r-- NOTE        .note.android.ident
2   0x000002d0     0x24 0x000002d0     0x24 -r-- NOTE        .note.gnu.build-id
3   0x000002f8    0xb10 0x000002f8    0xb10 -r-- DYNSYM      .dynsym
4   0x00000e08     0xec 0x00000e08     0xec -r-- GNU_VERSYM  .gnu.version
5   0x00000ef4     0x40 0x00000ef4     0x40 -r-- GNU_VERNEED .gnu.version_r
6   0x00000f38    0x1ec 0x00000f38    0x1ec -r-- GNU_HASH    .gnu.hash
7   0x00001124    0x3b8 0x00001124    0x3b8 -r-- HASH        .hash
8   0x000014dc    0xc19 0x000014dc    0xc19 -r-- STRTAB      .dynstr
9   0x000020f8   0x8850 0x000020f8   0x8850 -r-- RELA        .rela.dyn
10  0x0000a948    0x450 0x0000a948    0x450 -r-- RELA        .rela.plt
11  0x0000ad98   0x1960 0x0000ad98   0x1960 -r-- PROGBITS    .gcc_except_table
12  0x0000c6f8   0x3434 0x0000c6f8   0x3434 -r-- PROGBITS    .rodata
13  0x0000fb2c   0x1dbc 0x0000fb2c   0x1dbc -r-- PROGBITS    .eh_frame_hdr
14  0x000118e8   0x8cd4 0x000118e8   0x8cd4 -r-- PROGBITS    .eh_frame
15  0x0001a5c0  0xaec60 0x0001a5c0  0xaec60 -r-x PROGBITS    .text
16  0x000c9220    0x300 0x000c9220    0x300 -r-x PROGBITS    .plt
17  0x000c9520   0x2eb8 0x000ca520   0x2eb8 -rw- PROGBITS    .data.rel.ro
18  0x000cc3d8     0x10 0x000cd3d8     0x10 -rw- FINI_ARRAY  .fini_array
19  0x000cc3e8    0x230 0x000cd3e8    0x230 -rw- INIT_ARRAY  .init_array
20  0x000cc618    0x1d0 0x000cd618    0x1d0 -rw- DYNAMIC     .dynamic
21  0x000cc7e8     0xc0 0x000cd7e8     0xc0 -rw- PROGBITS    .got
22  0x000cc8a8    0x188 0x000cd8a8    0x188 -rw- PROGBITS    .got.plt
23  0x000cca30   0x25d8 0x000cea30   0x25d8 -rw- PROGBITS    .data
24  0x000cf008      0x0 0x000d1010    0xad0 -rw- NOBITS      .bss
25  0x000cf008     0xc6 0x00000000     0xc6 ---- PROGBITS    .comment
26  0x000cf0ce    0x104 0x00000000    0x104 ---- STRTAB      .shstrtab

-SS：segments

➜  arm64-v8a rabin2 -SS libtacker.so
[Segments]

nth paddr          size vaddr         vsize perm type name
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
0   0x00000040    0x1f8 0x00000040    0x1f8 -r-- MAP  PHDR
1   0x00000000  0xc9520 0x00000000  0xc9520 -r-x MAP  LOAD0
2   0x000c9520   0x3510 0x000ca520   0x3510 -rw- MAP  LOAD1
3   0x000cca30   0x25d8 0x000cea30   0x30b0 -rw- MAP  LOAD2
4   0x000cc618    0x1d0 0x000cd618    0x1d0 -rw- MAP  DYNAMIC
5   0x000c9520   0x3510 0x000ca520   0x3ae0 -r-- MAP  GNU_RELRO
6   0x0000fb2c   0x1dbc 0x0000fb2c   0x1dbc -r-- MAP  GNU_EH_FRAME
7   0x00000000      0x0 0x00000000      0x0 -rw- MAP  GNU_STACK
8   0x00000238     0xbc 0x00000238     0xbc -r-- MAP  NOTE
9   0x00000000     0x40 0x00000000     0x40 -rw- MAP  ehdr

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 11:08:57

help

rabin2的help语法

➜  ~ rabin2 -h
Usage: rabin2 [-AcdeEghHiIjlLMqrRsSUvVxzZ] [-@ at] [-a arch] [-b bits] [-B addr]
              [-C F:C:D] [-f str] [-m addr] [-n str] [-N m:M] [-P[-P] pdb]
              [-o str] [-O str] [-k query] [-D lang mangledsymbol] file
 -@ [addr]       show section, symbol or import at addr
 -A              list sub-binaries and their arch-bits pairs
 -a [arch]       set arch (x86, arm, .. or <arch>_<bits>)
 -b [bits]       set bits (32, 64 ...)
 -B [addr]       override base address (pie bins)
 -c              list classes
 -cc             list classes in header format
 -C [fmt:C:D]    create [elf,mach0,pe] with Code and Data hexpairs (see -a)
 -d              show debug/dwarf information
 -D lang name    demangle symbol name (-D all for bin.demangle=true)
 -e              program entrypoint
 -ee             constructor/destructor entrypoints
 -E              globally exportable symbols
 -f [str]        select sub-bin named str
 -F [binfmt]     force to use that bin plugin (ignore header check)
 -g              same as -SMZIHVResizcld -SS -SSS -ee (show all info)
 -G [addr]       load address . offset to header
 -h              this help message
 -H              header fields
 -i              imports (symbols imported from libraries)
 -I              binary info
 -j              output in json
 -k [sdb-query]  run sdb query. for example: '*'
 -K [algo]       calculate checksums (md5, sha1, ..)
 -l              linked libraries
 -L [plugin]     list supported bin plugins or plugin details
 -m [addr]       show source line at addr
 -M              main (show address of main symbol)
 -n [str]        show section, symbol or import named str
 -N [min:max]    force min:max number of chars per string (see -z and -zz)
 -o [str]        output file/folder for write operations (out by default)
 -O [str]        write/extract operations (-O help)
 -p              show always physical addresses
 -P              show debug/pdb information
 -PP             download pdb file for binary
 -q              be quiet, just show fewer data
 -qq             show less info (no offset/size for -z for ex.)
 -Q              show load address used by dlopen (non-aslr libs)
 -r              radare output
 -R              relocations
 -s              symbols
 -S              sections
 -SS             segments
 -SSS            sections mapping to segments
 -t              display file hashes
 -T              display file signature
 -u              unfiltered (no rename duplicated symbols/sections)
 -U              resoUrces
 -v              display version and quit
 -V              show binary version information
 -w              display try/catch blocks
 -x              extract bins contained in file
 -X [fmt] [f] .. package in fat or zip the given files and bins contained in file
 -z              strings (from data section)
 -zz             strings (from raw bins [e bin.str.raw=1])
 -zzz            dump raw strings to stdout (for huge files)
 -Z              guess size of binary program
Environment:
 R2_NOPLUGINS:     1|0|               # do not load shared plugins (speedup loading)
 RABIN2_CHARSET:   e cfg.charset      # set default value charset for -z strings
 RABIN2_DEBASE64:  e bin.str.debase64 # try to debase64 all strings
 RABIN2_DEMANGLE=0:e bin.demangle     # do not demangle symbols
 RABIN2_DMNGLRCMD: e bin.demanglercmd # try to purge false positives
 RABIN2_LANG:      e bin.lang         # assume lang for demangling
 RABIN2_MAXSTRBUF: e bin.str.maxbuf   # specify maximum buffer size
 RABIN2_PDBSERVER: e pdb.server       # use alternative PDB server
 RABIN2_PREFIX:    e bin.prefix       # prefix symbols/sections/relocs with a specific string
 RABIN2_STRFILTER: e bin.str.filter   # r2 -qc 'e bin.str.filter=??' -
 RABIN2_STRPURGE:  e bin.str.purge    # try to purge false positives
 RABIN2_SYMSTORE:  e pdb.symstore     # path to downstream symbol store
 RABIN2_SWIFTLIB:  1|0|               # load Swift libsto demangle (default: true)
 RABIN2_VERBOSE:   e bin.verbose      # show debugging messages from the parser

注：rabin2 --help只能查看到精简的参数，没有参数含义介绍

➜  ~ rabin2 --help
Usage: rabin2 [-AcdeEghHiIjlLMqrRsSUvVxzZ] [-@ at] [-a arch] [-b bits] [-B addr]
              [-C F:C:D] [-f str] [-m addr] [-n str] [-N m:M] [-P[-P] pdb]
              [-o str] [-O str] [-k query] [-D lang mangledsymbol] file

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 15:47:27

man

rabin2的man手册

RABIN2(1)                                    BSD General Commands Manual                                    RABIN2(1)

NAME
     RABIN2 — Binary program info extractor

SYNOPSIS
     rabin2 [-AceghHiIsSMzlpRrLxvhqQV] [-a arch] [-b bits] [-B addr] [-C fmt:C:[D]] [-D lang sym|-] [-f subbin]
            [-k query] [-K algo] [-O binop] [-o str] [-m addr] [-@ addr] [-n str] [-X fmt file ...] file

DESCRIPTION
     This program allows you to get information about ELF/PE/MZ and CLASS files in a simple way.

     All those commandline flags are also available under the i command in radare2. Type i? for help.

     -@ addr     Show information (symbol, section, import) of the given address

     -A          List sub-binaries and their associated arch-bits pairs

     -a arch     Set arch (x86, arm, .. accepts underscore for bits x86_32)

     -b bits     Set bits (32, 64, ...)

     -B addr     Override baddr

     -c          List classes

     -cc         List classes in header format

     -C [fmt:C[:D]]
                 Create [elf,mach0,pe] for arm and x86-32/64 tiny binaries where 'C' is an hexpair list of the code
                 bytes and ':D' is an optional concatenation to describe the bytes for the data section.

     -d          Show debug/dwarf information

     -D lang symbolname|-
                 Demangle symbol name (or - to read from stdin) for lang (cxx, swift, java, cxx, ..)

     -e          Show entrypoints for disk and on-memory

     -ee         Show constructor/destructors (extended entrypoints)

     -f subbin   Select sub-binary architecture. Useful for fat-mach0 binaries

     -F binfmt   Force to use that bin plugin (ignore header check)

     -g          Show all possible information

     -G addr     Load address . offset to header

     -h          Show usage help message.

     -H          Show header fields (see ih command in r2)

     -I          Show binary info (iI in r2)

     -i          Show imports (symbols imported from libraries) (ii)

     -j          Output in json

     -k query    Perform SDB query on loaded file

     -K algo     Select a rahash2 checksum algorithm to be performed on sections listing (and maybe others in the
                 future) i.e 'rabin2 -K md5 -S /bin/ls'

     -l          List linked libraries to the binary

     -L          List supported bin plugins

     -M          Show address of 'main' symbol

     -m addr     Show source line reference from a given address

     -N minlen:maxlen
                 Force minimum and maximum number of chars per string (see -z and -zz). if (strlen>minlen && (!maxlen
                 || strlen<=maxlen))

     -n str      Show information (symbol, section, import) at string offset

     -o str      Output file/folder for write operations (out by default)

     -O binop    Perform binary operation on target binary (dump, resize, change sections, ...) see '-O help' for
                 more information

     -p          Disable VA. Show physical addresses

     -P          Show debug/pdb information

     -PP         Download pdb file for binary

     -q          Be quiet, just show fewer data

     -qq         Show less info (no offset/size for -z for ex.)

     -Q          Show load address used by dlopen (non-aslr libs)

     -r          Show output in radare format

     -R          Show realocations

     -s          Show exported symbols

     -S          Show sections

     -u          Unfiltered (no rename duplicated symbols/sections)

     -v          Show version information

     -V          Show binary version information

     -x          Extract all sub binaries from a fat binary (f.ex: fatmach0)

     -X format file ...
                 Package a fat or zip containing all the files passed (fat, zip)

     -z          Show strings inside .data section (like gnu strings does)

     -Z          Guess size of binary program

     -zz         Shows strings from raw bins

     -zzz        Dump raw strings to stdout (for huge files)

ENVIRONMENT
     RABIN2_LANG same as r2 -e bin.lang for rabin2

     RABIN2_DEMANGLE demangle symbols

     RABIN2_MAXSTRBUF same as r2 -e bin.maxstrbuf for rabin2

     RABIN2_DEBASE64 try to decode all strings as base64 if possible

     RABIN2_STRFILTER same as r2 -e bin.strfilter for rabin2

     RABIN2_STRPURGE same as r2 -e bin.strpurge for rabin2

EXAMPLES
     List symbols of a program

       $ rabin2 -s a.out

     Get offset of symbol

       $ rabin2 -n _main a.out

     Get entrypoint

       $ rabin2 -e a.out

     Load symbols and imports from radare2

       $ r2 -n /bin/ls
       [0x00000000]> .!rabin2 -prsi $FILE

SEE ALSO
     rahash2(1), rafind2(1), radare2(1), radiff2(1), rasm2(1), rax2(1), rsc2(1), ragg2(1), rarun2(1),

AUTHORS
     Written by pancake <pancake@nopcode.org>.

                                                     Sep 29, 2016

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 15:47:39

Android专用

Android专用

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-20 22:24:10

JEB

JEB

JEB是个安卓逆向的利器。

JEB中也集成了，用于解析ELF格式的so库文件的功能。

此处列出，JEB解析ELF格式的so库文件的相关内容：

ELF的so库文件

Overview

Description

ELF Program Table (raw)

Segements

Sections

Symbols

更多细节详见：解析so库文件 · 安卓逆向利器：JEB

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 11:29:08

解析修改

解析修改

用于解析和修改ELF格式的工具有：

LIEF

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 15:49:11

LIEF

LIEF

LIEF

概述：用于查看解析和编辑修改（ELF/PE/MachO/Android等）各种通用的可执行文件格式的库

详解

LIEF · 可执行文件格式

LIEF用法举例 · 可执行文件格式

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 15:36:33

Android中的ELF

Android中的ELF

Android中的ELF格式

Android在通用的Linux中的ELF的基础上，进一步扩展

.dex/.oat: ELF + 扩展的section

.dex被转换成.odex

odex是外部是ELF头，内部包裹了个OAT格式

解析Android的ELF格式

详见

Android · 可执行文件格式

dex格式

dex文件就是ELF格式的：

$ file snet.dex
snet.dex: ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, stripped

注意

不可轻信后缀

.dex可能是DEX或OAT

.odex是OAT

.oat是OAT

OAT格式

把java转成OAT的过程

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 22:00:45

附录

附录

下面列出相关参考资料。

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-09-20 22:21:28

参考资料

参考资料

【整理】ELF文件格式

【整理】ELF相关：.bss节

【已解决】Mac M2 Max中安装readelf

【记录】Mac中用readelf查看ELF的so库二进制文件信息

【记录】Mac中用objdump查看ELF的so库二进制文件信息

【记录】用rabin2查看ELF的so库文件信息

【未解决】安卓逆向：查看ELF的so库二进制信息的工具

【未解决】Mac中是否有readelf的GUI图形界面版本

【已解决】给已有libtacker.so去改动信息

【已解决】用LIEF去修改ELF的so中的部分信息

查看信息和导出字符串 · iOS逆向开发：静态分析 (crifan.org)

解析so库文件 · 安卓逆向利器：JEB

2007.14266.pdf (zzm7000.github.io)

Executable and Linkable Format - Wikipedia

elf(5) — Linux manual pages (courier-mta.org)

ELF Header (sco.com)

Special Sections (oracle.com)

Executable and Linkable Format (ELF) (netmeister.org)

s.eresi-project.org/inc/articles/elf-rtld.txt

[原创]Android so(ELF)文件解析-Android安全-看雪-安全社区|安全招聘|kanxue.com

使用readelf和objdump解析目标文件 - 江召伟 - 博客园 (cnblogs.com)

13. readelf elf文件格式分析 — Linux Tools Quick Tutorial (linuxtools-rst.readthedocs.io)

ELF文件 及 nm & readelf & objdump 使用与对比 - 简书 (jianshu.com)

ELF文件分析之0 － 简介和分析工具 | Simple (cedar-renjun.github.io)

linux下强大的ELF文件分析工具 -- readelfelf解析工具悟OO道的博客-CSDN博客

二进制分析工具 - 阿宅の小窝 (zaxtyson.cn)

objdump(1) - Linux manual page (man7.org)

readelf 和 objdump 例子详解及区别 （ELF文件说明）_objdump readelf_Hani_97的博客-CSDN博客

Linux中objdump的使用 | Ivanzz (ivanzz1001.github.io)

常用的分析ELF文件的命令（readelf、objdump及od） - 王瓦斯的春天 - 博客园 (cnblogs.com)

14. objdump 二进制文件分析 — Linux Tools Quick Tutorial (linuxtools-rst.readthedocs.io)

ELF文件 及 nm & readelf & objdump 使用与对比 - 简书 (jianshu.com)

ELF for the ARM Architecture

DWARF Debugging Information Format

Hardened/GNU stack quickstart - Gentoo Wiki

Dynamic Linking

Program Header

ELF Header

RolandMcGrath/BuildID - Fedora Project Wiki

Releases/FeatureBuildId - Fedora Project Wiki

Airs – Ian Lance Taylor » Executable stack

rabin2 - r2wiki

Rabin2 - The Official Radare2 Book

Linux 修改 ELF 解决 glibc 兼容性问题 (qq.com)

ELF中可以被修改又不影响执行的区域-腾讯云开发者社区-腾讯云 (tencent.com)

crifan.org，使用署名4.0国际(CC BY 4.0)协议发布 all right reserved，powered by Gitbook最后更新： 2023-10-04 11:49:19