00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <ubixos/elf.h>
00031
00032 const struct {
00033 char *elfTypeName;
00034 uInt32 id;
00035 } elfType[] = {
00036 { "ET_NONE", 0 },
00037 { "ET_REL", 1 },
00038 { "ET_EXEC", 2 },
00039 { "ET_DYN", 3 },
00040 { "ET_CORE", 4 },
00041 { "ET_LOPROC", 0xff00 },
00042 { "ET_HIPROC", 0xffff },
00043 };
00044
00045 const struct {
00046 char *phTypeName;
00047 uInt32 id;
00048 } elfPhType[] = {
00049 { "PT_NULL", 0 },
00050 { "PT_LOAD", 1 },
00051 { "PT_DYNAMIC", 2 },
00052 { "PT_INTERP", 3 },
00053 { "PT_NOTE", 4 },
00054 { "PT_SHLIB", 5 },
00055 { "PT_PHDR", 6 },
00056 { "PT_LOPROC", 0x70000000 },
00057 { "PT_HIPROC", 0x7fffffff },
00058 };
00059
00060 const struct {
00061 char *shTypeName;
00062 uInt32 id;
00063 } elfShType[] = {
00064 {"SHT_NULL", 0 },
00065 {"SHT_PROGBITS", 1 },
00066 {"SHT_SYMTAB", 2 },
00067 {"SHT_STRTAB", 3 },
00068 {"SHT_RELA", 4 },
00069 {"SHT_HASH", 5 },
00070 {"SHT_DYNAMIC", 6 },
00071 {"SHT_NOTE", 7 },
00072 {"SHT_NOBITS", 8 },
00073 {"SHT_REL", 9 },
00074 {"SHT_SHLIB", 10 },
00075 {"SHT_DYNSYM", 11 },
00076 };
00077
00078 const struct {
00079 char *relTypeName;
00080 uInt32 id;
00081 } elfRelType[] = {
00082 {"R_386_NONE", 0 },
00083 {"R_386_32", 1 },
00084 {"R_386_PC32", 2 },
00085 {"R_386_GOT32", 3 },
00086 {"R_386_PLT32", 4 },
00087 {"R_386_COPY", 5 },
00088 {"R_386_GLOB_DAT", 6 },
00089 {"R_386_JMP_SLOT", 7 },
00090 {"R_386_RELATIVE", 8 },
00091 {"R_386_GOTOFF", 9 },
00092 {"R_386_GOTPC", 10 },
00093 };
00094
00095
00096 char *elfGetShType(int shType) {
00097 return((char *)elfShType[shType].shTypeName);
00098 }
00099
00100 char *elfGetPhType(int phType) {
00101 return((char *)elfPhType[phType].phTypeName);
00102 }
00103
00104 char *elfGetRelType(int relType) {
00105 return((char *)elfRelType[relType].relTypeName);
00106 }
00107
00108
00109
00110
00111