Changeset 446
- Timestamp:
- Jul 21, 2020, 8:38:44 AM (3 years ago)
- Location:
- EcnlProtoTool/trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/ntshell/ntshell/usrcmd.h
r441 r446 43 43 } cmd_table_t; 44 44 45 typedef struct 46 { 47 const cmd_table_t *table; 48 int count; 49 } cmd_table_info_t; 50 45 51 int usrcmd_cd(int argc, char **argv); 46 52 int usrcmd_ls(int argc, char **argv); -
EcnlProtoTool/trunk/ntshell/src/main.c
r443 r446 125 125 static const Elf32_Ehdr *load_elf(const uint8_t *file); 126 126 static void execute_elf(const Elf32_Ehdr *, long *args); 127 static void read_cmdlist_from_elf(const Elf32_Ehdr *Ehdr); 127 128 static int usrcmd_ntopt_callback(long *args, void *extobj); 128 129 #ifndef NTSHELL_NO_SOCKET … … 527 528 {"info", "This is a description text string for info command.", usrcmd_info}, 528 529 {"exit", "Exit Natural Tiny Shell", usrcmd_exit}, 530 {"help", "This is a description text string for help command.", usrcmd_help}, 529 531 }; 530 cmd_table_info_t cmd_table_info = { cmdlist, sizeof(cmdlist) / sizeof(cmdlist[0]) }; 532 const cmd_table_info_t cmd_table_info = { cmdlist, sizeof(cmdlist) / sizeof(cmdlist[0]) }; 533 cmd_table_info_t elf_cmd_table_info; 531 534 532 535 static int usrcmd_ntopt_callback(long *args, void *extobj) … … 540 543 541 544 if (strcmp((const char *)args[1], "help") == 0) { 545 found = 1; 542 546 result = usrcmd_help(args[0], (char **)&args[1]); 543 547 } … … 567 571 int usrcmd_help(int argc, char **argv) 568 572 { 569 const cmd_table_t *p = cmd_table_info.table; 570 for (int i = 0; i < cmd_table_info.count; i++) { 571 printf(p->cmd); 572 printf("\t:"); 573 puts(p->desc); 574 p++; 573 const cmd_table_t *p, *q; 574 const Elf32_Ehdr *elf = load_elf((const uint8_t *)0x18200000); 575 if (elf != NULL) { 576 read_cmdlist_from_elf(elf); 577 } 578 else { 579 elf_cmd_table_info.count = 0; 580 } 581 p = cmd_table_info.table; 582 for (int i = 0; i < cmd_table_info.count - 3; i++, p++) { 583 printf("%s\t:%s\n", p->cmd, p->desc); 584 } 585 p = elf_cmd_table_info.table; 586 for (int i = 0; i < elf_cmd_table_info.count; i++, p++) { 587 printf("%s\t:%s\n", p->cmd, p->desc); 588 } 589 p = &cmd_table_info.table[cmd_table_info.count - 3]; 590 for (int i = cmd_table_info.count - 3; i < cmd_table_info.count; i++, p++) { 591 printf("%s\t:%s\n", p->cmd, p->desc); 575 592 } 576 593 return 0; … … 700 717 Shdr.sh_size -= Shdr.sh_addr; 701 718 702 char *name;703 if (Shdr.sh_name > 0) {704 name = (char *)&file[StringShdr.sh_offset + Shdr.sh_name];705 }706 else {707 name = NULL;708 }709 710 719 if ((Shdr.sh_flags & SHF_ALLOC) == 0) { 711 720 // skip … … 730 739 ((elf_entry_t)Ehdr->e_entry)(args); 731 740 } 741 742 void read_cmdlist_from_elf(const Elf32_Ehdr *Ehdr) 743 { 744 const uint8_t *file = (const uint8_t *)Ehdr; 745 Elf32_Shdr StringShdr; 746 memcpy(&StringShdr, &file[Ehdr->e_shoff + (Ehdr->e_shstrndx * Ehdr->e_shentsize)], sizeof(StringShdr)); 747 748 if (Ehdr->e_shoff > 0) { 749 Elf32_Shdr Shdr; 750 for (int i = 0; i < Ehdr->e_shnum; i++) { 751 memcpy(&Shdr, (Elf32_Shdr *)&file[Ehdr->e_shoff + (i * Ehdr->e_shentsize)], sizeof(Elf32_Shdr)); 752 Shdr.sh_size -= Shdr.sh_addr; 753 754 char *name; 755 if (Shdr.sh_name > 0) { 756 name = (char *)&file[StringShdr.sh_offset + Shdr.sh_name]; 757 } 758 else { 759 name = NULL; 760 } 761 762 if ((name != NULL) && (strcmp(name, ".cmdlist") == 0)) { 763 elf_cmd_table_info.table = (const cmd_table_t *)Shdr.sh_addr; 764 elf_cmd_table_info.count = Shdr.sh_size / sizeof(cmd_table_t); 765 } 766 } 767 } 768 } -
EcnlProtoTool/trunk/ntshell/src/main.h
r443 r446 83 83 } task_base_t; 84 84 85 typedef struct 86 { 87 const cmd_table_t *table; 88 int count; 89 } cmd_table_info_t; 90 91 extern cmd_table_info_t cmd_table_info; 85 extern const cmd_table_info_t cmd_table_info; 92 86 93 87 /* ntshellの初期化 */ -
EcnlProtoTool/trunk/prototool/.project
r444 r446 10 10 <project>ntshell</project> 11 11 <project>onigmo-6.1.3</project> 12 <project>openssl-1.1.0e</project>13 12 <project>tcc-0.9.27</project> 14 13 <project>zlib-1.2.11</project> 15 14 </projects> 16 15 <buildSpec> 16 <buildCommand> 17 <name>org.eclipse.xtext.ui.shared.xtextBuilder</name> 18 <arguments> 19 </arguments> 20 </buildCommand> 17 21 <buildCommand> 18 22 <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name> … … 32 36 <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature> 33 37 <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature> 38 <nature>org.eclipse.xtext.ui.shared.xtextNature</nature> 34 39 </natures> 35 40 </projectDescription> -
EcnlProtoTool/trunk/prototool/src/elf.c
r443 r446 38 38 #include <string.h> 39 39 #include <elf.h> 40 #include <ntshell/usrcmd.h> 41 42 extern int mrbc_main(int argc, char **argv); 43 extern int mrdb_main(int argc, char **argv); 44 extern int mruby_main(int argc, char **argv); 45 extern int mirb_main(int argc, char **argv); 46 extern int curl_main(int argc, char **argv); 47 extern int tcc_main(int argc, char **argv); 48 extern int vi_main(int argc, char **argv); 49 extern int openssl_main(int argc, char *argv[]); 50 extern int onitest_main(int argc, char **argv); 51 extern int tcp_echo_main(int argc, char **argv); 52 53 static const cmd_table_t cmdlist[] = { 54 {"mrbc", "mruby compiler executable", mrbc_main}, 55 {"mrdb","mruby debugger command", mrdb_main}, 56 {"mruby","mruby command", mruby_main}, 57 {"mirb", "Embeddable Interactive Ruby Shell", mirb_main}, 58 {"curl", "Command lines or scripts to transfer data", curl_main}, 59 {"tcc", "Tiny C compiler", tcc_main}, 60 {"vi", "Text editor", vi_main}, 61 {"openssl", "Cryptography and SSL/TLS Toolkit", openssl_main}, 62 {"onitest", "Onigumo Test", onitest_main}, 63 {"tcp_echo", "TCP echo server/client", tcp_echo_main}, 64 }; 65 const cmd_table_info_t cmd_table_info = { &cmdlist, sizeof(cmdlist) / sizeof(cmdlist[0]) }; 40 66 41 67 #define FVECT_SECT __attribute__ ((section (".proginf"))) … … 50 76 Elf32_Ehdr ehdr; 51 77 Elf32_Phdr phdr[3]; 52 Elf32_Shdr shdr[ 4];78 Elf32_Shdr shdr[5]; 53 79 Elf32_Shdr str_shdr; 54 char shstrtab[sizeof("\0.text\0.rodata\0.data\0.bss\0. shstrtab")];80 char shstrtab[sizeof("\0.text\0.rodata\0.data\0.bss\0.cmdlist\0.shstrtab")]; 55 81 } TProgInf; 56 82 … … 152 178 .sh_addralign = (Elf32_Word)8, 153 179 .sh_entsize = (Elf32_Word)0, 180 }, 181 { 182 .sh_name = (Elf32_Word)26, 183 .sh_type = (Elf32_Word)SHT_PROGBITS, 184 .sh_flags = (Elf32_Word)(SHF_ALLOC), 185 .sh_addr = (Elf32_Addr)&cmdlist, 186 .sh_offset = (Elf32_Off)&cmdlist/* - (Elf32_Off)&ProgInf*/, 187 .sh_size = (Elf32_Word)&cmdlist[sizeof(cmdlist) / sizeof(cmdlist[0])]/* - (Elf32_Off)&cmdlist*/, 188 .sh_link = (Elf32_Word)0, 189 .sh_info = (Elf32_Word)0, 190 .sh_addralign = (Elf32_Word)8, 191 .sh_entsize = (Elf32_Word)0, 154 192 } 155 193 }, 156 194 { 157 .sh_name = (Elf32_Word) 26,195 .sh_name = (Elf32_Word)35, 158 196 .sh_type = (Elf32_Word)SHT_STRTAB, 159 197 .sh_flags = (Elf32_Word)0, … … 166 204 .sh_entsize = (Elf32_Word)0, 167 205 }, 168 "\0.text\0.rodata\0.data\0.bss\0. shstrtab"206 "\0.text\0.rodata\0.data\0.bss\0.cmdlist\0.shstrtab" 169 207 }; -
EcnlProtoTool/trunk/prototool/src/main.c
r443 r446 78 78 }; 79 79 80 typedef struct 81 { 82 cmd_table_t *table; 83 cmd_table_t *count; 84 } cmd_table_info_t; 85 86 extern int mrbc_main(int argc, char **argv); 87 extern int mrdb_main(int argc, char **argv); 88 extern int mruby_main(int argc, char **argv); 89 extern int mirb_main(int argc, char **argv); 90 extern int curl_main(int argc, char **argv); 91 extern int tcc_main(int argc, char **argv); 92 extern int vi_main(int argc, char **argv); 93 extern int openssl_main(int argc, char *argv[]); 94 extern int onitest_main(int argc, char **argv); 95 extern int tcp_echo_main(int argc, char **argv); 96 extern int echo_client_main(int argc, char **argv); 97 extern int mrdb_break(void); 98 99 static const cmd_table_t cmdlist[] = { 100 {"mrbc", "mruby compiler executable", mrbc_main}, 101 {"mrdb","mruby debugger command", mrdb_main}, 102 {"mruby","mruby command", mruby_main}, 103 {"mirb", "Embeddable Interactive Ruby Shell", mirb_main}, 104 {"curl", "Command lines or scripts to transfer data", curl_main}, 105 {"tcc", "Tiny C compiler", tcc_main}, 106 {"vi", "Text editor", vi_main}, 107 {"openssl", "Cryptography and SSL/TLS Toolkit", openssl_main}, 108 {"onitest", "Onigumo Test", onitest_main}, 109 {"tcp_echo", "TCP echo server/client", tcp_echo_main}, 110 {"help", "This is a description text string for help command.", usrcmd_help}, 111 }; 112 cmd_table_info_t cmd_table_info = { &cmdlist, sizeof(cmdlist) / sizeof(cmdlist[0]) }; 80 extern const cmd_table_info_t cmd_table_info; 113 81 114 82 int echonet = 1; … … 199 167 printf("tcp_echo -c ipaddr port\n"); 200 168 201 return 0;202 }203 204 int usrcmd_help(int argc, char **argv)205 {206 const cmd_table_t *p = cmd_table_info.table;207 for (int i = 0; i < cmd_table_info.count; i++) {208 printf(p->cmd);209 printf("\t:");210 printf(p->desc);211 printf("\n");212 p++;213 }214 169 return 0; 215 170 }
Note:
See TracChangeset
for help on using the changeset viewer.