Skip to content

Instantly share code, notes, and snippets.

@dutc
Last active February 21, 2023 12:46
Show Gist options
  • Save dutc/07ed7a1e7461f25e85c8 to your computer and use it in GitHub Desktop.
Save dutc/07ed7a1e7461f25e85c8 to your computer and use it in GitHub Desktop.

Linux可執行文件ㄉ內容分析工具

NOTE: This is a working copy. This tutorial is unfinished and may contain inaccuracies.

I've written the title of this tutorial in Chinese, as I suspect that its contents may, at first glance, appear similarly incomprehensible to the audience.

However, just as I can sketch for you the following...

可執行文件 = (可 = can) + (執行 = execute) + (文件 = file) = executable (file)

內容 = contents
分析 = analysis
工具 = tools

Linux可執行文件的內容分析工具 = Linux Tools for Analysing the Contents of Executables
                           (more specifically, of course, ELF object files)

... so can we break down the majority of the complexity behind:

  • the ELF (executable and linkable format),
  • object files,
  • how executables are executed,
  • how C programmes work,
  • how the C standard library works,
  • and what these three tools are used for.

In the end, it comes down to reading source code and understanding the protocols and mechanisms that have evolved around programme execution.

The purpose of this tutorial isn't to teach you everything about these tools or about executable formats. It is to demystify aspects of programme execution on Linux and demonstrate how accessible this knowledge is.

The word ELF in this tutorial refers to a specific format and protocol for executable files. There is no equivalent protocol in Python, because Python is an interpreted language. An interpreter sits between the Python programme you want to execute and the operating system on which the programme is executed. That interpreter may itself be written in an interpreted language, but, inevitably, some piece of code must interact directly with the operating system, and this code will need to be structured in a fashion that the OS can understand. ELF is one such format, and there are many others. You can even write your binary format!

Here's a simple introductory document on:

ELF How-To: http://cs.mipt.ru/docs/comp/eng/os/linux/howto/howto_english/elf/elf-howto.html

Wikipedia also has a decent overview: http://en.wikipedia.org/wiki/Executable_and_Linkable_Format

As you can see from these documents, ELF is really just a file format that is interpreted by some code in the kernel. If you're curious, take a look at fs/exec.c:do_execve_common which is called when we execute a programme:

https://github.com/torvalds/linux/blob/96c57ade7e9ba2d1deba635a5989cc111f185dca/fs/exec.c#L1428

For ELF binaries, take a look at fs/binfmt_elf.c:load_elf_binary:

https://github.com/torvalds/linux/blob/master/fs/binfmt_elf.c#L571

In the end, this comes down to just formats and code to process files in those formats.

As a side note, if you use apt, you can retrieve the code for any programme installed on your computer using apt-get source. For the tools discussed here, do:

$ apt-get source binutils

The three tools discussed here are packaged as binutils and distributed by GNU/FSF.

Here's the homepage for these tools with descriptions of what they each do:

https://www.gnu.org/software/binutils/

  • nm - Lists symbols from object files.
  • objdump - Displays information from object files.
  • readelf - Displays information from any ELF format object file.

These tools are just programmes written in C that read in files written in the ELF [format] and spits out interesting information about them.

If you're curious how these tools work, just read the source!

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=tree

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=tree;f=binutils;h=e9260b41f3cae51d1a8c542a8e8328d3f39c7c18;hb=HEAD

But before you read the source, read the manpages to get an overview of what these tools do:

man readelf

http://linuxcommand.org/man_pages/readelf1.html

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=binutils/readelf.c;h=9cafd7c4fe01212babfd65b806a53d892552f497;hb=HEAD

man objdump

http://linuxcommand.org/man_pages/objdump1.html

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=binutils/objdump.c;h=14f412214c96f7d849d70ae3ba17e283966abc51;hb=HEAD

man nm

http://linuxcommand.org/man_pages/nm1.html

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=binutils/nm.c;h=2a44a846004885f06f288af6c38fa42eddf5a7f2;hb=HEAD

$ nm -l python3.4
00000000004259c9 T PyRun_SimpleString	/tmp/Python-3.4.0rc1/Python/pythonrun.c:2969
0000000000421d36 T PyRun_SimpleStringFlags	/tmp/Python-3.4.0rc1/Python/pythonrun.c:1629
0000000000425993 T PyRun_String	/tmp/Python-3.4.0rc1/Python/pythonrun.c:2962
0000000000423afc T PyRun_StringFlags	/tmp/Python-3.4.0rc1/Python/pythonrun.c:2091
0000000000496b94 T PySeqIter_New	/tmp/Python-3.4.0rc1/Objects/iterobject.c:12
000000000091a6e0 D PySeqIter_Type	/tmp/Python-3.4.0rc1/Objects/iterobject.c:131
0000000000463e13 T _PySequence_BytesToCharpArray	/tmp/Python-3.4.0rc1/Objects/abstract.c:2698
000000000045fe72 T PySequence_Check	/tmp/Python-3.4.0rc1/Objects/abstract.c:1358
000000000045ff5f T PySequence_Concat	/tmp/Python-3.4.0rc1/Objects/abstract.c:1393
000000000046146f T PySequence_Contains	/tmp/Python-3.4.0rc1/Objects/abstract.c:1875
0000000000461445 T PySequence_Count	/tmp/Python-3.4.0rc1/Objects/abstract.c:1866
0000000000460823 T PySequence_DelItem	/tmp/Python-3.4.0rc1/Objects/abstract.c:1571

$ objdump -d python3.4
python3.4:     file format elf64-x86-64


Disassembly of section .init:

0000000000419558 <_init>:
  419558:	48 83 ec 08          	sub    $0x8,%rsp
  41955c:	e8 9b 14 00 00       	callq  41a9fc <call_gmon_start>
  419561:	48 83 c4 08          	add    $0x8,%rsp
  419565:	c3                   	retq   

Disassembly of section .plt:

0000000000419570 <wcscat@plt-0x10>:
  419570:	ff 35 92 0a 4e 00    	pushq  0x4e0a92(%rip)        # 8fa008 <_GLOBAL_OFFSET_TABLE_+0x8>
  419576:	ff 25 94 0a 4e 00    	jmpq   *0x4e0a94(%rip)        # 8fa010 <_GLOBAL_OFFSET_TABLE_+0x10>
  41957c:	0f 1f 40 00          	nopl   0x0(%rax)

0000000000419580 <wcscat@plt>:
  419580:	ff 25 92 0a 4e 00    	jmpq   *0x4e0a92(%rip)        # 8fa018 <_GLOBAL_OFFSET_TABLE_+0x18>
  419586:	68 00 00 00 00       	pushq  $0x0
  41958b:	e9 e0 ff ff ff       	jmpq   419570 <_init+0x18>

000000000045e9fb <PyNumber_Multiply>:
  45e9fb:	55                   	push   %rbp
  45e9fc:	48 89 e5             	mov    %rsp,%rbp
  45e9ff:	48 83 ec 30          	sub    $0x30,%rsp
  45ea03:	48 89 7d d8          	mov    %rdi,-0x28(%rbp)
  45ea07:	48 89 75 d0          	mov    %rsi,-0x30(%rbp)
  45ea0b:	48 8b 4d d0          	mov    -0x30(%rbp),%rcx
  45ea0f:	48 8b 45 d8          	mov    -0x28(%rbp),%rax
  45ea13:	ba 10 00 00 00       	mov    $0x10,%edx
  45ea18:	48 89 ce             	mov    %rcx,%rsi
  45ea1b:	48 89 c7             	mov    %rax,%rdi
  45ea1e:	e8 c6 f4 ff ff       	callq  45dee9 <binary_op1>
  45ea23:	48 89 45 e0          	mov    %rax,-0x20(%rbp)
  45ea27:	48 81 7d e0 e0 01 92 	cmpq   $0x9201e0,-0x20(%rbp)
  45ea2e:	00 
  45ea2f:	0f 85 0a 01 00 00    	jne    45eb3f <PyNumber_Multiply+0x144>
  45ea35:	48 8b 45 d8          	mov    -0x28(%rbp),%rax
  45ea39:	48 8b 40 18          	mov    0x18(%rax),%rax
  45ea3d:	48 8b 40 78          	mov    0x78(%rax),%rax
  45ea41:	48 89 45 e8          	mov    %rax,-0x18(%rbp)
  45ea45:	48 8b 45 d0          	mov    -0x30(%rbp),%rax
  45ea49:	48 8b 40 18          	mov    0x18(%rax),%rax
  45ea4d:	48 8b 40 78          	mov    0x78(%rax),%rax
  45ea51:	48 89 45 f0          	mov    %rax,-0x10(%rbp)
  45ea55:	48 8b 45 e0          	mov    -0x20(%rbp),%rax
  45ea59:	48 89 45 f8          	mov    %rax,-0x8(%rbp)
  45ea5d:	48 8b 05 54 15 52 00 	mov    0x521554(%rip),%rax        # 97ffb8 <_Py_RefTotal>
  45ea64:	48 83 e8 01          	sub    $0x1,%rax
  45ea68:	48 89 05 49 15 52 00 	mov    %rax,0x521549(%rip)        # 97ffb8 <_Py_RefTotal>
  45ea6f:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
  45ea73:	48 8b 40 10          	mov    0x10(%rax),%rax
  45ea77:	48 8d 50 ff          	lea    -0x1(%rax),%rdx
  45ea7b:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
  45ea7f:	48 89 50 10          	mov    %rdx,0x10(%rax)
  45ea83:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
  45ea87:	48 8b 40 10          	mov    0x10(%rax),%rax
  45ea8b:	48 85 c0             	test   %rax,%rax
  45ea8e:	74 25                	je     45eab5 <PyNumber_Multiply+0xba>
  45ea90:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
  45ea94:	48 8b 40 10          	mov    0x10(%rax),%rax
  45ea98:	48 85 c0             	test   %rax,%rax
  45ea9b:	79 24                	jns    45eac1 <PyNumber_Multiply+0xc6>
  45ea9d:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
  45eaa1:	48 89 c2             	mov    %rax,%rdx
  45eaa4:	be 9a 03 00 00       	mov    $0x39a,%esi
  45eaa9:	bf f2 2f 67 00       	mov    $0x672ff2,%edi
  45eaae:	e8 08 67 06 00       	callq  4c51bb <_Py_NegativeRefcount>
  45eab3:	eb 0c                	jmp    45eac1 <PyNumber_Multiply+0xc6>
  45eab5:	48 8b 45 f8          	mov    -0x8(%rbp),%rax
  45eab9:	48 89 c7             	mov    %rax,%rdi
  45eabc:	e8 33 a2 06 00       	callq  4c8cf4 <_Py_Dealloc>
  45eac1:	48 83 7d e8 00       	cmpq   $0x0,-0x18(%rbp)
  45eac6:	74 2a                	je     45eaf2 <PyNumber_Multiply+0xf7>
  45eac8:	48 8b 45 e8          	mov    -0x18(%rbp),%rax
  45eacc:	48 8b 40 10          	mov    0x10(%rax),%rax
  45ead0:	48 85 c0             	test   %rax,%rax
  45ead3:	74 1d                	je     45eaf2 <PyNumber_Multiply+0xf7>
  45ead5:	48 8b 45 e8          	mov    -0x18(%rbp),%rax
  45ead9:	48 8b 40 10          	mov    0x10(%rax),%rax
  45eadd:	48 8b 55 d0          	mov    -0x30(%rbp),%rdx
  45eae1:	48 8b 4d d8          	mov    -0x28(%rbp),%rcx
  45eae5:	48 89 ce             	mov    %rcx,%rsi
  45eae8:	48 89 c7             	mov    %rax,%rdi
  45eaeb:	e8 72 fe ff ff       	callq  45e962 <sequence_repeat>
  45eaf0:	eb 51                	jmp    45eb43 <PyNumber_Multiply+0x148>
  45eaf2:	48 83 7d f0 00       	cmpq   $0x0,-0x10(%rbp)
  45eaf7:	74 2a                	je     45eb23 <PyNumber_Multiply+0x128>
  45eaf9:	48 8b 45 f0          	mov    -0x10(%rbp),%rax
  45eafd:	48 8b 40 10          	mov    0x10(%rax),%rax
  45eb01:	48 85 c0             	test   %rax,%rax
  45eb04:	74 1d                	je     45eb23 <PyNumber_Multiply+0x128>
  45eb06:	48 8b 45 f0          	mov    -0x10(%rbp),%rax
  45eb0a:	48 8b 40 10          	mov    0x10(%rax),%rax
  45eb0e:	48 8b 55 d8          	mov    -0x28(%rbp),%rdx
  45eb12:	48 8b 4d d0          	mov    -0x30(%rbp),%rcx
  45eb16:	48 89 ce             	mov    %rcx,%rsi
  45eb19:	48 89 c7             	mov    %rax,%rdi
  45eb1c:	e8 41 fe ff ff       	callq  45e962 <sequence_repeat>
  45eb21:	eb 20                	jmp    45eb43 <PyNumber_Multiply+0x148>
  45eb23:	48 8b 4d d0          	mov    -0x30(%rbp),%rcx
  45eb27:	48 8b 45 d8          	mov    -0x28(%rbp),%rax
  45eb2b:	ba ec 33 67 00       	mov    $0x6733ec,%edx
  45eb30:	48 89 ce             	mov    %rcx,%rsi
  45eb33:	48 89 c7             	mov    %rax,%rdi
  45eb36:	e8 8c f6 ff ff       	callq  45e1c7 <binop_type_error>
  45eb3b:	48 89 45 e0          	mov    %rax,-0x20(%rbp)
  45eb3f:	48 8b 45 e0          	mov    -0x20(%rbp),%rax
  45eb43:	c9                   	leaveq 
  45eb44:	c3                   	retq   

$ readelf -all python3.4
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:                              EXEC (Executable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x41a9d0
  Start of program headers:          64 (bytes into file)
  Start of section headers:          6131376 (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:         38
  Section header string table index: 35

Section Headers:
  [Nr] Name              Type             Address           Offset
   	   Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
   	   0000000000000000  0000000000000000           0     0     0
  [ 1] .interp           PROGBITS         0000000000400238  00000238
   	   000000000000001c  0000000000000000   A       0     0     1
  [ 2] .note.ABI-tag     NOTE             0000000000400254  00000254
   	   0000000000000020  0000000000000000   A       0     0     4
  [ 3] .note.gnu.build-i NOTE             0000000000400274  00000274
   	   0000000000000024  0000000000000000   A       0     0     4
  [ 4] .gnu.hash         GNU_HASH         0000000000400298  00000298
   	   00000000000030b8  0000000000000000   A       5     0     8
  [ 5] .dynsym           DYNSYM           0000000000403350  00003350
   	   000000000000b1a8  0000000000000018   A       6     1     8
  [ 6] .dynstr           STRTAB           000000000040e4f8  0000e4f8
   	   0000000000008172  0000000000000000   A       0     0     1
  [ 7] .gnu.version      VERSYM           000000000041666a  0001666a
   	   0000000000000ece  0000000000000002   A       5     0     2
  [ 8] .gnu.version_r    VERNEED          0000000000417538  00017538
   	   0000000000000130  0000000000000000   A       6     5     8
  [ 9] .rela.dyn         RELA             0000000000417668  00017668
   	   0000000000000078  0000000000000018   A       5     0     8
  [10] .rela.plt         RELA             00000000004176e0  000176e0
   	   0000000000001e78  0000000000000018   A       5    12     8
  [11] .init             PROGBITS         0000000000419558  00019558
   	   000000000000000e  0000000000000000  AX       0     0     4
  [12] .plt              PROGBITS         0000000000419570  00019570
   	   0000000000001460  0000000000000010  AX       0     0     16
  [13] .text             PROGBITS         000000000041a9d0  0001a9d0
   	   000000000024da34  0000000000000000  AX       0     0     16
  [14] .fini             PROGBITS         0000000000668404  00268404
   	   0000000000000009  0000000000000000  AX       0     0     4
  [15] .rodata           PROGBITS         0000000000668420  00268420
   	   000000000006258f  0000000000000000   A       0     0     32
  [16] .eh_frame_hdr     PROGBITS         00000000006ca9b0  002ca9b0
   	   00000000000094e4  0000000000000000   A       0     0     4
  [17] .eh_frame         PROGBITS         00000000006d3e98  002d3e98
   	   0000000000025aec  0000000000000000   A       0     0     8
  [18] .init_array       INIT_ARRAY       00000000008f9dd0  002f9dd0
   	   0000000000000008  0000000000000000  WA       0     0     8
  [19] .fini_array       FINI_ARRAY       00000000008f9dd8  002f9dd8
   	   0000000000000008  0000000000000000  WA       0     0     8
  [20] .jcr              PROGBITS         00000000008f9de0  002f9de0
   	   0000000000000008  0000000000000000  WA       0     0     8
  [21] .dynamic          DYNAMIC          00000000008f9de8  002f9de8
   	   0000000000000210  0000000000000010  WA       6     0     8
  [22] .got              PROGBITS         00000000008f9ff8  002f9ff8
   	   0000000000000008  0000000000000008  WA       0     0     8
  [23] .got.plt          PROGBITS         00000000008fa000  002fa000
   	   0000000000000a40  0000000000000008  WA       0     0     8
  [24] .data             PROGBITS         00000000008faa40  002faa40
   	   0000000000069390  0000000000000000  WA       0     0     32
  [25] .bss              NOBITS           0000000000963de0  00363dd0
   	   000000000001c2e0  0000000000000000  WA       0     0     32
  [26] .comment          PROGBITS         0000000000000000  00363dd0
   	   000000000000006b  0000000000000001  MS       0     0     1
  [27] .debug_aranges    PROGBITS         0000000000000000  00363e3b
   	   0000000000001700  0000000000000000           0     0     1
  [28] .debug_info       PROGBITS         0000000000000000  0036553b
   	   00000000000f4563  0000000000000000           0     0     1
  [29] .debug_abbrev     PROGBITS         0000000000000000  00459a9e
   	   0000000000015b78  0000000000000000           0     0     1
  [30] .debug_line       PROGBITS         0000000000000000  0046f616
   	   00000000000b0554  0000000000000000           0     0     1
  [31] .debug_str        PROGBITS         0000000000000000  0051fb6a
   	   00000000000598ae  0000000000000001  MS       0     0     1
  [32] .debug_ranges     PROGBITS         0000000000000000  00579418
   	   0000000000009590  0000000000000000           0     0     1
  [33] .debug_macro      PROGBITS         0000000000000000  005829a8
   	   00000000000470be  0000000000000000           0     0     1
  [34] .debug_types      PROGBITS         0000000000000000  005c9a66
   	   000000000000f2d8  0000000000000000           0     0     1
  [35] .shstrtab         STRTAB           0000000000000000  005d8d3e
   	   0000000000000170  0000000000000000           0     0     1
  [36] .symtab           SYMTAB           0000000000000000  005d9830
   	   0000000000035fe8  0000000000000018          37   7322     8
  [37] .strtab           STRTAB           0000000000000000  0060f818
   	   0000000000025576  0000000000000000           0     0     1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), l (large)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

There are no section groups in this file.

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
             	 FileSiz            MemSiz              Flags  Align
  PHDR           0x0000000000000040 0x0000000000400040 0x0000000000400040
             	 0x00000000000001f8 0x00000000000001f8  R E    8
  INTERP         0x0000000000000238 0x0000000000400238 0x0000000000400238
             	 0x000000000000001c 0x000000000000001c  R      1
  	  [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
  LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000
             	 0x00000000002f9984 0x00000000002f9984  R E    200000
  LOAD           0x00000000002f9dd0 0x00000000008f9dd0 0x00000000008f9dd0
             	 0x000000000006a000 0x00000000000862f0  RW     200000
  DYNAMIC        0x00000000002f9de8 0x00000000008f9de8 0x00000000008f9de8
             	 0x0000000000000210 0x0000000000000210  RW     8
  NOTE           0x0000000000000254 0x0000000000400254 0x0000000000400254
             	 0x0000000000000044 0x0000000000000044  R      4
  GNU_EH_FRAME   0x00000000002ca9b0 0x00000000006ca9b0 0x00000000006ca9b0
             	 0x00000000000094e4 0x00000000000094e4  R      4
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
             	 0x0000000000000000 0x0000000000000000  RW     8
  GNU_RELRO      0x00000000002f9dd0 0x00000000008f9dd0 0x00000000008f9dd0
             	 0x0000000000000230 0x0000000000000230  R      1

 Section to Segment mapping:
  Segment Sections...
   00     
   01     .interp 
   02     .interp .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame 
   03     .init_array .fini_array .jcr .dynamic .got .got.plt .data .bss 
   04     .dynamic 
   05     .note.ABI-tag .note.gnu.build-id 
   06     .eh_frame_hdr 
   07     
   08     .init_array .fini_array .jcr .dynamic .got 

Dynamic section at offset 0x2f9de8 contains 28 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libdl.so.2]
 0x0000000000000001 (NEEDED)             Shared library: [libutil.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000000c (INIT)               0x419558
 0x000000000000000d (FINI)               0x668404
 0x0000000000000019 (INIT_ARRAY)         0x8f9dd0
 0x000000000000001b (INIT_ARRAYSZ)       8 (bytes)
 0x000000000000001a (FINI_ARRAY)         0x8f9dd8
 0x000000000000001c (FINI_ARRAYSZ)       8 (bytes)
 0x000000006ffffef5 (GNU_HASH)           0x400298
 0x0000000000000005 (STRTAB)             0x40e4f8
 0x0000000000000006 (SYMTAB)             0x403350
 0x000000000000000a (STRSZ)              33138 (bytes)
 0x000000000000000b (SYMENT)             24 (bytes)
 0x0000000000000015 (DEBUG)              0x0
 0x0000000000000003 (PLTGOT)             0x8fa000
 0x0000000000000002 (PLTRELSZ)           7800 (bytes)
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000017 (JMPREL)             0x4176e0
 0x0000000000000007 (RELA)               0x417668
 0x0000000000000008 (RELASZ)             120 (bytes)
 0x0000000000000009 (RELAENT)            24 (bytes)
 0x000000006ffffffe (VERNEED)            0x417538
 0x000000006fffffff (VERNEEDNUM)         5
 0x000000006ffffff0 (VERSYM)             0x41666a
 0x0000000000000000 (NULL)               0x0

Relocation section '.rela.dyn' at offset 0x17668 contains 5 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
0000008f9ff8  009a00000006 R_X86_64_GLOB_DAT 0000000000000000 __gmon_start__ + 0
000000963de0  059b00000005 R_X86_64_COPY     0000000000963de0 stdout + 0
000000963de8  02aa00000005 R_X86_64_COPY     0000000000963de8 stdin + 0
000000963df0  015400000005 R_X86_64_COPY     0000000000963df0 __environ + 0
000000963df8  018e00000005 R_X86_64_COPY     0000000000963df8 stderr + 0

Relocation section '.rela.plt' at offset 0x176e0 contains 325 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
0000008fa018  000100000007 R_X86_64_JUMP_SLO 0000000000000000 wcscat + 0
0000008fa020  000200000007 R_X86_64_JUMP_SLO 0000000000000000 getenv + 0
0000008fa028  000300000007 R_X86_64_JUMP_SLO 0000000000000000 raise + 0
0000008fa030  000400000007 R_X86_64_JUMP_SLO 0000000000000000 mkfifoat + 0
0000008fa038  067700000007 R_X86_64_JUMP_SLO 00000000004195c0 free + 0
0000008fa040  000500000007 R_X86_64_JUMP_SLO 0000000000000000 wcscmp + 0
0000008fa048  000600000007 R_X86_64_JUMP_SLO 0000000000000000 utimensat + 0
0000008fa050  000700000007 R_X86_64_JUMP_SLO 0000000000000000 putchar + 0
0000008fa058  000800000007 R_X86_64_JUMP_SLO 0000000000000000 pthread_create + 0
0000008fa060  000900000007 R_X86_64_JUMP_SLO 0000000000000000 pthread_sigmask + 0
0000008fa068  000a00000007 R_X86_64_JUMP_SLO 0000000000000000 funlockfile + 0
0000008fa070  000b00000007 R_X86_64_JUMP_SLO 0000000000000000 pthread_detach + 0
0000008fa078  000c00000007 R_X86_64_JUMP_SLO 0000000000000000 sched_getscheduler + 0
0000008fa080  000d00000007 R_X86_64_JUMP_SLO 0000000000000000 abort + 0
0000008fa088  000e00000007 R_X86_64_JUMP_SLO 0000000000000000 __errno_location + 0
0000008fa090  048600000007 R_X86_64_JUMP_SLO 0000000000419670 fdatasync + 0
0000008fa098  000f00000007 R_X86_64_JUMP_SLO 0000000000000000 ldexp + 0
0000008fa0a0  001000000007 R_X86_64_JUMP_SLO 0000000000000000 unlink + 0
0000008fa0a8  001100000007 R_X86_64_JUMP_SLO 0000000000000000 round + 0
0000008fa0b0  001200000007 R_X86_64_JUMP_SLO 0000000000000000 strncpy + 0
0000008fa0b8  001300000007 R_X86_64_JUMP_SLO 0000000000000000 getpriority + 0
0000008fa0c0  001400000007 R_X86_64_JUMP_SLO 0000000000000000 strncmp + 0
0000008fa0c8  001600000007 R_X86_64_JUMP_SLO 0000000000000000 _exit + 0
0000008fa0d0  001700000007 R_X86_64_JUMP_SLO 0000000000000000 wcscoll + 0
0000008fa0d8  001800000007 R_X86_64_JUMP_SLO 0000000000000000 strcpy + 0
0000008fa0e0  02af00000007 R_X86_64_JUMP_SLO 0000000000419710 chroot + 0
0000008fa0e8  001900000007 R_X86_64_JUMP_SLO 0000000000000000 getresgid + 0
0000008fa0f0  001a00000007 R_X86_64_JUMP_SLO 0000000000000000 mkdir + 0
0000008fa0f8  001b00000007 R_X86_64_JUMP_SLO 0000000000000000 flistxattr + 0
0000008fa100  001c00000007 R_X86_64_JUMP_SLO 0000000000000000 writev + 0
0000008fa108  001d00000007 R_X86_64_JUMP_SLO 0000000000000000 unlinkat + 0
0000008fa110  001e00000007 R_X86_64_JUMP_SLO 0000000000000000 puts + 0
0000008fa118  001f00000007 R_X86_64_JUMP_SLO 0000000000000000 ferror + 0
0000008fa120  002000000007 R_X86_64_JUMP_SLO 0000000000000000 getc_unlocked + 0
0000008fa128  002100000007 R_X86_64_JUMP_SLO 0000000000000000 qsort + 0
0000008fa130  002200000007 R_X86_64_JUMP_SLO 0000000000000000 isatty + 0
0000008fa138  002300000007 R_X86_64_JUMP_SLO 0000000000000000 __isnan + 0
0000008fa140  002400000007 R_X86_64_JUMP_SLO 0000000000000000 sigaction + 0
0000008fa148  002500000007 R_X86_64_JUMP_SLO 0000000000000000 fread + 0
0000008fa150  002600000007 R_X86_64_JUMP_SLO 0000000000000000 __finite + 0
0000008fa158  002700000007 R_X86_64_JUMP_SLO 0000000000000000 fsetxattr + 0
0000008fa160  002800000007 R_X86_64_JUMP_SLO 0000000000000000 vsnprintf + 0
0000008fa168  002900000007 R_X86_64_JUMP_SLO 0000000000000000 exp + 0
0000008fa170  002a00000007 R_X86_64_JUMP_SLO 0000000000000000 localeconv + 0
0000008fa178  002b00000007 R_X86_64_JUMP_SLO 0000000000000000 llistxattr + 0
0000008fa180  002c00000007 R_X86_64_JUMP_SLO 0000000000000000 faccessat + 0
0000008fa188  002d00000007 R_X86_64_JUMP_SLO 0000000000000000 mbstowcs + 0
0000008fa190  002e00000007 R_X86_64_JUMP_SLO 0000000000000000 readlink + 0
0000008fa198  002f00000007 R_X86_64_JUMP_SLO 0000000000000000 fcntl + 0
0000008fa1a0  003000000007 R_X86_64_JUMP_SLO 0000000000000000 wcsncat + 0
0000008fa1a8  003100000007 R_X86_64_JUMP_SLO 0000000000000000 write + 0
0000008fa1b0  003200000007 R_X86_64_JUMP_SLO 0000000000000000 getpid + 0
0000008fa1b8  003300000007 R_X86_64_JUMP_SLO 0000000000000000 textdomain + 0
0000008fa1c0  003400000007 R_X86_64_JUMP_SLO 0000000000000000 pthread_kill + 0
0000008fa1c8  003500000007 R_X86_64_JUMP_SLO 0000000000000000 setresuid + 0
0000008fa1d0  003600000007 R_X86_64_JUMP_SLO 0000000000000000 dup3 + 0
0000008fa1d8  003700000007 R_X86_64_JUMP_SLO 0000000000000000 pthread_cond_wait + 0
0000008fa1e0  003800000007 R_X86_64_JUMP_SLO 0000000000000000 fremovexattr + 0
0000008fa1e8  003900000007 R_X86_64_JUMP_SLO 0000000000000000 pathconf + 0
0000008fa1f0  003a00000007 R_X86_64_JUMP_SLO 0000000000000000 clock + 0
0000008fa1f8  003b00000007 R_X86_64_JUMP_SLO 0000000000000000 wcsrchr + 0
0000008fa200  003c00000007 R_X86_64_JUMP_SLO 0000000000000000 fclose + 0
0000008fa208  003d00000007 R_X86_64_JUMP_SLO 0000000000000000 lgetxattr + 0
0000008fa210  003e00000007 R_X86_64_JUMP_SLO 0000000000000000 __sched_cpucount + 0
0000008fa218  003f00000007 R_X86_64_JUMP_SLO 0000000000000000 __xstat64 + 0
0000008fa220  004000000007 R_X86_64_JUMP_SLO 0000000000000000 wait3 + 0
0000008fa228  004100000007 R_X86_64_JUMP_SLO 0000000000000000 opendir + 0
0000008fa230  004200000007 R_X86_64_JUMP_SLO 0000000000000000 getloadavg + 0
0000008fa238  004300000007 R_X86_64_JUMP_SLO 0000000000000000 getpwuid + 0
0000008fa240  004400000007 R_X86_64_JUMP_SLO 0000000000000000 bindtextdomain + 0
0000008fa248  004500000007 R_X86_64_JUMP_SLO 0000000000000000 listxattr + 0
0000008fa250  004600000007 R_X86_64_JUMP_SLO 0000000000000000 rmdir + 0
0000008fa258  004700000007 R_X86_64_JUMP_SLO 0000000000000000 dcgettext + 0
0000008fa260  004800000007 R_X86_64_JUMP_SLO 0000000000000000 strlen + 0
0000008fa268  004900000007 R_X86_64_JUMP_SLO 0000000000000000 chdir + 0
0000008fa270  004a00000007 R_X86_64_JUMP_SLO 0000000000000000 __stack_chk_fail + 0
0000008fa278  004b00000007 R_X86_64_JUMP_SLO 0000000000000000 getuid + 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment