4 * Created on: 2011/04/25
8 //
\8cÃ
\82¢
\83\
\81[
\83X
\83R
\81[
\83h
\82Å
\82·
\81B
11 #include "3069f_sci.h"
14 char* gen_xval(unsigned long val, int column)
20 // for(i = 0; i < 9; i++)
23 p = buf + sizeof buf - 1;
31 *(p--) = "0123456789abcdef"[val & 0x0f];
38 static int elf_check(struct elf_header *header)
40 if(memcmp(header->id.magic, "\x7f" "ELF", 4))
43 //
\83w
\83b
\83_
\8fî
\95ñ
\83`
\83F
\83b
\83N
44 if(header->id.class != 1) return -1; // ELF32
45 if(header->id.format != 2) return -1; // Big endian
46 if(header->id.version != 1) return -1; // version 1
47 if(header->type != 2) return -1; // Exe file
48 if(header->version != 1) return -1; // version 1
50 // H8
\83A
\81[
\83L
\83e
\83N
\83`
\83\83 Exe file
51 if((header->arch != 46) && (header->arch != 47)) return -1;
56 // elf
\82ðRAM
\82Ö
\93W
\8aJ
\82·
\82é
57 char* elf_develop(char* p)
59 struct elf_header* header;
60 header = (struct elf_header*) p;
61 struct elf_program_header *program;
65 sci_write_str(SCI_NO_1, "It's not ELF...\r\n");
69 sci_write_str(SCI_NO_1, "It's ELF Data!!\r\n");
72 sci_write_str(SCI_NO_1, "EntryPoint >>> ");
73 sci_write_str(SCI_NO_1, gen_xval(header->entry_point, 8));
76 for (i = 0; i < header->program_header_num; i++)
79 program = (struct elf_program_header*) ((char*) header
80 + header->program_header_offset + header->program_header_size
83 sci_write_str(SCI_NO_1, "\r\noffset -> ");
84 sci_write_str(SCI_NO_1, gen_xval(program->offset, 6));
85 sci_write_str(SCI_NO_1, "\r\nvirtual_addr -> ");
86 sci_write_str(SCI_NO_1, gen_xval(program->virtual_addr, 8));
87 sci_write_str(SCI_NO_1, "\r\nphysical_addr -> ");
88 sci_write_str(SCI_NO_1, gen_xval(program->physical_addr, 8));
89 sci_write_str(SCI_NO_1, "\r\nfile_size -> ");
90 sci_write_str(SCI_NO_1, gen_xval(program->file_size, 5));
91 sci_write_str(SCI_NO_1, "\r\nmemory_size -> ");
92 sci_write_str(SCI_NO_1, gen_xval(program->memory_size, 5));
93 sci_write_str(SCI_NO_1, "\r\nflags -> ");
94 sci_write_str(SCI_NO_1, gen_xval(program->flags, 2));
95 sci_write_str(SCI_NO_1, "\r\nalign -> ");
96 sci_write_str(SCI_NO_1, gen_xval(program->align, 2));
97 sci_write_str(SCI_NO_1, "\r\n");
99 //
\83\8d\81[
\83h
\89Â
\94\
\82©
\82Ç
\82¤
\82©
100 if (program->type != 1)
102 sci_write_str(SCI_NO_1, "can not load...\r\n");
106 sci_write_str(SCI_NO_1, "loading...\r\n");
109 sci_write_str(SCI_NO_1, "program headers devloping...\r\n");
110 //
\83\81\83\82\83\8a\82Ö
\83Z
\83N
\83V
\83\87\83\93\93W
\8aJ
111 memcpy((char*) program->physical_addr, (char*) header + program->offset, program->file_size);
112 sci_write_str(SCI_NO_1, "program headers devloped...\r\n");
114 sci_write_str(SCI_NO_1, "initing...\r\n");
115 //
\83\81\83\82\83\8a\83T
\83C
\83Y
\82Æ
\83t
\83@
\83C
\83\8b\83T
\83C
\83Y
\82Ì
\8c\84\8aÔ
\82ð0
\82Å
\96\84\82ß
\82é
116 memset((char*) program->physical_addr + program->file_size, 0, program->memory_size - program->file_size);
117 sci_write_str(SCI_NO_1, "inited...\r\n");
121 //
\83w
\83b
\83_
\81[
\82Ì
\83G
\83\93\83g
\83\8a\81[
\83|
\83C
\83\93\83g
\82ª
\95K
\82¸
\91¶
\8dÝ
\82·
\82é
\82í
\82¯
\82Å
\82Í
\82È
\82¢
\82Ì
\82Å
\81A
\82±
\82Ì
\83v
\83\8d\83O
\83\89\83\80\82ÍNG
122 return (char*)header->entry_point;
125 int elf_analysis(char* p)
127 struct elf_header* header;
129 header = (struct elf_header*) p;
132 for (i = 0; i < header->section_header_num; i++)
135 struct elf_program_header *program =
136 (struct elf_program_header*) ((char*) header
137 + header->program_header_offset
138 + header->program_header_size * i);
140 //
\83\8d\81[
\83h
\89Â
\94\
\82©
\82Ç
\82¤
\82©
141 if (program->type != 1)
149 // sci_write(SCI1, );
152 int elf_read(char* p)
154 struct elf_header* header;
156 header = (struct elf_header*)p;
158 // ELF
\82©
\83`
\83F
\83b
\83N
159 if(elf_check(header))