📄 internal.h
字号:
/* Internal format of COFF object file data structures, for GNU BFD. This file is part of BFD, the Binary File Descriptor library. *//* First, make "signed char" work, even on old compilers. */#ifndef signed#ifndef __STDC__#define signed /**/#endif#endif/********************** FILE HEADER **********************/struct internal_filehdr { unsigned short f_magic; /* magic number */ unsigned short f_nscns; /* number of sections */ long f_timdat; /* time & date stamp */ long f_symptr; /* file pointer to symtab */ long f_nsyms; /* number of symtab entries */ unsigned short f_opthdr; /* sizeof(optional hdr) */ unsigned short f_flags; /* flags */};/* Bits for f_flags: * F_RELFLG relocation info stripped from file * F_EXEC file is executable (no unresolved external references) * F_LNNO line numbers stripped from file * F_LSYMS local symbols stripped from file * F_AR16WR file is 16-bit little-endian * F_AR32WR file is 32-bit little-endian * F_AR32W file is 32-bit big-endian * F_DYNLOAD rs/6000 aix: dynamically loadable w/imports & exports * F_SHROBJ rs/6000 aix: file is a shared object */#define F_RELFLG (0x0001)#define F_EXEC (0x0002)#define F_LNNO (0x0004)#define F_LSYMS (0x0008)#define F_AR16WR (0x0080)#define F_AR32WR (0x0100)#define F_AR32W (0x0200)#define F_DYNLOAD (0x1000)#define F_SHROBJ (0x2000)/********************** AOUT "OPTIONAL HEADER" **********************/struct internal_aouthdr { short magic; /* type of file */ short vstamp; /* version stamp */ unsigned long tsize; /* text size in bytes, padded to FW bdry*/ unsigned long dsize; /* initialized data " " */ unsigned long bsize; /* uninitialized data " " */ unsigned long entry; /* entry pt. */ unsigned long text_start; /* base of text used for this file */ unsigned long data_start; /* base of data used for this file */ /* i960 stuff */ unsigned long tagentries; /* number of tag entries to follow */ /* RS/6000 stuff */ unsigned long o_toc; /* address of TOC */ short o_snentry; /* section number for entry point */ short o_sntext; /* section number for text */ short o_sndata; /* section number for data */ short o_sntoc; /* section number for toc */ short o_snloader; /* section number for loader section */ short o_snbss; /* section number for bss */ short o_algntext; /* max alignment for text */ short o_algndata; /* max alignment for data */ short o_modtype; /* Module type field, 1R,RE,RO */ unsigned long o_maxstack; /* max stack size allowed. */};/********************** STORAGE CLASSES **********************/#define C_EFCN -1 /* physical end of function */#define C_NULL 0#define C_AUTO 1 /* automatic variable */#define C_EXT 2 /* external symbol */#define C_STAT 3 /* static */#define C_REG 4 /* register variable */#define C_EXTDEF 5 /* external definition */#define C_LABEL 6 /* label */#define C_ULABEL 7 /* undefined label */#define C_MOS 8 /* member of structure */#define C_ARG 9 /* function argument */#define C_STRTAG 10 /* structure tag */#define C_MOU 11 /* member of union */#define C_UNTAG 12 /* union tag */#define C_TPDEF 13 /* type definition */#define C_USTATIC 14 /* undefined static */#define C_ENTAG 15 /* enumeration tag */#define C_MOE 16 /* member of enumeration */#define C_REGPARM 17 /* register parameter */#define C_FIELD 18 /* bit field */#define C_AUTOARG 19 /* auto argument */#define C_LASTENT 20 /* dummy entry (end of block) */#define C_BLOCK 100 /* ".bb" or ".eb" */#define C_FCN 101 /* ".bf" or ".ef" */#define C_EOS 102 /* end of structure */#define C_FILE 103 /* file name */#define C_LINE 104 /* line # reformatted as symbol table entry */#define C_ALIAS 105 /* duplicate tag */#define C_HIDDEN 106 /* ext symbol in dmert public lib */ /* New storage classes for 80960 */ /* C_LEAFPROC is obsolete. Use C_LEAFEXT or C_LEAFSTAT */#define C_LEAFPROC 108 /* Leaf procedure, "call" via BAL */#define C_SCALL 107 /* Procedure reachable via system call */#define C_LEAFEXT 108 /* External leaf */#define C_LEAFSTAT 113 /* Static leaf */#define C_OPTVAR 109 /* Optimized variable */#define C_DEFINE 110 /* Preprocessor #define */#define C_PRAGMA 111 /* Advice to compiler or linker */#define C_SEGMENT 112 /* 80960 segment name */ /* New storage classes for RS/6000 */#define C_HIDEXT 107 /* Un-named external symbol */#define C_BINCL 108 /* Marks beginning of include file */#define C_EINCL 109 /* Marks ending of include file */ /* storage classes for stab symbols for RS/6000 */#define C_GSYM ((signed char)0x80)#define C_LSYM ((signed char)0x81)#define C_PSYM ((signed char)0x82)#define C_RSYM ((signed char)0x83)#define C_RPSYM ((signed char)0x84)#define C_STSYM ((signed char)0x85)#define C_TCSYM ((signed char)0x86)#define C_BCOMM ((signed char)0x87)#define C_ECOML ((signed char)0x88)#define C_ECOMM ((signed char)0x89)#define C_DECL ((signed char)0x8c)#define C_ENTRY ((signed char)0x8d)#define C_FUN ((signed char)0x8e)#define C_BSTAT ((signed char)0x8f)#define C_ESTAT ((signed char)0x90)/********************** SECTION HEADER **********************/struct internal_scnhdr { char s_name[8]; /* section name */ long s_paddr; /* physical address, aliased s_nlib */ long s_vaddr; /* virtual address */ long s_size; /* section size */ long s_scnptr; /* file ptr to raw data for section */ long s_relptr; /* file ptr to relocation */ long s_lnnoptr; /* file ptr to line numbers */ unsigned long s_nreloc; /* number of relocation entries */ unsigned long s_nlnno; /* number of line number entries*/ long s_flags; /* flags */#ifdef I960 long s_align; #endif};/* * s_flags "type" */#define STYP_REG (0x0000) /* "regular": allocated, relocated, loaded */#define STYP_DSECT (0x0001) /* "dummy": relocated only*/#define STYP_NOLOAD (0x0002) /* "noload": allocated, relocated, not loaded */#define STYP_GROUP (0x0004) /* "grouped": formed of input sections */#define STYP_PAD (0x0008) /* "padding": not allocated, not relocated, loaded */#define STYP_COPY (0x0010) /* "copy": for decision function used by field update; not allocated, not relocated, loaded; reloc & lineno entries processed normally */#define STYP_TEXT (0x0020) /* section contains text only */#define S_SHRSEG (0x0020) /* In 3b Update files (output of ogen), sections which appear in SHARED segments of the Pfile will have the S_SHRSEG flag set by ogen, to inform dufr that updating 1 copy of the proc. will update all process invocations. */#define STYP_DATA (0x0040) /* section contains data only */#define STYP_BSS (0x0080) /* section contains bss only */#define S_NEWFCN (0x0100) /* In a minimal file or an update file, a new function (as compared with a replaced function) */#define STYP_INFO (0x0200) /* comment: not allocated not relocated, not loaded */#define STYP_OVER (0x0400) /* overlay: relocated not allocated or loaded */#define STYP_LIB (0x0800) /* for .lib: same as INFO */#define STYP_MERGE (0x2000) /* merge section -- combines with text, data or bss sections only */#define STYP_REVERSE_PAD (0x4000) /* section will be padded with no-op instructions wherever padding is necessary and there is a word of contiguous bytes beginning on a word boundary. */#define STYP_LIT 0x8020 /* Literal data (like STYP_TEXT) *//********************** LINE NUMBERS **********************//* 1 line number entry for every "breakpointable" source line in a section. * Line numbers are grouped on a per function basis; first entry in a function * grouping will have l_lnno = 0 and in place of physical address will be the * symbol table index of the function name. */struct internal_lineno { union { long l_symndx; /* function name symbol index, iff l_lnno == 0*/ long l_paddr; /* (physical) address of line number */ } l_addr; unsigned long l_lnno; /* line number */};/********************** SYMBOLS **********************/#define SYMNMLEN 8 /* # characters in a symbol name */#define FILNMLEN 14 /* # characters in a file name */#define DIMNUM 4 /* # array dimensions in auxiliary entry */struct internal_syment { union { char _n_name[SYMNMLEN]; /* old COFF version */ struct { long _n_zeroes; /* new == 0 */ long _n_offset; /* offset into string table */ } _n_n; char *_n_nptr[2]; /* allows for overlaying */ } _n; long n_value; /* value of symbol */ short n_scnum; /* section number */ unsigned short n_flags; /* copy of flags from filhdr */ unsigned short n_type; /* type and derived type */ signed char n_sclass; /* storage class */ char n_numaux; /* number of aux. entries */};#define n_name _n._n_name#define n_zeroes _n._n_n._n_zeroes#define n_offset _n._n_n._n_offset/* Relocatable symbols have number of the section in which they are defined, or one of the following: */#define N_UNDEF ((short)0) /* undefined symbol */#define N_ABS ((short)-1) /* value of symbol is absolute */#define N_DEBUG ((short)-2) /* debugging symbol -- value is meaningless */#define N_TV ((short)-3) /* indicates symbol needs preload transfer vector */#define P_TV ((short)-4) /* indicates symbol needs postload transfer vector*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -