1、程序的产生,以及他为进程的产生做了那些铺垫
一般的编译过程可以分解为4个步骤,预处理,编译,汇编和链接:
-
预编译:处理源代码中的以”#”开始的预编译指令,如”#include”、”#define”等。
-
编译:把预处理完的文件进行一系列的词法分析、语法分析、语义分析及优化后产生相应的汇编代码文件,是程序构建的核心部分,也是最复杂的部分之一。
-
汇编:将汇编代码根据指令对照表转变成机器可以执行的指令,一个汇编语句一般对应一条机器指令。
-
链接:将多个目标文件综合起来形成一个可执行文件。
Hello world
为什么需要头文件,或者说为什么是引用头文件的这种形式;
代码编译过程中经历了那些:verbose
.
g++ main.cpp -o main --verbose
编译过程如下:
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.5.0-3ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
COLLECT_GCC_OPTIONS='-o' 'main' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-linux-gnu/7/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE main.cpp -quiet -dumpbase main.cpp -mtune=generic -march=x86-64 -auxbase main -version -fstack-protector-strong -Wformat -Wformat-security -o /tmp/cc6t0Tol.s
GNU C++14 (Ubuntu 7.5.0-3ubuntu1~18.04) version 7.5.0 (x86_64-linux-gnu)
compiled by GNU C version 7.5.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.19-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/7"
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/7/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/c++/7
/usr/include/x86_64-linux-gnu/c++/7
/usr/include/c++/7/backward
/usr/lib/gcc/x86_64-linux-gnu/7/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
GNU C++14 (Ubuntu 7.5.0-3ubuntu1~18.04) version 7.5.0 (x86_64-linux-gnu)
compiled by GNU C version 7.5.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.19-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 3eb3dc290cd5714c3e1c3ae751116f07
COLLECT_GCC_OPTIONS='-o' 'main' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
as -v --64 -o /tmp/ccwOSKKN.o /tmp/cc6t0Tol.s
GNU assembler version 2.30 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.30
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/7/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/7/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-o' 'main' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-linux-gnu/7/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/7/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper -plugin-opt=-fresolution=/tmp/cc2FJr9f.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o main /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/7 -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/7/../../.. /tmp/ccwOSKKN.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crtn.o
COLLECT_GCC_OPTIONS='-o' 'main' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
编译出来的文件包含了哪些内容,目标文件格式
#include<iostream>
using namespace std;
int main(){
cout<<"Hello world"<<endl;
return 0;
}
上方写了一个简单的Hello world ,那么他编译出来的产物是什么,我们可以使用file 【filename】来看一下:
main: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=c37c1e115f20a240dbf73b79dd3521bb830daac4, not stripped
该文件是一个64位ELF(Executable and Linkable Format, ELF)文件,下图从两个角度描述了elf文件的结构以及包含的信息,这些信息集成了代码和数据,以及装载时用到的信息。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ckb8SuUM-1637437019177)(https://secure1.wostatic.cn/static/3j9uPi79f2rkRcT2aMVTqL/image.png)]
下面展示使用readelf从程序中读取到的信息
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: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x7b0
Start of program headers: 64 (bytes into file)
Start of section headers: 7064 (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: 29
Section header string table index: 28
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 0000000000000238 00000238
000000000000001c 0000000000000000 A 0 0 1
[ 2] .note.ABI-tag NOTE 0000000000000254 00000254
0000000000000020 0000000000000000 A 0 0 4
[ 3] .note.gnu.build-i NOTE 0000000000000274 00000274
0000000000000024 0000000000000000 A 0 0 4
[ 4] .gnu.hash GNU_HASH 0000000000000298 00000298
0000000000000024 0000000000000000 A 5 0 8
[ 5] .dynsym DYNSYM 00000000000002c0 000002c0
0000000000000138 0000000000000018 A 6 1 8
[ 6] .dynstr STRTAB 00000000000003f8 000003f8
0000000000000163 0000000000000000 A 0 0 1
[ 7] .gnu.version VERSYM 000000000000055c 0000055c
000000000000001a 0000000000000002 A 5 0 2
[ 8] .gnu.version_r VERNEED 0000000000000578 00000578
0000000000000040 0000000000000000 A 6 2 8
[ 9] .rela.dyn RELA 00000000000005b8 000005b8
0000000000000120 0000000000000018 A 5 0 8
[10] .rela.plt RELA 00000000000006d8 000006d8
0000000000000060 0000000000000018 AI 5 22 8
[11] .init PROGBITS 0000000000000738 00000738
0000000000000017 0000000000000000 AX 0 0 4
[12] .plt PROGBITS 0000000000000750 00000750
0000000000000050 0000000000000010 AX 0 0 16
[13] .plt.got PROGBITS 00000000000007a0 000007a0
0000000000000008 0000000000000008 AX 0 0 8
[14] .text PROGBITS 00000000000007b0 000007b0
0000000000000212 0000000000000000 AX 0 0 16
[15] .fini PROGBITS 00000000000009c4 000009c4
0000000000000009 0000000000000000 AX 0 0 4
[16] .rodata PROGBITS 00000000000009d0 000009d0
0000000000000011 0000000000000000 A 0 0 4
[17] .eh_frame_hdr PROGBITS 00000000000009e4 000009e4
000000000000004c 0000000000000000 A 0 0 4
[18] .eh_frame PROGBITS 0000000000000a30 00000a30
0000000000000148 0000000000000000 A 0 0 8
[19] .init_array INIT_ARRAY 0000000000200d78 00000d78
0000000000000010 0000000000000008 WA 0 0 8
[20] .fini_array FINI_ARRAY 0000000000200d88 00000d88
0000000000000008 0000000000000008 WA 0 0 8
[21] .dynamic DYNAMIC 0000000000200d90 00000d90
0000000000000200 0000000000000010 WA 6 0 8
[22] .got PROGBITS 0000000000200f90 00000f90
0000000000000070 0000000000000008 WA 0 0 8
[23] .data PROGBITS 0000000000201000 00001000
0000000000000010 0000000000000000 WA 0 0 8
[24] .bss NOBITS 0000000000201020 00001010
0000000000000118 0000000000000000 WA 0 0 32
[25] .comment PROGBITS 0000000000000000 00001010
0000000000000029 0000000000000001 MS 0 0 1
[26] .symtab SYMTAB 0000000000000000 00001040
00000000000006d8 0000000000000018 27 47 8
[27] .strtab STRTAB 0000000000000000 00001718
0000000000000381 0000000000000000 0 0 1
[28] .shstrtab STRTAB 0000000000000000 00001a99
00000000000000fe 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),
l (large), p (processor specific)
There are no section groups in this file.
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
PHDR 0x0000000000000040 0x0000000000000040 0x0000000000000040
0x00000000000001f8 0x00000000000001f8 R 0x8
INTERP 0x0000000000000238 0x0000000000000238 0x0000000000000238
0x000000000000001c 0x000000000000001c R 0x1
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000b78 0x0000000000000b78 R E 0x200000
LOAD 0x0000000000000d78 0x0000000000200d78 0x0000000000200d78
0x0000000000000298 0x00000000000003c0 RW 0x200000
DYNAMIC 0x0000000000000d90 0x0000000000200d90 0x0000000000200d90
0x0000000000000200 0x0000000000000200 RW 0x8
NOTE 0x0000000000000254 0x0000000000000254 0x0000000000000254
0x0000000000000044 0x0000000000000044 R 0x4
GNU_EH_FRAME 0x00000000000009e4 0x00000000000009e4 0x00000000000009e4
0x000000000000004c 0x000000000000004c R 0x4
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 RW 0x10
GNU_RELRO 0x0000000000000d78 0x0000000000200d78 0x0000000000200d78
0x0000000000000288 0x0000000000000288 R 0x1
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 .plt.got .text .fini .rodata .eh_frame_hdr .eh_frame
03 .init_array .fini_array .dynamic .got .data .bss
04 .dynamic
05 .note.ABI-tag .note.gnu.build-id
06 .eh_frame_hdr
07
08 .init_array .fini_array .dynamic .got
Dynamic section at offset 0xd90 contains 28 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000c (INIT) 0x738
0x000000000000000d (FINI) 0x9c4
0x0000000000000019 (INIT_ARRAY) 0x200d78
0x000000000000001b (INIT_ARRAYSZ) 16 (bytes)
0x000000000000001a (FINI_ARRAY) 0x200d88
0x000000000000001c (FINI_ARRAYSZ) 8 (bytes)
0x000000006ffffef5 (GNU_HASH) 0x298
0x0000000000000005 (STRTAB) 0x3f8
0x0000000000000006 (SYMTAB) 0x2c0
0x000000000000000a (STRSZ) 355 (bytes)
0x000000000000000b (SYMENT) 24 (bytes)
0x0000000000000015 (DEBUG) 0x0
0x0000000000000003 (PLTGOT) 0x200f90
0x0000000000000002 (PLTRELSZ) 96 (bytes)
0x0000000000000014 (PLTREL) RELA
0x0000000000000017 (JMPREL) 0x6d8
0x0000000000000007 (RELA) 0x5b8
0x0000000000000008 (RELASZ) 288 (bytes)
0x0000000000000009 (RELAENT) 24 (bytes)
0x000000000000001e (FLAGS) BIND_NOW
0x000000006ffffffb (FLAGS_1) Flags: NOW PIE
0x000000006ffffffe (VERNEED) 0x578
0x000000006fffffff (VERNEEDNUM) 2
0x000000006ffffff0 (VERSYM) 0x55c
0x000000006ffffff9 (RELACOUNT) 4
0x0000000000000000 (NULL) 0x0
Relocation section '.rela.dyn' at offset 0x5b8 contains 12 entries:
Offset Info Type Sym. Value Sym. Name + Addend
000000200d78 000000000008 R_X86_64_RELATIVE 8b0
000000200d80 000000000008 R_X86_64_RELATIVE 936
000000200d88 000000000008 R_X86_64_RELATIVE 870
000000201008 000000000008 R_X86_64_RELATIVE 201008
000000200fc8 000100000006 R_X86_64_GLOB_DAT 0000000000000000 __cxa_finalize@GLIBC_2.2.5 + 0
000000200fd0 000200000006 R_X86_64_GLOB_DAT 0000000000000000 _ZSt4endlIcSt11char_tr@GLIBCXX_3.4 + 0
000000200fd8 000700000006 R_X86_64_GLOB_DAT 0000000000000000 _ITM_deregisterTMClone + 0
000000200fe0 000800000006 R_X86_64_GLOB_DAT 0000000000000000 __libc_start_main@GLIBC_2.2.5 + 0
000000200fe8 000900000006 R_X86_64_GLOB_DAT 0000000000000000 __gmon_start__ + 0
000000200ff0 000a00000006 R_X86_64_GLOB_DAT 0000000000000000 _ITM_registerTMCloneTa + 0
000000200ff8 000b00000006 R_X86_64_GLOB_DAT 0000000000000000 _ZNSt8ios_base4InitD1E@GLIBCXX_3.4 + 0
000000201020 000c00000005 R_X86_64_COPY 0000000000201020 _ZSt4cout@GLIBCXX_3.4 + 0
Relocation section '.rela.plt' at offset 0x6d8 contains 4 entries:
Offset Info Type Sym. Value Sym. Name + Addend
000000200fa8 000300000007 R_X86_64_JUMP_SLO 0000000000000000 __cxa_atexit@GLIBC_2.2.5 + 0
000000200fb0 000400000007 R_X86_64_JUMP_SLO 0000000000000000 _ZStlsISt11char_traits@GLIBCXX_3.4 + 0
000000200fb8 000500000007 R_X86_64_JUMP_SLO 0000000000000000 _ZNSolsEPFRSoS_E@GLIBCXX_3.4 + 0
000000200fc0 000600000007 R_X86_64_JUMP_SLO 0000000000000000 _ZNSt8ios_base4InitC1E@GLIBCXX_3.4 + 0
The decoding of unwind sections for machine type Advanced Micro Devices X86-64 is not currently supported.
Symbol table '.dynsym' contains 13 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.2.5 (2)
2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _ZSt4endlIcSt11char_trait@GLIBCXX_3.4 (3)
3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __cxa_atexit@GLIBC_2.2.5 (2)
4: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _ZStlsISt11char_traitsIcE@GLIBCXX_3.4 (3)
5: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _ZNSolsEPFRSoS_E@GLIBCXX_3.4 (3)
6: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _ZNSt8ios_base4InitC1Ev@GLIBCXX_3.4 (3)
7: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTab
8: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.2.5 (2)
9: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
10: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable
11: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _ZNSt8ios_base4InitD1Ev@GLIBCXX_3.4 (3)
12: 0000000000201020 272 OBJECT GLOBAL DEFAULT 24 _ZSt4cout@GLIBCXX_3.4 (3)
Symbol table '.symtab' contains 73 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000238 0 SECTION LOCAL DEFAULT 1
2: 0000000000000254 0 SECTION LOCAL DEFAULT 2
3: 0000000000000274 0 SECTION LOCAL DEFAULT 3
4: 0000000000000298 0 SECTION LOCAL DEFAULT 4
5: 00000000000002c0 0 SECTION LOCAL DEFAULT 5
6: 00000000000003f8 0 SECTION LOCAL DEFAULT 6
7: 000000000000055c 0 SECTION LOCAL DEFAULT 7
8: 0000000000000578 0 SECTION LOCAL DEFAULT 8
9: 00000000000005b8 0 SECTION LOCAL DEFAULT 9
10: 00000000000006d8 0 SECTION LOCAL DEFAULT 10
11: 0000000000000738 0 SECTION LOCAL DEFAULT 11
12: 0000000000000750 0 SECTION LOCAL DEFAULT 12
13: 00000000000007a0 0 SECTION LOCAL DEFAULT 13
14: 00000000000007b0 0 SECTION LOCAL DEFAULT 14
15: 00000000000009c4 0 SECTION LOCAL DEFAULT 15
16: 00000000000009d0 0 SECTION LOCAL DEFAULT 16
17: 00000000000009e4 0 SECTION LOCAL DEFAULT 17
18: 0000000000000a30 0 SECTION LOCAL DEFAULT 18
19: 0000000000200d78 0 SECTION LOCAL DEFAULT 19
20: 0000000000200d88 0 SECTION LOCAL DEFAULT 20
21: 0000000000200d90 0 SECTION LOCAL DEFAULT 21
22: 0000000000200f90 0 SECTION LOCAL DEFAULT 22
23: 0000000000201000 0 SECTION LOCAL DEFAULT 23
24: 0000000000201020 0 SECTION LOCAL DEFAULT 24
25: 0000000000000000 0 SECTION LOCAL DEFAULT 25
26: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
27: 00000000000007e0 0 FUNC LOCAL DEFAULT 14 deregister_tm_clones
28: 0000000000000820 0 FUNC LOCAL DEFAULT 14 register_tm_clones
29: 0000000000000870 0 FUNC LOCAL DEFAULT 14 __do_global_dtors_aux
30: 0000000000201130 1 OBJECT LOCAL DEFAULT 24 completed.7698
31: 0000000000200d88 0 OBJECT LOCAL DEFAULT 20 __do_global_dtors_aux_fin
32: 00000000000008b0 0 FUNC LOCAL DEFAULT 14 frame_dummy
33: 0000000000200d78 0 OBJECT LOCAL DEFAULT 19 __frame_dummy_init_array_
34: 0000000000000000 0 FILE LOCAL DEFAULT ABS main.cpp
35: 00000000000009d4 1 OBJECT LOCAL DEFAULT 16 _ZStL19piecewise_construc
36: 0000000000201131 1 OBJECT LOCAL DEFAULT 24 _ZStL8__ioinit
37: 00000000000008ed 73 FUNC LOCAL DEFAULT 14 _Z41__static_initializati
38: 0000000000000936 21 FUNC LOCAL DEFAULT 14 _GLOBAL__sub_I_main
39: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
40: 0000000000000b74 0 OBJECT LOCAL DEFAULT 18 __FRAME_END__
41: 0000000000000000 0 FILE LOCAL DEFAULT ABS
42: 00000000000009e4 0 NOTYPE LOCAL DEFAULT 17 __GNU_EH_FRAME_HDR
43: 0000000000200d90 0 OBJECT LOCAL DEFAULT 21 _DYNAMIC
44: 0000000000200d88 0 NOTYPE LOCAL DEFAULT 19 __init_array_end
45: 0000000000200d78 0 NOTYPE LOCAL DEFAULT 19 __init_array_start
46: 0000000000200f90 0 OBJECT LOCAL DEFAULT 22 _GLOBAL_OFFSET_TABLE_
47: 0000000000201010 0 NOTYPE GLOBAL DEFAULT 23 _edata
48: 0000000000201000 0 NOTYPE WEAK DEFAULT 23 data_start
49: 00000000000009d0 4 OBJECT GLOBAL DEFAULT 16 _IO_stdin_used
50: 0000000000000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@@GLIBC_2.2
51: 00000000000008ba 51 FUNC GLOBAL DEFAULT 14 main
52: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _ZSt4endlIcSt11char_trait
53: 0000000000201008 0 OBJECT GLOBAL HIDDEN 23 __dso_handle
54: 00000000000009c4 0 FUNC GLOBAL DEFAULT 15 _fini
55: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __cxa_atexit@@GLIBC_2.2.5
56: 00000000000007b0 43 FUNC GLOBAL DEFAULT 14 _start
57: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _ZStlsISt11char_traitsIcE
58: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _ZNSolsEPFRSoS_E@@GLIBCXX
59: 0000000000000738 0 FUNC GLOBAL DEFAULT 11 _init
60: 0000000000201010 0 OBJECT GLOBAL HIDDEN 23 __TMC_END__
61: 0000000000201020 272 OBJECT GLOBAL DEFAULT 24 _ZSt4cout@@GLIBCXX_3.4
62: 0000000000201000 0 NOTYPE GLOBAL DEFAULT 23 __data_start
63: 0000000000201138 0 NOTYPE GLOBAL DEFAULT 24 _end
64: 0000000000201010 0 NOTYPE GLOBAL DEFAULT 24 __bss_start
65: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _ZNSt8ios_base4InitC1Ev@@
66: 0000000000000950 101 FUNC GLOBAL DEFAULT 14 __libc_csu_init
67: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTab
68: 00000000000009c0 2 FUNC GLOBAL DEFAULT 14 __libc_csu_fini
69: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@@GLIBC_
70: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
71: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable
72: 0000000000000000 0 FUNC GLOBAL DEFAULT UND _ZNSt8ios_base4InitD1Ev@@
Histogram for `.gnu.hash' bucket list length (total of 2 buckets):
Length Number % of total Coverage
0 1 ( 50.0%)
1 1 ( 50.0%) 100.0%
Version symbols section '.gnu.version' contains 13 entries:
Addr: 000000000000055c Offset: 0x00055c Link: 5 (.dynsym)
000: 0 (*local*) 2 (GLIBC_2.2.5) 3 (GLIBCXX_3.4) 2 (GLIBC_2.2.5)
004: 3 (GLIBCXX_3.4) 3 (GLIBCXX_3.4) 3 (GLIBCXX_3.4) 0 (*local*)
008: 2 (GLIBC_2.2.5) 0 (*local*) 0 (*local*) 3 (GLIBCXX_3.4)
00c: 3 (GLIBCXX_3.4)
Version needs section '.gnu.version_r' contains 2 entries:
Addr: 0x0000000000000578 Offset: 0x000578 Link: 6 (.dynstr)
000000: Version: 1 File: libstdc++.so.6 Cnt: 1
0x0010: Name: GLIBCXX_3.4 Flags: none Version: 3
0x0020: Version: 1 File: libc.so.6 Cnt: 1
0x0030: Name: GLIBC_2.2.5 Flags: none Version: 2
Displaying notes found in: .note.ABI-tag
Owner Data size Description
GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag)
OS: Linux, ABI: 3.2.0
Displaying notes found in: .note.gnu.build-id
Owner Data size Description
GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring)
Build ID: c37c1e115f20a240dbf73b79dd3521bb830daac4
程序是怎样执行起来的 ,操作系统如何装载程序
运行main函数之前做了哪些事情,
运行中的内存布局是什么样子的