kolibrios/contrib/media/updf/include/efmt.h

86 lines
2.7 KiB
C
Raw Normal View History

#ifndef __EFMT_H
#define __EFMT_H
#ifndef __PACKED__
#define __PACKED__ __attribute__((packed))
#endif
typedef struct
{
unsigned long magic __PACKED__;
unsigned char bitness __PACKED__;
unsigned char endian __PACKED__;
unsigned char elf_ver_1 __PACKED__;
unsigned char res[9] __PACKED__;
unsigned short file_type __PACKED__;
unsigned short machine __PACKED__;
unsigned long elf_ver_2 __PACKED__;
unsigned long entry_pt __PACKED__;
unsigned long phtab_offset __PACKED__;
unsigned long shtab_offset __PACKED__;
unsigned long flags __PACKED__;
unsigned short file_hdr_size __PACKED__;
unsigned short phtab_ent_size __PACKED__;
unsigned short num_phtab_ents __PACKED__;
unsigned short shtab_ent_size __PACKED__;
unsigned short num_sects __PACKED__;
unsigned short shstrtab_index __PACKED__;
} elf_file_t;
typedef struct
{
unsigned long sect_name __PACKED__;
unsigned long type __PACKED__;
unsigned long flags __PACKED__;
unsigned long virt_adr __PACKED__;
unsigned long offset __PACKED__;
unsigned long size __PACKED__;
unsigned long link __PACKED__;
unsigned long info __PACKED__;
unsigned long align __PACKED__;
unsigned long ent_size __PACKED__;
} elf_sect_t;
typedef struct
{
unsigned long adr __PACKED__;
unsigned char type __PACKED__;
unsigned long symtab_index:24 __PACKED__;
unsigned long addend __PACKED__;
} elf_reloc_t;
typedef struct
{
unsigned long name __PACKED__;
unsigned long value __PACKED__;
unsigned long size __PACKED__;
unsigned type:4 __PACKED__;
unsigned binding:4 __PACKED__;
unsigned char zero __PACKED__;
unsigned short section __PACKED__;
} elf_sym_t;
typedef struct
{
unsigned char * file, * sects,*bss,*symtab;
char * strtab;
unsigned long bss_sect_num,entry;
} exe_file_t;
int get_elf_section_name(exe_file_t * f,unsigned short sect_num,char * namebuf);
int get_elf_section_addr(exe_file_t * f,unsigned short sect_num,unsigned long * adr);
int get_elf_symbol_addr(exe_file_t * f,unsigned long i,
unsigned long * sym_val,unsigned short sect_num,
int (* lookup_fn)(char * symname,unsigned long * val));
int do_elf_relocation(exe_file_t * f,elf_reloc_t * reloc,
unsigned short sect_num,unsigned long symtab_sect_num,
int (* sym_lookup_fn)(char * symname,unsigned long * val),int ignore_ext);
int get_elf_section_index(exe_file_t * f,char * sect_name,unsigned long * i);
int elf_load_from_mem(exe_file_t * f);
int relocate_elf_file(exe_file_t * f,
int (* sym_lookup_fn)(char * symname,unsigned long * val),int ignore_ext);
int get_elf_symbol_value(exe_file_t * f,char * symname,unsigned long * symval);
#endif