OSDN Git Service

projects clean up 1
[pinoc/pinoc.git] / pinoc_hew / pinoc_hew / elf.h
diff --git a/pinoc_hew/pinoc_hew/elf.h b/pinoc_hew/pinoc_hew/elf.h
new file mode 100644 (file)
index 0000000..f610bd0
--- /dev/null
@@ -0,0 +1,116 @@
+#ifndef _ELF_H_
+#define _ELF_H_
+
+
+// \8fC\90³BSD\83\89\83C\83Z\83\93\83X\8eg\97p
+
+//Elf32_Addr   32bit\95\84\8d\86\96³\82µ\90®\90\94
+//Elf32_Half   16bit\95\84\8d\86\96³\82µ\90®\90\94
+//Elf32_Off            32bit\95\84\8d\86\96³\82µ\90®\90\94
+//Elf32_Sword  32bit\95\84\8d\86\95t\82«\90®\90\94
+//Elf32_Word   32bit\95\84\8d\86\96³\82µ\90®\90\94
+//
+//Elf64_Addr   64bit\95\84\8d\86\96³\82µ\90®\90\94
+//Elf64_Half   16bit\95\84\8d\86\96³\82µ\90®\90\94
+//Elf64_Off            64bit\95\84\8d\86\96³\82µ\90®\90\94
+//Elf64_Sword  32bit\95\84\8d\86\95t\82«\90®\90\94
+//Elf64_Word   32bit\95\84\8d\86\96³\82µ\90®\90\94
+//Elf64_Xword  64bit\95\84\8d\86\96³\82µ\90®\90\94
+//Elf64_Sxword 64bit\95\84\8d\86\95t\82«\90®\90\94
+
+
+/********************************************************************************
+       ELF\83w\83b\83_
+********************************************************************************/
+// 52byte
+struct Elf32_Ehdr {
+   unsigned char       chare_ident[16];/* 16byte\82Ì\83}\83W\83b\83N\83R\81[\83h */
+   unsigned short      e_type;                 /* \8dÄ\94z\92u\89Â\94\\82â\8eÀ\8ds\89Â\94\\93\99\82ÌELF\82Ì\8c`\8e®\82ð\95\\82·\81B */
+   unsigned short   e_machine;         /* \83t\83@\83C\83\8b\82Å\97v\8b\81\82³\82ê\82é\83A\81[\83L\83e\83N\83`\83\83 */
+   unsigned long    e_version;         /* ELF\83t\83H\81[\83}\83b\83g\82Ì\83o\81[\83W\83\87\83\93\82Å\8c»\8dÝ\82Í1 */
+   unsigned long    e_entry;           /* \83v\83\8d\83O\83\89\83\80\82Ì\83G\83\93\83g\83\8a\83|\83C\83\93\83g\81B\8ew\92è\96³\82µ\82È\82ç0\81B */
+   unsigned long    e_phoff;           /* \83v\83\8d\83O\83\89\83\80\83w\83b\83_\83e\81[\83u\83\8b\82Ì\83t\83@\83C\83\8b\90æ\93ª\82©\82ç\82Ì\83I\83t\83Z\83b\83g */
+   unsigned long    e_shoff;           /* \8eÀ\8ds\8e\9e\82É\82Í\8eg\82í\82ê\82È\82¢ */
+   unsigned long    e_flags;           /* \83v\83\8d\83Z\83b\83T\8cÅ\97L\82Ì\83t\83\89\83O */
+   unsigned short   e_ehsize;          /* ELF\83w\83b\83_\82Ì\83T\83C\83Y */
+   unsigned short   e_phentsize;       /* \83v\83\8d\83O\83\89\83\80\83w\83b\83_\83e\81[\83u\83\8b\82Ì1\97v\91f\82 \82½\82è\82Ì\83T\83C\83Y */
+   unsigned short   e_phnum;           /* \83v\83\8d\83O\83\89\83\80\83w\83b\83_\83e\81[\83u\83\8b\82Ì\97v\91f\90\94 */
+   unsigned short   e_shentsize;       /* \8eÀ\8ds\8e\9e\82É\82Í\8eg\82í\82ê\82È\82¢ */
+   unsigned short   e_shnum;           /* \8eÀ\8ds\8e\9e\82É\82Í\8eg\82í\82ê\82È\82¢ */
+   unsigned short   e_shstrndx;                /* \8eÀ\8ds\8e\9e\82É\82Í\8eg\82í\82ê\82È\82¢ */
+};
+
+// 64byte
+//struct Elf64_Ehdr {
+//   unsigned char e_ident[16];
+//   unsigned short    e_type;
+//   unsigned short    e_machine;
+//   unsigned long    e_version;
+//   unsigned long long    e_entry;
+//   unsigned long long     e_phoff;
+//   unsigned long long     e_shoff;
+//   unsigned long    e_flags;
+//   unsigned short    e_ehsize;
+//   unsigned short    e_phentsize;
+//   unsigned short    e_phnum;
+//   unsigned short    e_shentsize;
+//   unsigned short    e_shnum;
+//   unsigned short    e_shstrndx;
+//};
+
+/********************************************************************************
+       \83v\83\8d\83O\83\89\83\80\83w\83b\83_\83e\81[\83u\83\8b
+********************************************************************************/
+enum {
+   PT_NULL,    /* \8eg\82í\82ê\82È\82¢\83G\83\93\83g\83\8a\82Å\81A\91¼\82Ì\83\81\83\93\83o\82Ì\92l\82Ì\88Ó\96¡\82Í\96¢\92è\8b` */
+   PT_LOAD,    /* \8eÀ\8ds\8e\9e\82É\83\8d\81[\83h\82³\82ê\82é\83Z\83O\83\81\83\93\83g */
+   PT_DYNAMIC, /* \93®\93I\8d\\91¢\91Ì\94z\97ñ\82ð\95Û\8e\9d\82·\82é\83Z\83O\83\81\83\93\83g */
+   PT_INTERP,  /* \83t\83@\83C\83\8b\82Ì\89ð\8eß\82É\8eg\82í\82ê\82é\83C\83\93\83^\83v\83\8a\83^\82Ì\83p\83X\82ð\95Û\8e\9d\82·\82é\83Z\83O\83\81\83\93\83g */
+   PT_NOTE,    /* \83t\83@\83C\83\8b\82Ì\89ð\8eß\82É\82Í\8eg\82í\82ê\82È\82¢\8fî\95ñ\82ð\95Û\8e\9d\82·\82é\83Z\83O\83\81\83\93\83g */
+   PT_SHLIB,   /* \97\\96ñ */
+   PT_PHDR,    /* \83v\83\8d\83O\83\89\83\80\83w\83b\83_\83e\81[\83u\83\8b\81i\83v\83\8d\83O\83\89\83\80\82Ì\83\81\83\82\83\8a\83C\83\81\81[\83W\82Ì\88ê\95\94\82Å\82 \82é\8fê\8d\87\82Ì\82Ý\91\8dÝ\81j */
+   PT_TLS,     /* \83X\83\8c\83b\83h\8bÇ\8f\8a\8bL\89¯\97Ì\88æ\82Ì\83e\83\93\83v\83\8c\81[\83g */
+
+   PT_LOOS = 0x60000000,
+   /* OS\8cÅ\97L\82Ì\83Z\83}\83\93\83e\83B\83N\83X\82Ì\88×\82É\97\\96ñ\82³\82ê\82½\97Ì\88æ */
+   PT_HIOS = 0x6fffffff,
+
+   PT_LOPROC = 0x70000000,
+   /* \83v\83\8d\83Z\83b\83T\8cÅ\97L\82Ì\83Z\83}\83\93\83e\83B\83N\83X\82Ì\88×\82É\97\\96ñ\82³\82ê\82½\97Ì\88æ */
+   PT_HIPROC = 0x7fffffff
+};
+
+// 32byte
+struct Elf32_Phdr {
+       unsigned long p_type;   /* \83G\83\93\83g\83\8a\82Ì\83^\83C\83v */
+       unsigned long  p_offset; /* \91Î\89\9e\82·\82é\83Z\83O\83\81\83\93\83g\82Ì\83t\83@\83C\83\8b\90æ\93ª\82©\82ç\82Ì\83I\83t\83Z\83b\83g */
+       unsigned long p_vaddr;  /* \83\81\83\82\83\8a\8fã\82Å\82Ì\83Z\83O\83\81\83\93\83g\82Ì\91æ\88ê\83o\83C\83g\82Ì\89¼\91z\83A\83h\83\8c\83X */
+       unsigned long p_paddr;  /* \95¨\97\9d\94Ô\92n\8ew\92è\82ª\93K\90Ø\82È\83V\83X\83e\83\80\82Ì\88×\82É\97\\96ñ\81B */
+       unsigned long p_filesz; /* \91Î\89\9e\82·\82é\83Z\83O\83\81\83\93\83g\82Ì\83t\83@\83C\83\8b\82Å\82Ì\83T\83C\83Y\81B0\82à\89Â\81B */
+       unsigned long p_memsz;  /* \91Î\89\9e\82·\82é\83Z\83O\83\81\83\93\83g\82Ì\83\81\83\82\83\8a\8fã\82É\93W\8aJ\82³\82ê\82½\8e\9e\82Ì\83T\83C\83Y\81B0\82à\89Â\81B */
+       unsigned long p_flags;  /* \91Î\89\9e\82·\82é\83Z\83O\83\81\83\93\83g\82É\93K\90Ø\82È\83t\83\89\83O\81B */
+       unsigned long p_align;  /* p_offset\82Æp_vaddr\82ð\82±\82Ì\92l\82Å\8a\84\82Á\82½\97]\82è\82Í\93\99\82µ\82¢ */
+       struct Elf32_Phdr* next;
+};
+
+// 56byte
+//struct Elf64_Phdr {
+//     unsigned long  p_type;
+//     unsigned long  p_flags;
+//     unsigned long long   p_offset;
+//     unsigned long long  p_vaddr;
+//     unsigned long long  p_paddr;
+//     unsigned long long p_filesz;
+//     unsigned long long p_memsz;
+//     unsigned long long p_align;
+//     struct Elf64_Phdr* next;
+//};
+
+
+
+void elf_status();
+int elf_check(struct Elf32_Ehdr* buff);
+int elf_init(char* buff);
+void* elf_devlop(char* buff);
+
+#endif