exeelf.h
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 774 行 · 第 1/3 页
H
774 行
#define PT_OS_O 7 // target os information
#define PT_RES_O 9 // read-only resource information
// note entry format
typedef struct {
unsigned_32 n_namesz; // length of name
unsigned_32 n_descsz; // length of descriptor
unsigned_32 n_type; // user defined "type" of the note
//char name[]; // variable length name
//unsigned_32 desc[]; // descriptors go here
} Elf_Note;
// note types (used in core files)
#define NT_PRSTATUS 1 // process status
#define NT_FPREGSET 2 // floating point registers
#define NT_PRPSINFO 3 // process state info
// dynamic segment entry information.
typedef struct {
Elf32_Sword d_tag;
union {
Elf32_Word d_val;
Elf32_Addr d_ptr;
} d_un;
} Elf32_Dyn;
// dynamic array tags
#define DT_NULL 0
#define DT_NEEDED 1 // name of a needed library
#define DT_PLTRELSZ 2 // size of reloc entries for PLT
#define DT_PLTGOT 3 // address with PLT or GOT
#define DT_HASH 4 // symbol hash table address
#define DT_STRTAB 5 // string table address
#define DT_SYMTAB 6 // symbol table address
#define DT_RELA 7 // address of reloc table with addends
#define DT_RELASZ 8 // size of the DT_RELA table
#define DT_RELAENT 9 // size of a DT_RELA entry
#define DT_STRSZ 10 // size of the string table
#define DT_SYMENT 11 // size of a symbol table entry
#define DT_SONAME 14 // shared object name
#define DT_REL 17 // address of reloc table without addends
#define DT_RELSZ 18 // size of the DT_REL table
#define DT_RELENT 19 // size of a DT_REL entry
#define DT_PLTREL 20 // type of reloc entry for PLT
#define DT_DEBUG 21 // for debugging information
#define DT_JMPREL 23 // reloc entries only with PLT
#define DT_EXPORT 0x60000001 // address of export table
#define DT_EXPORTSZ 0x60000002 // size of export table
#define DT_EXPENT 0x60000003 // size of export table entry
#define DT_IMPORT 0x60000004 // address of import table
#define DT_IMPORTSZ 0x60000005 // size of import table
#define DT_IMPENT 0x60000006 // size of import table entry
#define DT_IT 0x60000007 // init and term types for a DLL.
#define DT_ITPRTY 0x60000008 // relative priority of init and term to other functions
#define DT_INITTERM 0x60000009 // address of init and term function
#define DT_PPC_GOT 0x70000001 // address of Global Offset Table
#define DT_PPC_GOTSZ 0x70000002 // size of Global Offset Table
#define DT_PPC_PLTSZ 0x70000003 // size of Procedure Linkage Table
#define DT_LOPROC 0x70000000 // range of processor-defined tags
#define DT_HIPROC 0x7FFFFFFF
// Old dynamic tags. Readers should handle these, writers must use the above
#define DT_INIT_O 12 // address of initialization function
#define DT_FINI_O 13 // address of finialization function
#define DT_RPATH_O 15 // library search path
#define DT_SYMBOLIC_O 16 // affects dyn. linker's sym. resolution
#define DT_TEXTREL_O 22 // signal we might mod. a non-writable segment
#define DT_IT_O 24 // init and term types for a DLL.
#define DT_EXPORT_O 25 // address of export table
#define DT_EXPORTSZ_O 26 // size of export table
#define DT_IMPORT_O 27 // address of import table
#define DT_IMPORTSZ_O 28 // size of import table
#define DT_GOT_O 29 // address of Global Offset Table
#define DT_GOTSZ_O 30 // size of Global Offset Table
#define DT_PLTSZ_O 32 // size of Procedure Linkage Table
#define DT_ITPRTY_O 33 // relative priority of init and term to other functions
#define DT_LOUSER_O 0x60000000 // range of user-definable tags. will not
#define DT_HIUSER_O 0x6FFFFFFF // conflict with system-defined tags
// Ha Ha Ha!
// description of DT_IT tag:
// Describe type for initalization and termination of DLL
// Required if DT_INIT and DT_FINI also specified
#define ELF_32_IT_INIT(it) ((it) & 0x0f)
#define ELF_32_IT_TERM(it) (((it) >> 4) & 0x0f)
#define ELF_32_IT_INFO(i,t) (((i) & 0x0f)|(((t) & 0x0f) << 4))
#define IT_NONE 0 // no initialization or termination
#define IT_GLOBAL 1 // global init, term
#define IT_INSTANCE 2 // process init, term
#define IT_THREAD 3 // thread init, term
// DT_INITTERM function prototype
typedef unsigned long INITTERM ( unsigned long modhandle, unsigned long flag );
// elf segment flag bits
#define PF_X 0x1 // seg has execute permissions
#define PF_W 0x2 // seg has write permissions
#define PF_R 0x4 // seg has read permissions
#define PF_S 0x01000000 // segment is shared.
#define PF_MASKPROC 0xf0000000 // processor-specific flag mask
// operating system information
typedef struct {
Elf32_Word os_type;
Elf32_Word os_size;
} Elf32_Os;
#define EOS_NONE 0 // bad or unknown
#define EOS_PN 1 // IBM Microkernel personality neutral
#define EOS_SVR4 2 // UNIX System V Release 4
#define EOS_AIX 3 // IBM AIX
#define EOS_OS2 4 // IBM OS/2, 32 bit
#define EOS_NT 5 // Microsoft Windows NT, 32 bit
#define EOS_VMS 6 // DEC VMS/VAX
#define EOS_OS400 7 // IBM OS/400
#define EOS_NEXT 8 // NEXT
#define EOS_SYSTEM7 9 // Apple System 7
// OS/2-specific information
typedef struct {
unsigned char os2_sessiontype;
unsigned char os2_sessionflags;
unsigned char os2_reserved[14];
} Elf32_OS2Info;
// os2_sessiontype values
#define OS2_SES_NONE 0 // no session type. Only valid for DLL's
#define OS2_SES_FS 1 // Full Screen session.
#define OS2_SES_PM 2 // Presentation Manager session.
#define OS2_SES_VIO 3 // Windowed (character-mode) session
// import table entry
typedef struct {
Elf32_Word imp_ordinal;
Elf32_Word imp_name;
Elf32_Word imp_info;
Elf32_Word imp_reserved;
} Elf32_Import;
#define ELF32_IMP_TYPE(i) ((i) >> 24)
#define ELF32_IMP_DLL(i) ((i) & 0x00FFFFFF)
#define ELF32_IMP_INFO(t,d) (((t)<<24) | ((d) & 0x00FFFFFF)))
#define IMP_IGNORED 0 // This import entry to be ignored
#define IMP_STR_IDX 1 // Value is string table index to load module
#define IMP_DT_IDX 2 // Value is ref to DT_NEEDED in Dynamic Segment
// export table entry
typedef struct {
Elf32_Word exp_ordinal;
Elf32_Word exp_symbol;
Elf32_Word exp_name;
Elf32_Word exp_reserved;
} Elf32_Export;
// Resource header
#define RH_NIDENT 16
typedef struct {
unsigned char rh_ident[RH_NIDENT];
Elf32_Off rh_name;
Elf32_Word rh_itnum;
Elf32_Word rh_rhsize;
Elf32_Word rh_size;
Elf32_Off rh_strtab;
} Elf32_Rhdr;
// rh_ident field indices
#define ELFRESMAG0 '\002' // bytes of signature
#define ELFRESMAG1 'R' // bytes of signature
#define ELFRESMAG2 'E' // bytes of signature
#define ELFRESMAG3 'S' // bytes of signature
#define RH_MAG0 0 // signature bytes
#define RH_MAG1 1 // signature bytes
#define RH_MAG2 2 // signature bytes
#define RH_MAG3 3 // signature bytes
#define RH_CLASS 4 // class of resource collection
#define RH_DATA 5 // data encoding of resource collection
#define RH_VERSION 6 // version
#define RH_PAD 7 // start of padding bytes - set to 0
// contents of RH_CLASS field
#define RESCLASSNONE 0 // invalid class
#define RESCLASS32 2 // 32-bit architecture
#define RESCLASS64 3 // reserved for 64-bit architecture
// contents of RH_DATA field
#define RESDATANONE 0 // invalid data
#define RESDATA2LSB 1 // Little Endian data encoding
#define RESDATA2MSB 2 // Bit Endian data encoding
// contents of RH_VERSION field
#define RV_NONE 0 // invalid version
#define RV_CURRENT 1 // current version. will change in future.
// resource item
#define RI_NIDENT 4
typedef struct {
unsigned char ri_ident[RI_NIDENT];
Elf32_Word ri_type;
Elf32_Off ri_typename;
Elf32_Word ri_ordinal;
Elf32_Off ri_ordname;
Elf32_Off ri_data;
Elf32_Word ri_flags;
Elf32_Word ri_size;
Elf32_Word ri_reserved;
} Elf32_Ritem;
// ri_ident field indices
#define RI_VERSION 0 // version
#define RI_PAD 1 // start of padding bytes - set to 0
// contents of RI_VERSION field
#define IV_NONE 0 // invalid version
#define IV_CURRENT 1 // current version. will change in future
// demangle information structure
typedef struct {
Elf32_Word idm_dllname;
Elf32_Word idm_initparms;
} Elf32_Demangle;
// default library structure
typedef struct {
Elf32_Word lib_name;
} Elf32_Library;
#ifdef __cplusplus
};
#endif
#endif // _EXEELF_H_INCLUDED_
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?