forked from swizl/tinycc_zh
-
Notifications
You must be signed in to change notification settings - Fork 0
/
elf.h
3237 lines (2875 loc) · 137 KB
/
elf.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/* This file defines standard ELF types, structures, and macros.
Copyright (C) 1995-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#如未定义 _ELF_H
#定义 _ELF_H 1
#如未定义 _WIN32
#包含 <inttypes.h>
#另
#如未定义 __int8_t_defined
#定义 __int8_t_defined
类型定义 有符 字 int8_t;
类型定义 短 整 int16_t;
类型定义 整 int32_t;
类型定义 长 长 整 int64_t;
类型定义 无符 字 uint8_t;
类型定义 无符 短 整 uint16_t;
类型定义 无符 整 uint32_t;
类型定义 无符 长 长 整 uint64_t;
#了如
#了如
/* Standard ELF types. */
/* Type for a 16-bit quantity. */
类型定义 uint16_t Elf32_Half;
类型定义 uint16_t Elf64_Half;
/* Types for signed and unsigned 32-bit quantities. */
类型定义 uint32_t Elf32_Word;
类型定义 int32_t Elf32_Sword;
类型定义 uint32_t Elf64_Word;
类型定义 int32_t Elf64_Sword;
/* Types for signed and unsigned 64-bit quantities. */
类型定义 uint64_t Elf32_Xword;
类型定义 int64_t Elf32_Sxword;
类型定义 uint64_t Elf64_Xword;
类型定义 int64_t Elf64_Sxword;
/* Type of addresses. */
类型定义 uint32_t Elf32_Addr;
类型定义 uint64_t Elf64_Addr;
/* Type of file offsets. */
类型定义 uint32_t Elf32_Off;
类型定义 uint64_t Elf64_Off;
/* Type for section indices, which are 16-bit quantities. */
类型定义 uint16_t Elf32_Section;
类型定义 uint16_t Elf64_Section;
/* Type for version symbol information. */
类型定义 Elf32_Half Elf32_Versym;
类型定义 Elf64_Half Elf64_Versym;
/* The ELF file header. This appears at the start of every ELF file. */
#定义 EI_NIDENT (16)
类型定义 结构
{
无符 字 e_ident[EI_NIDENT]; /* Magic number and other info */
Elf32_Half e_type; /* Object file type */
Elf32_Half e_machine; /* Architecture */
Elf32_Word e_version; /* Object file version */
Elf32_Addr e_entry; /* Entry point virtual address */
Elf32_Off e_phoff; /* Program header table file offset */
Elf32_Off e_shoff; /* Section header table file offset */
Elf32_Word e_flags; /* Processor-specific flags */
Elf32_Half e_ehsize; /* ELF header size in bytes */
Elf32_Half e_phentsize; /* Program header table entry size */
Elf32_Half e_phnum; /* Program header table entry count */
Elf32_Half e_shentsize; /* Section header table entry size */
Elf32_Half e_shnum; /* Section header table entry count */
Elf32_Half e_shstrndx; /* Section header string table index */
} Elf32_Ehdr;
类型定义 结构
{
无符 字 e_ident[EI_NIDENT]; /* Magic number and other info */
Elf64_Half e_type; /* Object file type */
Elf64_Half e_machine; /* Architecture */
Elf64_Word e_version; /* Object file version */
Elf64_Addr e_entry; /* Entry point virtual address */
Elf64_Off e_phoff; /* Program header table file offset */
Elf64_Off e_shoff; /* Section header table file offset */
Elf64_Word e_flags; /* Processor-specific flags */
Elf64_Half e_ehsize; /* ELF header size in bytes */
Elf64_Half e_phentsize; /* Program header table entry size */
Elf64_Half e_phnum; /* Program header table entry count */
Elf64_Half e_shentsize; /* Section header table entry size */
Elf64_Half e_shnum; /* Section header table entry count */
Elf64_Half e_shstrndx; /* Section header string table index */
} Elf64_Ehdr;
/* Fields in the e_ident array. The EI_* macros are indices into the
array. The macros under each EI_* macro are the values the byte
may have. */
#定义 EI_MAG0 0 /* File identification byte 0 index */
#定义 ELFMAG0 0x7f /* Magic number byte 0 */
#定义 EI_MAG1 1 /* File identification byte 1 index */
#定义 ELFMAG1 'E' /* Magic number byte 1 */
#定义 EI_MAG2 2 /* File identification byte 2 index */
#定义 ELFMAG2 'L' /* Magic number byte 2 */
#定义 EI_MAG3 3 /* File identification byte 3 index */
#定义 ELFMAG3 'F' /* Magic number byte 3 */
/* Conglomeration of the identification bytes, for easy testing as a word. */
#定义 ELFMAG "\177ELF"
#定义 SELFMAG 4
#定义 EI_CLASS 4 /* File class byte index */
#定义 ELFCLASSNONE 0 /* Invalid class */
#定义 ELFCLASS32 1 /* 32-bit objects */
#定义 ELFCLASS64 2 /* 64-bit objects */
#定义 ELFCLASSNUM 3
#定义 EI_DATA 5 /* Data encoding byte index */
#定义 ELFDATANONE 0 /* Invalid data encoding */
#定义 ELFDATA2LSB 1 /* 2's complement, little endian */
#定义 ELFDATA2MSB 2 /* 2's complement, big endian */
#定义 ELFDATANUM 3
#定义 EI_VERSION 6 /* File version byte index */
/* Value must be EV_CURRENT */
#定义 EI_OSABI 7 /* OS ABI identification */
#定义 ELFOSABI_NONE 0 /* UNIX System V ABI */
#定义 ELFOSABI_SYSV 0 /* Alias. */
#定义 ELFOSABI_HPUX 1 /* HP-UX */
#定义 ELFOSABI_NETBSD 2 /* NetBSD. */
#定义 ELFOSABI_GNU 3 /* Object uses GNU ELF extensions. */
#定义 ELFOSABI_LINUX ELFOSABI_GNU /* Compatibility alias. */
#定义 ELFOSABI_SOLARIS 6 /* Sun Solaris. */
#定义 ELFOSABI_AIX 7 /* IBM AIX. */
#定义 ELFOSABI_IRIX 8 /* SGI Irix. */
#定义 ELFOSABI_FREEBSD 9 /* FreeBSD. */
#定义 ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX. */
#定义 ELFOSABI_MODESTO 11 /* Novell Modesto. */
#定义 ELFOSABI_OPENBSD 12 /* OpenBSD. */
#定义 ELFOSABI_ARM_AEABI 64 /* ARM EABI */
#定义 ELFOSABI_ARM 97 /* ARM */
#定义 ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */
#定义 EI_ABIVERSION 8 /* ABI version */
#定义 EI_PAD 9 /* Byte index of padding bytes */
/* Legal values for e_type (object file type). */
#定义 ET_NONE 0 /* No file type */
#定义 ET_REL 1 /* Relocatable file */
#定义 ET_EXEC 2 /* Executable file */
#定义 ET_DYN 3 /* Shared object file */
#定义 ET_CORE 4 /* Core file */
#定义 ET_NUM 5 /* Number of defined types */
#定义 ET_LOOS 0xfe00 /* OS-specific range start */
#定义 ET_HIOS 0xfeff /* OS-specific range end */
#定义 ET_LOPROC 0xff00 /* Processor-specific range start */
#定义 ET_HIPROC 0xffff /* Processor-specific range end */
/* Legal values for e_machine (architecture). */
#定义 EM_NONE 0 /* No machine */
#定义 EM_M32 1 /* AT&T WE 32100 */
#定义 EM_SPARC 2 /* SUN SPARC */
#定义 EM_386 3 /* Intel 80386 */
#定义 EM_68K 4 /* Motorola m68k family */
#定义 EM_88K 5 /* Motorola m88k family */
#定义 EM_860 7 /* Intel 80860 */
#定义 EM_MIPS 8 /* MIPS R3000 big-endian */
#定义 EM_S370 9 /* IBM System/370 */
#定义 EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian */
#定义 EM_PARISC 15 /* HPPA */
#定义 EM_VPP500 17 /* Fujitsu VPP500 */
#定义 EM_SPARC32PLUS 18 /* Sun's "v8plus" */
#定义 EM_960 19 /* Intel 80960 */
#定义 EM_PPC 20 /* PowerPC */
#定义 EM_PPC64 21 /* PowerPC 64-bit */
#定义 EM_S390 22 /* IBM S390 */
#定义 EM_V800 36 /* NEC V800 series */
#定义 EM_FR20 37 /* Fujitsu FR20 */
#定义 EM_RH32 38 /* TRW RH-32 */
#定义 EM_RCE 39 /* Motorola RCE */
#定义 EM_ARM 40 /* ARM */
#定义 EM_FAKE_ALPHA 41 /* Digital Alpha */
#定义 EM_SH 42 /* Hitachi SH */
#定义 EM_SPARCV9 43 /* SPARC v9 64-bit */
#定义 EM_TRICORE 44 /* Siemens Tricore */
#定义 EM_ARC 45 /* Argonaut RISC Core */
#定义 EM_H8_300 46 /* Hitachi H8/300 */
#定义 EM_H8_300H 47 /* Hitachi H8/300H */
#定义 EM_H8S 48 /* Hitachi H8S */
#定义 EM_H8_500 49 /* Hitachi H8/500 */
#定义 EM_IA_64 50 /* Intel Merced */
#定义 EM_MIPS_X 51 /* Stanford MIPS-X */
#定义 EM_COLDFIRE 52 /* Motorola Coldfire */
#定义 EM_68HC12 53 /* Motorola M68HC12 */
#定义 EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator*/
#定义 EM_PCP 55 /* Siemens PCP */
#定义 EM_NCPU 56 /* Sony nCPU embedded RISC */
#定义 EM_NDR1 57 /* Denso NDR1 microprocessor */
#定义 EM_STARCORE 58 /* Motorola Start*Core processor */
#定义 EM_ME16 59 /* Toyota ME16 processor */
#定义 EM_ST100 60 /* STMicroelectronic ST100 processor */
#定义 EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam*/
#定义 EM_X86_64 62 /* AMD x86-64 architecture */
#定义 EM_PDSP 63 /* Sony DSP Processor */
#定义 EM_FX66 66 /* Siemens FX66 microcontroller */
#定义 EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */
#定义 EM_ST7 68 /* STmicroelectronics ST7 8 bit mc */
#定义 EM_68HC16 69 /* Motorola MC68HC16 microcontroller */
#定义 EM_68HC11 70 /* Motorola MC68HC11 microcontroller */
#定义 EM_68HC08 71 /* Motorola MC68HC08 microcontroller */
#定义 EM_68HC05 72 /* Motorola MC68HC05 microcontroller */
#定义 EM_SVX 73 /* Silicon Graphics SVx */
#定义 EM_ST19 74 /* STMicroelectronics ST19 8 bit mc */
#定义 EM_VAX 75 /* Digital VAX */
#定义 EM_CRIS 76 /* Axis Communications 32-bit embedded processor */
#定义 EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded processor */
#定义 EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */
#定义 EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */
#定义 EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */
#定义 EM_HUANY 81 /* Harvard University machine-independent object files */
#定义 EM_PRISM 82 /* SiTera Prism */
#定义 EM_AVR 83 /* Atmel AVR 8-bit microcontroller */
#定义 EM_FR30 84 /* Fujitsu FR30 */
#定义 EM_D10V 85 /* Mitsubishi D10V */
#定义 EM_D30V 86 /* Mitsubishi D30V */
#定义 EM_V850 87 /* NEC v850 */
#定义 EM_M32R 88 /* Mitsubishi M32R */
#定义 EM_MN10300 89 /* Matsushita MN10300 */
#定义 EM_MN10200 90 /* Matsushita MN10200 */
#定义 EM_PJ 91 /* picoJava */
#定义 EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */
#定义 EM_ARC_A5 93 /* ARC Cores Tangent-A5 */
#定义 EM_XTENSA 94 /* Tensilica Xtensa Architecture */
#定义 EM_AARCH64 183 /* ARM AARCH64 */
#定义 EM_TILEPRO 188 /* Tilera TILEPro */
#定义 EM_TILEGX 191 /* Tilera TILE-Gx */
#定义 EM_NUM 192
/* If it is necessary to assign new unofficial EM_* values, please
pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the
chances of collision with official or non-GNU unofficial values. */
#定义 EM_ALPHA 0x9026
#定义 EM_C60 0x9c60
/* Legal values for e_version (version). */
#定义 EV_NONE 0 /* Invalid ELF version */
#定义 EV_CURRENT 1 /* Current version */
#定义 EV_NUM 2
/* Section header. */
类型定义 结构
{
Elf32_Word sh_name; /* Section name (string tbl index) */
Elf32_Word sh_type; /* Section type */
Elf32_Word sh_flags; /* Section flags */
Elf32_Addr sh_addr; /* Section virtual addr at execution */
Elf32_Off sh_offset; /* Section file offset */
Elf32_Word sh_size; /* Section size in bytes */
Elf32_Word sh_link; /* Link to another section */
Elf32_Word sh_info; /* Additional section information */
Elf32_Word sh_addralign; /* Section alignment */
Elf32_Word sh_entsize; /* Entry size if section holds table */
} Elf32_Shdr;
类型定义 结构
{
Elf64_Word sh_name; /* Section name (string tbl index) */
Elf64_Word sh_type; /* Section type */
Elf64_Xword sh_flags; /* Section flags */
Elf64_Addr sh_addr; /* Section virtual addr at execution */
Elf64_Off sh_offset; /* Section file offset */
Elf64_Xword sh_size; /* Section size in bytes */
Elf64_Word sh_link; /* Link to another section */
Elf64_Word sh_info; /* Additional section information */
Elf64_Xword sh_addralign; /* Section alignment */
Elf64_Xword sh_entsize; /* Entry size if section holds table */
} Elf64_Shdr;
/* Special section indices. */
#定义 SHN_UNDEF 0 /* Undefined section */
#定义 SHN_LORESERVE 0xff00 /* Start of reserved indices */
#定义 SHN_LOPROC 0xff00 /* Start of processor-specific */
#定义 SHN_BEFORE 0xff00 /* Order section before all others
(Solaris). */
#定义 SHN_AFTER 0xff01 /* Order section after all others
(Solaris). */
#定义 SHN_HIPROC 0xff1f /* End of processor-specific */
#定义 SHN_LOOS 0xff20 /* Start of OS-specific */
#定义 SHN_HIOS 0xff3f /* End of OS-specific */
#定义 SHN_ABS 0xfff1 /* Associated symbol is absolute */
#定义 SHN_COMMON 0xfff2 /* Associated symbol is common */
#定义 SHN_XINDEX 0xffff /* Index is in extra table. */
#定义 SHN_HIRESERVE 0xffff /* End of reserved indices */
/* Legal values for sh_type (section type). */
#定义 SHT_NULL 0 /* Section header table entry unused */
#定义 SHT_PROGBITS 1 /* Program data */
#定义 SHT_SYMTAB 2 /* Symbol table */
#定义 SHT_STRTAB 3 /* String table */
#定义 SHT_RELA 4 /* Relocation entries with addends */
#定义 SHT_HASH 5 /* Symbol hash table */
#定义 SHT_DYNAMIC 6 /* Dynamic linking information */
#定义 SHT_NOTE 7 /* Notes */
#定义 SHT_NOBITS 8 /* Program space with no data (bss) */
#定义 SHT_REL 9 /* Relocation entries, no addends */
#定义 SHT_SHLIB 10 /* Reserved */
#定义 SHT_DYNSYM 11 /* Dynamic linker symbol table */
#定义 SHT_INIT_ARRAY 14 /* Array of constructors */
#定义 SHT_FINI_ARRAY 15 /* Array of destructors */
#定义 SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */
#定义 SHT_GROUP 17 /* Section group */
#定义 SHT_SYMTAB_SHNDX 18 /* Extended section indices */
#定义 SHT_NUM 19 /* Number of defined types. */
#定义 SHT_LOOS 0x60000000 /* Start OS-specific. */
#定义 SHT_GNU_ATTRIBUTES 0x6ffffff5 /* Object attributes. */
#定义 SHT_GNU_HASH 0x6ffffff6 /* GNU-style hash table. */
#定义 SHT_GNU_LIBLIST 0x6ffffff7 /* Prelink library list */
#定义 SHT_CHECKSUM 0x6ffffff8 /* Checksum for DSO content. */
#定义 SHT_LOSUNW 0x6ffffffa /* Sun-specific low bound. */
#定义 SHT_SUNW_move 0x6ffffffa
#定义 SHT_SUNW_COMDAT 0x6ffffffb
#定义 SHT_SUNW_syminfo 0x6ffffffc
#定义 SHT_GNU_verdef 0x6ffffffd /* Version definition section. */
#定义 SHT_GNU_verneed 0x6ffffffe /* Version needs section. */
#定义 SHT_GNU_versym 0x6fffffff /* Version symbol table. */
#定义 SHT_HISUNW 0x6fffffff /* Sun-specific high bound. */
#定义 SHT_HIOS 0x6fffffff /* End OS-specific type */
#定义 SHT_LOPROC 0x70000000 /* Start of processor-specific */
#定义 SHT_HIPROC 0x7fffffff /* End of processor-specific */
#定义 SHT_LOUSER 0x80000000 /* Start of application-specific */
#定义 SHT_HIUSER 0x8fffffff /* End of application-specific */
/* Legal values for sh_flags (section flags). */
#定义 SHF_WRITE (1 << 0) /* Writable */
#定义 SHF_ALLOC (1 << 1) /* Occupies memory during execution */
#定义 SHF_EXECINSTR (1 << 2) /* Executable */
#定义 SHF_MERGE (1 << 4) /* Might be merged */
#定义 SHF_STRINGS (1 << 5) /* Contains nul-terminated strings */
#定义 SHF_INFO_LINK (1 << 6) /* `sh_info' contains SHT index */
#定义 SHF_LINK_ORDER (1 << 7) /* Preserve order after combining */
#定义 SHF_OS_NONCONFORMING (1 << 8) /* Non-standard OS specific handling
required */
#定义 SHF_GROUP (1 << 9) /* Section is member of a group. */
#定义 SHF_TLS (1 << 10) /* Section hold thread-local data. */
#定义 SHF_COMPRESSED (1 << 11) /* Section with compressed data. */
#定义 SHF_MASKOS 0x0ff00000 /* OS-specific. */
#定义 SHF_MASKPROC 0xf0000000 /* Processor-specific */
#定义 SHF_ORDERED (1 << 30) /* Special ordering requirement
(Solaris). */
#定义 SHF_EXCLUDE (1 << 31) /* Section is excluded unless
referenced or allocated (Solaris).*/
/* Section group handling. */
#定义 GRP_COMDAT 0x1 /* Mark group as COMDAT. */
/* Symbol table entry. */
类型定义 结构
{
Elf32_Word st_name; /* Symbol name (string tbl index) */
Elf32_Addr st_value; /* Symbol value */
Elf32_Word st_size; /* Symbol size */
无符 字 st_info; /* Symbol type and binding */
无符 字 st_other; /* Symbol visibility */
Elf32_Section st_shndx; /* Section index */
} Elf32_Sym;
类型定义 结构
{
Elf64_Word st_name; /* Symbol name (string tbl index) */
无符 字 st_info; /* Symbol type and binding */
无符 字 st_other; /* Symbol visibility */
Elf64_Section st_shndx; /* Section index */
Elf64_Addr st_value; /* Symbol value */
Elf64_Xword st_size; /* Symbol size */
} Elf64_Sym;
/* The syminfo section if available contains additional information about
every dynamic symbol. */
类型定义 结构
{
Elf32_Half si_boundto; /* Direct bindings, symbol bound to */
Elf32_Half si_flags; /* Per symbol flags */
} Elf32_Syminfo;
类型定义 结构
{
Elf64_Half si_boundto; /* Direct bindings, symbol bound to */
Elf64_Half si_flags; /* Per symbol flags */
} Elf64_Syminfo;
/* Possible values for si_boundto. */
#定义 SYMINFO_BT_SELF 0xffff /* Symbol bound to self */
#定义 SYMINFO_BT_PARENT 0xfffe /* Symbol bound to parent */
#定义 SYMINFO_BT_LOWRESERVE 0xff00 /* Beginning of reserved entries */
/* Possible bitmasks for si_flags. */
#定义 SYMINFO_FLG_DIRECT 0x0001 /* Direct bound symbol */
#定义 SYMINFO_FLG_PASSTHRU 0x0002 /* Pass-thru symbol for translator */
#定义 SYMINFO_FLG_COPY 0x0004 /* Symbol is a copy-reloc */
#定义 SYMINFO_FLG_LAZYLOAD 0x0008 /* Symbol bound to object to be lazy
loaded */
/* Syminfo version values. */
#定义 SYMINFO_NONE 0
#定义 SYMINFO_CURRENT 1
#定义 SYMINFO_NUM 2
/* How to extract and insert information held in the st_info field. */
#定义 ELF32_ST_BIND(val) (((无符 字) (val)) >> 4)
#定义 ELF32_ST_TYPE(val) ((val) & 0xf)
#定义 ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
/* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field. */
#定义 ELF64_ST_BIND(val) ELF32_ST_BIND (val)
#定义 ELF64_ST_TYPE(val) ELF32_ST_TYPE (val)
#定义 ELF64_ST_INFO(bind, type) ELF32_ST_INFO ((bind), (type))
/* Legal values for ST_BIND subfield of st_info (symbol binding). */
#定义 STB_LOCAL 0 /* Local symbol */
#定义 STB_GLOBAL 1 /* Global symbol */
#定义 STB_WEAK 2 /* Weak symbol */
#定义 STB_NUM 3 /* Number of defined types. */
#定义 STB_LOOS 10 /* Start of OS-specific */
#定义 STB_GNU_UNIQUE 10 /* Unique symbol. */
#定义 STB_HIOS 12 /* End of OS-specific */
#定义 STB_LOPROC 13 /* Start of processor-specific */
#定义 STB_HIPROC 15 /* End of processor-specific */
/* Legal values for ST_TYPE subfield of st_info (symbol type). */
#定义 STT_NOTYPE 0 /* Symbol type is unspecified */
#定义 STT_OBJECT 1 /* Symbol is a data object */
#定义 STT_FUNC 2 /* Symbol is a code object */
#定义 STT_SECTION 3 /* Symbol associated with a section */
#定义 STT_FILE 4 /* Symbol's name is file name */
#定义 STT_COMMON 5 /* Symbol is a common data object */
#定义 STT_TLS 6 /* Symbol is thread-local data object*/
#定义 STT_NUM 7 /* Number of defined types. */
#定义 STT_LOOS 10 /* Start of OS-specific */
#定义 STT_GNU_IFUNC 10 /* Symbol is indirect code object */
#定义 STT_HIOS 12 /* End of OS-specific */
#定义 STT_LOPROC 13 /* Start of processor-specific */
#定义 STT_HIPROC 15 /* End of processor-specific */
/* Symbol table indices are found in the hash buckets and chain table
of a symbol hash table section. This special index value indicates
the end of a chain, meaning no further symbols are found in that bucket. */
#定义 STN_UNDEF 0 /* End of a chain. */
/* How to extract and insert information held in the st_other field. */
#定义 ELF32_ST_VISIBILITY(o) ((o) & 0x03)
/* For ELF64 the definitions are the same. */
#定义 ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o)
/* Symbol visibility specification encoded in the st_other field. */
#定义 STV_DEFAULT 0 /* Default symbol visibility rules */
#定义 STV_INTERNAL 1 /* Processor specific hidden class */
#定义 STV_HIDDEN 2 /* Sym unavailable in other modules */
#定义 STV_PROTECTED 3 /* Not preemptible, not exported */
/* Relocation table entry without addend (in section of type SHT_REL). */
类型定义 结构
{
Elf32_Addr r_offset; /* Address */
Elf32_Word r_info; /* Relocation type and symbol index */
} Elf32_Rel;
/* I have seen two different definitions of the Elf64_Rel and
Elf64_Rela structures, so we'll leave them out until Novell (or
whoever) gets their act together. */
/* The following, at least, is used on Sparc v9, MIPS, and Alpha. */
类型定义 结构
{
Elf64_Addr r_offset; /* Address */
Elf64_Xword r_info; /* Relocation type and symbol index */
} Elf64_Rel;
/* Relocation table entry with addend (in section of type SHT_RELA). */
类型定义 结构
{
Elf32_Addr r_offset; /* Address */
Elf32_Word r_info; /* Relocation type and symbol index */
Elf32_Sword r_addend; /* Addend */
} Elf32_Rela;
类型定义 结构
{
Elf64_Addr r_offset; /* Address */
Elf64_Xword r_info; /* Relocation type and symbol index */
Elf64_Sxword r_addend; /* Addend */
} Elf64_Rela;
/* How to extract and insert information held in the r_info field. */
#定义 ELF32_R_SYM(val) ((val) >> 8)
#定义 ELF32_R_TYPE(val) ((val) & 0xff)
#定义 ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff))
#定义 ELF64_R_SYM(i) ((i) >> 32)
#定义 ELF64_R_TYPE(i) ((i) & 0xffffffff)
#定义 ELF64_R_INFO(sym,type) ((((Elf64_Xword) (sym)) << 32) + (type))
/* Program segment header. */
类型定义 结构
{
Elf32_Word p_type; /* Segment type */
Elf32_Off p_offset; /* Segment file offset */
Elf32_Addr p_vaddr; /* Segment virtual address */
Elf32_Addr p_paddr; /* Segment physical address */
Elf32_Word p_filesz; /* Segment size in file */
Elf32_Word p_memsz; /* Segment size in memory */
Elf32_Word p_flags; /* Segment flags */
Elf32_Word p_align; /* Segment alignment */
} Elf32_Phdr;
类型定义 结构
{
Elf64_Word p_type; /* Segment type */
Elf64_Word p_flags; /* Segment flags */
Elf64_Off p_offset; /* Segment file offset */
Elf64_Addr p_vaddr; /* Segment virtual address */
Elf64_Addr p_paddr; /* Segment physical address */
Elf64_Xword p_filesz; /* Segment size in file */
Elf64_Xword p_memsz; /* Segment size in memory */
Elf64_Xword p_align; /* Segment alignment */
} Elf64_Phdr;
/* Special value for e_phnum. This indicates that the real number of
program headers is too large to fit into e_phnum. Instead the real
value is in the field sh_info of section 0. */
#定义 PN_XNUM 0xffff
/* Legal values for p_type (segment type). */
#定义 PT_NULL 0 /* Program header table entry unused */
#定义 PT_LOAD 1 /* Loadable program segment */
#定义 PT_DYNAMIC 2 /* Dynamic linking information */
#定义 PT_INTERP 3 /* Program interpreter */
#定义 PT_NOTE 4 /* Auxiliary information */
#定义 PT_SHLIB 5 /* Reserved */
#定义 PT_PHDR 6 /* Entry for header table itself */
#定义 PT_TLS 7 /* Thread-local storage segment */
#定义 PT_NUM 8 /* Number of defined types */
#定义 PT_LOOS 0x60000000 /* Start of OS-specific */
#定义 PT_GNU_EH_FRAME 0x6474e550 /* GCC .eh_frame_hdr segment */
#定义 PT_GNU_STACK 0x6474e551 /* Indicates stack executability */
#定义 PT_GNU_RELRO 0x6474e552 /* Read-only after relocation */
#定义 PT_LOSUNW 0x6ffffffa
#定义 PT_SUNWBSS 0x6ffffffa /* Sun Specific segment */
#定义 PT_SUNWSTACK 0x6ffffffb /* Stack segment */
#定义 PT_HISUNW 0x6fffffff
#定义 PT_HIOS 0x6fffffff /* End of OS-specific */
#定义 PT_LOPROC 0x70000000 /* Start of processor-specific */
#定义 PT_HIPROC 0x7fffffff /* End of processor-specific */
/* Legal values for p_flags (segment flags). */
#定义 PF_X (1 << 0) /* Segment is executable */
#定义 PF_W (1 << 1) /* Segment is writable */
#定义 PF_R (1 << 2) /* Segment is readable */
#定义 PF_MASKOS 0x0ff00000 /* OS-specific */
#定义 PF_MASKPROC 0xf0000000 /* Processor-specific */
/* Legal values for note segment descriptor types for core files. */
#定义 NT_PRSTATUS 1 /* Contains copy of prstatus struct */
#定义 NT_FPREGSET 2 /* Contains copy of fpregset struct */
#定义 NT_PRPSINFO 3 /* Contains copy of prpsinfo struct */
#定义 NT_PRXREG 4 /* Contains copy of prxregset struct */
#定义 NT_TASKSTRUCT 4 /* Contains copy of task structure */
#定义 NT_PLATFORM 5 /* String from sysinfo(SI_PLATFORM) */
#定义 NT_AUXV 6 /* Contains copy of auxv array */
#定义 NT_GWINDOWS 7 /* Contains copy of gwindows struct */
#定义 NT_ASRS 8 /* Contains copy of asrset struct */
#定义 NT_PSTATUS 10 /* Contains copy of pstatus struct */
#定义 NT_PSINFO 13 /* Contains copy of psinfo struct */
#定义 NT_PRCRED 14 /* Contains copy of prcred struct */
#定义 NT_UTSNAME 15 /* Contains copy of utsname struct */
#定义 NT_LWPSTATUS 16 /* Contains copy of lwpstatus struct */
#定义 NT_LWPSINFO 17 /* Contains copy of lwpinfo struct */
#定义 NT_PRFPXREG 20 /* Contains copy of fprxregset struct */
#定义 NT_PRXFPREG 0x46e62b7f /* Contains copy of user_fxsr_struct */
#定义 NT_PPC_VMX 0x100 /* PowerPC Altivec/VMX registers */
#定义 NT_PPC_SPE 0x101 /* PowerPC SPE/EVR registers */
#定义 NT_PPC_VSX 0x102 /* PowerPC VSX registers */
#定义 NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */
#定义 NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */
#定义 NT_X86_XSTATE 0x202 /* x86 extended state using xsave */
#定义 NT_S390_HIGH_GPRS 0x300 /* s390 upper register halves */
#定义 NT_S390_TIMER 0x301 /* s390 timer register */
#定义 NT_S390_TODCMP 0x302 /* s390 TOD clock comparator register */
#定义 NT_S390_TODPREG 0x303 /* s390 TOD programmable register */
#定义 NT_S390_CTRS 0x304 /* s390 control registers */
#定义 NT_S390_PREFIX 0x305 /* s390 prefix register */
#定义 NT_S390_LAST_BREAK 0x306 /* s390 breaking event address */
#定义 NT_S390_SYSTEM_CALL 0x307 /* s390 system call restart data */
#定义 NT_ARM_VFP 0x400 /* ARM VFP/NEON registers */
#定义 NT_ARM_TLS 0x401 /* ARM TLS register */
#定义 NT_ARM_HW_BREAK 0x402 /* ARM hardware breakpoint registers */
#定义 NT_ARM_HW_WATCH 0x403 /* ARM hardware watchpoint registers */
/* Legal values for the note segment descriptor types for object files. */
#定义 NT_VERSION 1 /* Contains a version string. */
/* Dynamic section entry. */
类型定义 结构
{
Elf32_Sword d_tag; /* Dynamic entry type */
联合
{
Elf32_Word d_val; /* Integer value */
Elf32_Addr d_ptr; /* Address value */
} d_un;
} Elf32_Dyn;
类型定义 结构
{
Elf64_Sxword d_tag; /* Dynamic entry type */
联合
{
Elf64_Xword d_val; /* Integer value */
Elf64_Addr d_ptr; /* Address value */
} d_un;
} Elf64_Dyn;
/* Legal values for d_tag (dynamic entry type). */
#定义 DT_NULL 0 /* Marks end of dynamic section */
#定义 DT_NEEDED 1 /* Name of needed library */
#定义 DT_PLTRELSZ 2 /* Size in bytes of PLT relocs */
#定义 DT_PLTGOT 3 /* Processor defined value */
#定义 DT_HASH 4 /* Address of symbol hash table */
#定义 DT_STRTAB 5 /* Address of string table */
#定义 DT_SYMTAB 6 /* Address of symbol table */
#定义 DT_RELA 7 /* Address of Rela relocs */
#定义 DT_RELASZ 8 /* Total size of Rela relocs */
#定义 DT_RELAENT 9 /* Size of one Rela reloc */
#定义 DT_STRSZ 10 /* Size of string table */
#定义 DT_SYMENT 11 /* Size of one symbol table entry */
#定义 DT_INIT 12 /* Address of init function */
#定义 DT_FINI 13 /* Address of termination function */
#定义 DT_SONAME 14 /* Name of shared object */
#定义 DT_RPATH 15 /* Library search path (deprecated) */
#定义 DT_SYMBOLIC 16 /* Start symbol search here */
#定义 DT_REL 17 /* Address of Rel relocs */
#定义 DT_RELSZ 18 /* Total size of Rel relocs */
#定义 DT_RELENT 19 /* Size of one Rel reloc */
#定义 DT_PLTREL 20 /* Type of reloc in PLT */
#定义 DT_DEBUG 21 /* For debugging; unspecified */
#定义 DT_TEXTREL 22 /* Reloc might modify .text */
#定义 DT_JMPREL 23 /* Address of PLT relocs */
#定义 DT_BIND_NOW 24 /* Process relocations of object */
#定义 DT_INIT_ARRAY 25 /* Array with addresses of init fct */
#定义 DT_FINI_ARRAY 26 /* Array with addresses of fini fct */
#定义 DT_INIT_ARRAYSZ 27 /* Size in bytes of DT_INIT_ARRAY */
#定义 DT_FINI_ARRAYSZ 28 /* Size in bytes of DT_FINI_ARRAY */
#定义 DT_RUNPATH 29 /* Library search path */
#定义 DT_FLAGS 30 /* Flags for the object being loaded */
#定义 DT_ENCODING 32 /* Start of encoded range */
#定义 DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/
#定义 DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */
#定义 DT_NUM 34 /* Number used */
#定义 DT_LOOS 0x6000000d /* Start of OS-specific */
#定义 DT_HIOS 0x6ffff000 /* End of OS-specific */
#定义 DT_LOPROC 0x70000000 /* Start of processor-specific */
#定义 DT_HIPROC 0x7fffffff /* End of processor-specific */
#定义 DT_PROCNUM DT_MIPS_NUM /* Most used by any processor */
/* DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the
Dyn.d_un.d_val field of the Elf*_Dyn structure. This follows Sun's
approach. */
#定义 DT_VALRNGLO 0x6ffffd00
#定义 DT_GNU_PRELINKED 0x6ffffdf5 /* Prelinking timestamp */
#定义 DT_GNU_CONFLICTSZ 0x6ffffdf6 /* Size of conflict section */
#定义 DT_GNU_LIBLISTSZ 0x6ffffdf7 /* Size of library list */
#定义 DT_CHECKSUM 0x6ffffdf8
#定义 DT_PLTPADSZ 0x6ffffdf9
#定义 DT_MOVEENT 0x6ffffdfa
#定义 DT_MOVESZ 0x6ffffdfb
#定义 DT_FEATURE_1 0x6ffffdfc /* Feature selection (DTF_*). */
#定义 DT_POSFLAG_1 0x6ffffdfd /* Flags for DT_* entries, effecting
the following DT_* entry. */
#定义 DT_SYMINSZ 0x6ffffdfe /* Size of syminfo table (in bytes) */
#定义 DT_SYMINENT 0x6ffffdff /* Entry size of syminfo */
#定义 DT_VALRNGHI 0x6ffffdff
#定义 DT_VALTAGIDX(tag) (DT_VALRNGHI - (tag)) /* Reverse order! */
#定义 DT_VALNUM 12
/* DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the
Dyn.d_un.d_ptr field of the Elf*_Dyn structure.
If any adjustment is made to the ELF object after it has been
built these entries will need to be adjusted. */
#定义 DT_ADDRRNGLO 0x6ffffe00
#定义 DT_GNU_HASH 0x6ffffef5 /* GNU-style hash table. */
#定义 DT_TLSDESC_PLT 0x6ffffef6
#定义 DT_TLSDESC_GOT 0x6ffffef7
#定义 DT_GNU_CONFLICT 0x6ffffef8 /* Start of conflict section */
#定义 DT_GNU_LIBLIST 0x6ffffef9 /* Library list */
#定义 DT_CONFIG 0x6ffffefa /* Configuration information. */
#定义 DT_DEPAUDIT 0x6ffffefb /* Dependency auditing. */
#定义 DT_AUDIT 0x6ffffefc /* Object auditing. */
#定义 DT_PLTPAD 0x6ffffefd /* PLT padding. */
#定义 DT_MOVETAB 0x6ffffefe /* Move table. */
#定义 DT_SYMINFO 0x6ffffeff /* Syminfo table. */
#定义 DT_ADDRRNGHI 0x6ffffeff
#定义 DT_ADDRTAGIDX(tag) (DT_ADDRRNGHI - (tag)) /* Reverse order! */
#定义 DT_ADDRNUM 11
/* The versioning entry types. The next are defined as part of the
GNU extension. */
#定义 DT_VERSYM 0x6ffffff0
#定义 DT_RELACOUNT 0x6ffffff9
#定义 DT_RELCOUNT 0x6ffffffa
/* These were chosen by Sun. */
#定义 DT_FLAGS_1 0x6ffffffb /* State flags, see DF_1_* below. */
#定义 DT_VERDEF 0x6ffffffc /* Address of version definition
table */
#定义 DT_VERDEFNUM 0x6ffffffd /* Number of version definitions */
#定义 DT_VERNEED 0x6ffffffe /* Address of table with needed
versions */
#定义 DT_VERNEEDNUM 0x6fffffff /* Number of needed versions */
#定义 DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) /* Reverse order! */
#定义 DT_VERSIONTAGNUM 16
/* Sun added these machine-independent extensions in the "processor-specific"
range. Be compatible. */
#定义 DT_AUXILIARY 0x7ffffffd /* Shared object to load before self */
#定义 DT_FILTER 0x7fffffff /* Shared object to get values from */
#定义 DT_EXTRATAGIDX(tag) ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1)
#定义 DT_EXTRANUM 3
/* Values of `d_un.d_val' in the DT_FLAGS entry. */
#定义 DF_ORIGIN 0x00000001 /* Object may use DF_ORIGIN */
#定义 DF_SYMBOLIC 0x00000002 /* Symbol resolutions starts here */
#定义 DF_TEXTREL 0x00000004 /* Object contains text relocations */
#定义 DF_BIND_NOW 0x00000008 /* No lazy binding for this object */
#定义 DF_STATIC_TLS 0x00000010 /* Module uses the static TLS model */
/* State flags selectable in the `d_un.d_val' element of the DT_FLAGS_1
entry in the dynamic section. */
#定义 DF_1_NOW 0x00000001 /* Set RTLD_NOW for this object. */
#定义 DF_1_GLOBAL 0x00000002 /* Set RTLD_GLOBAL for this object. */
#定义 DF_1_GROUP 0x00000004 /* Set RTLD_GROUP for this object. */
#定义 DF_1_NODELETE 0x00000008 /* Set RTLD_NODELETE for this object.*/
#定义 DF_1_LOADFLTR 0x00000010 /* Trigger filtee loading at runtime.*/
#定义 DF_1_INITFIRST 0x00000020 /* Set RTLD_INITFIRST for this object*/
#定义 DF_1_NOOPEN 0x00000040 /* Set RTLD_NOOPEN for this object. */
#定义 DF_1_ORIGIN 0x00000080 /* $ORIGIN must be handled. */
#定义 DF_1_DIRECT 0x00000100 /* Direct binding enabled. */
#定义 DF_1_TRANS 0x00000200
#定义 DF_1_INTERPOSE 0x00000400 /* Object is used to interpose. */
#定义 DF_1_NODEFLIB 0x00000800 /* Ignore default lib search path. */
#定义 DF_1_NODUMP 0x00001000 /* Object can't be dldump'ed. */
#定义 DF_1_CONFALT 0x00002000 /* Configuration alternative created.*/
#定义 DF_1_ENDFILTEE 0x00004000 /* Filtee terminates filters search. */
#定义 DF_1_DISPRELDNE 0x00008000 /* Disp reloc applied at build time. */
#定义 DF_1_DISPRELPND 0x00010000 /* Disp reloc applied at run-time. */
#定义 DF_1_NODIRECT 0x00020000 /* Object has no-direct binding. */
#定义 DF_1_IGNMULDEF 0x00040000
#定义 DF_1_NOKSYMS 0x00080000
#定义 DF_1_NOHDR 0x00100000
#定义 DF_1_EDITED 0x00200000 /* Object is modified after built. */
#定义 DF_1_NORELOC 0x00400000
#定义 DF_1_SYMINTPOSE 0x00800000 /* Object has individual interposers. */
#定义 DF_1_GLOBAUDIT 0x01000000 /* Global auditin required. */
#定义 DF_1_SINGLETON 0x02000000 /* Singleton symbols are used. */
/* Flags for the feature selection in DT_FEATURE_1. */
#定义 DTF_1_PARINIT 0x00000001
#定义 DTF_1_CONFEXP 0x00000002
/* Flags in the DT_POSFLAG_1 entry effecting only the next DT_* entry. */
#定义 DF_P1_LAZYLOAD 0x00000001 /* Lazyload following object. */
#定义 DF_P1_GROUPPERM 0x00000002 /* Symbols from next object are not
generally available. */
/* Version definition sections. */
类型定义 结构
{
Elf32_Half vd_version; /* Version revision */
Elf32_Half vd_flags; /* Version information */
Elf32_Half vd_ndx; /* Version Index */
Elf32_Half vd_cnt; /* Number of associated aux entries */
Elf32_Word vd_hash; /* Version name hash value */
Elf32_Word vd_aux; /* Offset in bytes to verdaux array */
Elf32_Word vd_next; /* Offset in bytes to next verdef
entry */
} Elf32_Verdef;
类型定义 结构
{
Elf64_Half vd_version; /* Version revision */
Elf64_Half vd_flags; /* Version information */
Elf64_Half vd_ndx; /* Version Index */
Elf64_Half vd_cnt; /* Number of associated aux entries */
Elf64_Word vd_hash; /* Version name hash value */
Elf64_Word vd_aux; /* Offset in bytes to verdaux array */
Elf64_Word vd_next; /* Offset in bytes to next verdef
entry */
} Elf64_Verdef;
/* Legal values for vd_version (version revision). */
#定义 VER_DEF_NONE 0 /* No version */
#定义 VER_DEF_CURRENT 1 /* Current version */
#定义 VER_DEF_NUM 2 /* Given version number */
/* Legal values for vd_flags (version information flags). */
#定义 VER_FLG_BASE 0x1 /* Version definition of file itself */
#定义 VER_FLG_WEAK 0x2 /* Weak version identifier */
/* Versym symbol index values. */
#定义 VER_NDX_LOCAL 0 /* Symbol is local. */
#定义 VER_NDX_GLOBAL 1 /* Symbol is global. */
#定义 VER_NDX_LORESERVE 0xff00 /* Beginning of reserved entries. */
#定义 VER_NDX_ELIMINATE 0xff01 /* Symbol is to be eliminated. */
/* Auxiliary version information. */
类型定义 结构
{
Elf32_Word vda_name; /* Version or dependency names */
Elf32_Word vda_next; /* Offset in bytes to next verdaux
entry */
} Elf32_Verdaux;
类型定义 结构
{
Elf64_Word vda_name; /* Version or dependency names */
Elf64_Word vda_next; /* Offset in bytes to next verdaux
entry */
} Elf64_Verdaux;
/* Version dependency section. */
类型定义 结构
{
Elf32_Half vn_version; /* Version of structure */
Elf32_Half vn_cnt; /* Number of associated aux entries */
Elf32_Word vn_file; /* Offset of filename for this
dependency */
Elf32_Word vn_aux; /* Offset in bytes to vernaux array */
Elf32_Word vn_next; /* Offset in bytes to next verneed
entry */
} Elf32_Verneed;
类型定义 结构
{
Elf64_Half vn_version; /* Version of structure */
Elf64_Half vn_cnt; /* Number of associated aux entries */
Elf64_Word vn_file; /* Offset of filename for this
dependency */
Elf64_Word vn_aux; /* Offset in bytes to vernaux array */
Elf64_Word vn_next; /* Offset in bytes to next verneed
entry */
} Elf64_Verneed;
/* Legal values for vn_version (version revision). */
#定义 VER_NEED_NONE 0 /* No version */
#定义 VER_NEED_CURRENT 1 /* Current version */
#定义 VER_NEED_NUM 2 /* Given version number */
/* Auxiliary needed version information. */
类型定义 结构
{
Elf32_Word vna_hash; /* Hash value of dependency name */
Elf32_Half vna_flags; /* Dependency specific information */
Elf32_Half vna_other; /* Unused */
Elf32_Word vna_name; /* Dependency name string offset */
Elf32_Word vna_next; /* Offset in bytes to next vernaux
entry */
} Elf32_Vernaux;
类型定义 结构
{
Elf64_Word vna_hash; /* Hash value of dependency name */
Elf64_Half vna_flags; /* Dependency specific information */
Elf64_Half vna_other; /* Unused */
Elf64_Word vna_name; /* Dependency name string offset */
Elf64_Word vna_next; /* Offset in bytes to next vernaux
entry */
} Elf64_Vernaux;
/* Legal values for vna_flags. */
#定义 VER_FLG_WEAK 0x2 /* Weak version identifier */
/* Auxiliary vector. */
/* This vector is normally only used by the program interpreter. The
usual definition in an ABI supplement uses the name auxv_t. The
vector is not usually defined in a standard <elf.h> file, but it
can't hurt. We rename it to avoid conflicts. The sizes of these
types are an arrangement between the exec server and the program
interpreter, so we don't fully specify them here. */
类型定义 结构
{
uint32_t a_type; /* Entry type */
联合
{
uint32_t a_val; /* Integer value */
/* We use to have pointer elements added here. We cannot do that,
though, since it does not work when using 32-bit definitions
on 64-bit platforms and vice versa. */
} a_un;
} Elf32_auxv_t;
类型定义 结构
{
uint64_t a_type; /* Entry type */
联合
{
uint64_t a_val; /* Integer value */
/* We use to have pointer elements added here. We cannot do that,
though, since it does not work when using 32-bit definitions
on 64-bit platforms and vice versa. */
} a_un;
} Elf64_auxv_t;
/* Legal values for a_type (entry type). */
#定义 AT_NULL 0 /* End of vector */
#定义 AT_IGNORE 1 /* Entry should be ignored */
#定义 AT_EXECFD 2 /* File descriptor of program */
#定义 AT_PHDR 3 /* Program headers for program */
#定义 AT_PHENT 4 /* Size of program header entry */
#定义 AT_PHNUM 5 /* Number of program headers */
#定义 AT_PAGESZ 6 /* System page size */
#定义 AT_BASE 7 /* Base address of interpreter */
#定义 AT_FLAGS 8 /* Flags */
#定义 AT_ENTRY 9 /* Entry point of program */
#定义 AT_NOTELF 10 /* Program is not ELF */
#定义 AT_UID 11 /* Real uid */
#定义 AT_EUID 12 /* Effective uid */
#定义 AT_GID 13 /* Real gid */
#定义 AT_EGID 14 /* Effective gid */
#定义 AT_CLKTCK 17 /* Frequency of times() */
/* Some more special a_type values describing the hardware. */