int find_name(pid_t pid, const char *name, const char *libn, unsigned long *addr) { struct mm mm[1000] = { 0 }; unsigned long libcaddr; int nmm; char libc[1024] = { 0 }; symtab_t s; if (0 > load_memmap(pid, mm, &nmm)) { ALOGD("cannot read memory map\n"); return -1; } if (0 > find_libname((char *) libn, (char *) libc, sizeof(libc), &libcaddr, mm, nmm)) { ALOGD("cannot find lib: %s\n", libn); return -1; } //ALOGD("lib: >%s<\n", libc) s = load_symtab(libc); if (!s) { ALOGD("cannot read symbol table\n"); return -1; } if (0 > lookup_func_sym(s, (char *) name, addr)) { ALOGD("cannot find function: %s\n", name); return -1; } *addr += libcaddr; return 0; }
static int find_name(pid_t pid, char *name, unsigned long *addr) { struct mm mm[1000]; unsigned long libcaddr; int nmm; char libc[256]; symtab_t s; if (0 > load_memmap(pid, mm, &nmm)) { printf("cannot read memory map\n"); return -1; } if (0 > find_libc(libc, sizeof(libc), &libcaddr, mm, nmm)) { printf("cannot find libc\n"); return -1; } s = load_symtab(libc); if (!s) { printf("cannot read symbol table\n"); return -1; } if (0 > lookup_func_sym(s, name, addr)) { printf("cannot find %s\n", name); return -1; } *addr += libcaddr; return 0; }
int find_name(pid_t pid, char *name, char *libn, unsigned long *addr) { struct mm mm[250]; unsigned long libcaddr; int nmm; char libc[256]; symtab_t s; int load_memmap_return; load_memmap_return = load_memmap(pid, mm, &nmm); if (0 > load_memmap_return) { //printf("cannot read memory map\n"); return load_memmap_return; } if (0 > find_libname(libn, libc, sizeof(libc), &libcaddr, mm, nmm)) { log("cannot find libc\n"); return -2; } s = load_symtab(libc); if (!s) { //printf("cannot read symbol table\n"); return -3; } if (0 > lookup_func_sym(s, name, addr)) { //printf("cannot find %s\n", name); return -4; } *addr += libcaddr; return 0; }
int find_name(pid_t pid, char *name, char *libn, unsigned long *addr) { struct mm mm[250]; unsigned long libcaddr; int nmm; char libc[512]; symtab_t s; int load_memmap_return; int tmp; load_memmap_return = load_memmap(pid, mm, &nmm); if (0 > load_memmap_return) { //printf("cannot read memory map\n"); return load_memmap_return; } if (0 > find_libname(libn, libc, sizeof(libc), &libcaddr, mm, nmm)) { /* #ifdef DEBUG_UTIL */ /* log("cannot find %s\n", libn); */ /* #endif */ return -2; } s = load_symtab(libc); if (!s) { //printf("cannot read symbol table\n"); return -3; } /* #ifdef DEBUG_UTIL */ /* log("pid %d, name %s, libn %s\n", pid, name, libn); */ /* #endif */ if (0 > lookup_func_sym(s, name, addr)) { /* #ifdef DEBUG_UTIL */ /* log("fail\n"); */ /* log("find_name: cannot find %s\n", name); */ /* #endif */ return -4; } /* #ifdef DEBUG_UTIL */ /* log("not fail %p %d\n", addr, *addr); */ /* #endif */ //tmp = 4; *addr += libcaddr; return 0; }
sym_strtab *get_sym_strtab(char const* bin) { Elf_Scn *sym_scn; int fd; sym_strtab *list = NULL; init_libelf(&fd, bin); sym_scn = get_sym_shdr(); load_symtab(&list, sym_scn); resolve_relocations(&list); elf_end(e); close(fd); return list; }
/* Try to find a symbol table in either MOD->main.elf or MOD->debug.elf. */ static void find_symtab (Dwfl_Module *mod) { if (mod->symdata != NULL /* Already done. */ || mod->symerr != DWFL_E_NOERROR) /* Cached previous failure. */ return; find_file (mod); mod->symerr = mod->elferr; if (mod->symerr != DWFL_E_NOERROR) return; /* First see if the main ELF file has the debugging information. */ Elf_Scn *symscn = NULL, *xndxscn = NULL; GElf_Word strshndx = 0; mod->symerr = load_symtab (&mod->main, &mod->symfile, &symscn, &xndxscn, &mod->syments, &strshndx); switch (mod->symerr) { default: return; case DWFL_E_NOERROR: break; case DWFL_E_NO_SYMTAB: /* Now we have to look for a separate debuginfo file. */ mod->symerr = find_debuginfo (mod); switch (mod->symerr) { default: return; case DWFL_E_NOERROR: mod->symerr = load_symtab (&mod->debug, &mod->symfile, &symscn, &xndxscn, &mod->syments, &strshndx); break; case DWFL_E_CB: /* The find_debuginfo hook failed. */ mod->symerr = DWFL_E_NO_SYMTAB; break; } switch (mod->symerr) { default: return; case DWFL_E_NOERROR: break; case DWFL_E_NO_SYMTAB: if (symscn != NULL) { /* We still have the dynamic symbol table. */ mod->symerr = DWFL_E_NOERROR; break; } /* Last ditch, look for dynamic symbols without section headers. */ find_dynsym (mod); return; } break; } /* This does some sanity checks on the string table section. */ if (elf_strptr (mod->symfile->elf, strshndx, 0) == NULL) { elferr: mod->symerr = DWFL_E (LIBELF, elf_errno ()); return; } /* Cache the data; MOD->syments was set above. */ mod->symstrdata = elf_getdata (elf_getscn (mod->symfile->elf, strshndx), NULL); if (mod->symstrdata == NULL) goto elferr; if (xndxscn == NULL) mod->symxndxdata = NULL; else { mod->symxndxdata = elf_getdata (xndxscn, NULL); if (mod->symxndxdata == NULL) goto elferr; } mod->symdata = elf_getdata (symscn, NULL); if (mod->symdata == NULL) goto elferr; }
void main(){ FILE *infile,*outfile; char currch,nextch,ch[100],*chp; staggered_list *listpointer,*root=create_list_with_file("B:keywords"); SYMTAB_ENTRY **symtab=create_symbol_table_array(100); int dat,length_of; TOKEN *token,t; NODE *node; int g2_001_DATA_STUFFSUB_A; int g3_001_REST_SUBTREE_A; int g4_001_SINGLE_SUBTREE_A; int g5_001_DOUBLE_SUBTREE_A; int g6_001_WORD_SUBTREE_A; /**************************************************************************/ /**************************************************************************/ /******************** DRIVING PROCEDURE B:\OPSANYL *********************/ /**************************************************************************/ PROCEDURE_DIVISION: /**/ /** The ops analyser takes the .ops file*/ /** and tokenises it for processing by*/ /** the ops builder*/ /**/ C1_001_OPS_ANALYSER: goto C1_002_OPS_START; C1_002_OPS_START_EX: goto C1_003_OPS; C1_003_OPS_EX: goto C1_015_OPS_END; C1_015_OPS_END_EX: goto veryend; /**/ C1_002_OPS_START: /*028*/ token=&t; /*001*/ infile=open_input("b:altest.ops"); /*003*/ outfile=open_output("b:opsout.dat"); /*008*/ load_symtab(symtab,"b:symtable.out"); cross_reference(symtab,100); /*005*/ currch=getc(infile); if(currch!=EOF) nextch=getc(infile); goto C1_002_OPS_START_EX; /**/ C1_003_OPS: C1_004_OP_GROUP_EX: if(!( /*C01*/ (currch==EOF) )) goto C1_004_OP_GROUP; goto C1_003_OPS_EX; /**/ C1_004_OP_GROUP: goto C1_005_OP_NUM_REC; C1_005_OP_NUM_REC_EX: goto C1_014_REST_SUBTREE; C1_014_REST_SUBTREE_EX: goto C1_004_OP_GROUP_EX; /**/ /** an op consists of the op number*/ /** followed by the rest of it*/ /**/ C1_005_OP_NUM_REC: goto C1_006_OP_NUM; C1_006_OP_NUM_EX: goto C1_011_DATA; C1_011_DATA_EX: goto C1_005_OP_NUM_REC_EX; /**/ C1_006_OP_NUM: goto C1_007_OP_NUM_START; C1_007_OP_NUM_START_EX: goto C1_008_OP_NUM_BODY; C1_008_OP_NUM_BODY_EX: goto C1_010_OP_NUM_END; C1_010_OP_NUM_END_EX: goto C1_006_OP_NUM_EX; /**/ C1_007_OP_NUM_START: /*007*/ chp=ch; /*021*/ *chp=currch; /*020*/ chp++; /*019*/ *chp='\0'; /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C1_007_OP_NUM_START_EX; /**/ C1_008_OP_NUM_BODY: C1_009_OP_NUM_NUMBER_EX: if(!( /*C02*/ (currch==' ') )) goto C1_009_OP_NUM_NUMBER; goto C1_008_OP_NUM_BODY_EX; /**/ C1_009_OP_NUM_NUMBER: /*021*/ *chp=currch; /*020*/ chp++; /*019*/ *chp='\0'; /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C1_009_OP_NUM_NUMBER_EX; /**/ C1_010_OP_NUM_END: /*018*/ dat=str_to_int(ch); /*022*/ token->token_type=OP_NUM;token->value.keyword_number=dat; /*012*/ write_token(outfile,token); goto C1_010_OP_NUM_END_EX; /**/ C1_011_DATA: C1_012_DATA_GROUP_EX: if(!( /*C03*/ (currch==EOF || currch=='\n') )) goto C1_012_DATA_GROUP; goto C1_011_DATA_EX; /**/ C1_012_DATA_GROUP: goto C1_013_DATA_STUFFSUB; C1_013_DATA_STUFFSUB_EX: goto C1_012_DATA_GROUP_EX; /**/ C1_013_DATA_STUFFSUB: g2_001_DATA_STUFFSUB_A=0; goto C2_001_DATA_STUFFSUB; C2_001_EXIT01: goto C1_013_DATA_STUFFSUB_EX; /**/ C1_014_REST_SUBTREE: g3_001_REST_SUBTREE_A=0; goto C3_001_REST_SUBTREE; C3_001_EXIT01: goto C1_014_REST_SUBTREE_EX; /**/ C1_015_OPS_END: /*002*/ close_file(infile); /*004*/ close_file(outfile); goto C1_015_OPS_END_EX; /**/ C2_001_DATA_STUFFSUB: goto C2_002_BLANKS; C2_002_BLANKS_EX: goto C2_004_DATA; C2_004_DATA_EX: C2_001_DATA_STUFFSUB_A: switch(g2_001_DATA_STUFFSUB_A){ case 0 : goto C2_001_EXIT01;break; case 1 : goto C2_001_EXIT03;break; } /**/ C2_002_BLANKS: C2_003_BLANK_EX: if(!( /*C04*/ (currch!=' ') )) goto C2_003_BLANK; goto C2_002_BLANKS_EX; /**/ C2_003_BLANK: /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C2_003_BLANK_EX; /**/ C2_004_DATA: if(( /*C05*/ (currch=='"' || currch=='\'') )) goto C2_005_NON_NUM_LITERAL; if(( /*C06*/ (currch=='.') )) goto C2_010_FULLSTOP; if(( /*C07*/ (currch!='"' && currch!='\'' && currch!='.' && currch!='\n') )) goto C2_012_WORD; C2_005_NON_NUM_LITERAL_EX: C2_010_FULLSTOP_EX: C2_012_WORD_EX: goto C2_004_DATA_EX; /**/ C2_005_NON_NUM_LITERAL: if(( /*C08*/ (currch=='\'') )) goto C2_006_SINGLE; if(( /*C09*/ (currch=='"') )) goto C2_008_DOUBLE; C2_006_SINGLE_EX: C2_008_DOUBLE_EX: goto C2_005_NON_NUM_LITERAL_EX; /**/ C2_006_SINGLE: goto C2_007_SINGLE_SUBTREE; C2_007_SINGLE_SUBTREE_EX: goto C2_006_SINGLE_EX; /**/ C2_007_SINGLE_SUBTREE: g4_001_SINGLE_SUBTREE_A=0; goto C4_001_SINGLE_SUBTREE; C4_001_EXIT01: goto C2_007_SINGLE_SUBTREE_EX; /**/ C2_008_DOUBLE: goto C2_009_DOUBLE_SUBTREE; C2_009_DOUBLE_SUBTREE_EX: goto C2_008_DOUBLE_EX; /**/ C2_009_DOUBLE_SUBTREE: g5_001_DOUBLE_SUBTREE_A=0; goto C5_001_DOUBLE_SUBTREE; C5_001_EXIT01: goto C2_009_DOUBLE_SUBTREE_EX; /**/ C2_010_FULLSTOP: goto C2_011_PERIOD; C2_011_PERIOD_EX: goto C2_010_FULLSTOP_EX; /**/ C2_011_PERIOD: /*013*/ token->token_type=FULLSTOP;token->value.keyword_number=FULLSTOP; /*012*/ write_token(outfile,token); /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C2_011_PERIOD_EX; /**/ C2_012_WORD: goto C2_013_WORD_SUBTREE; C2_013_WORD_SUBTREE_EX: goto C2_012_WORD_EX; /**/ C2_013_WORD_SUBTREE: g6_001_WORD_SUBTREE_A=0; goto C6_001_WORD_SUBTREE; C6_001_EXIT01: goto C2_013_WORD_SUBTREE_EX; /**/ C6_001_WORD_SUBTREE: goto C6_002_WORD_START; C6_002_WORD_START_EX: goto C6_003_WORD_BODY; C6_003_WORD_BODY_EX: C6_001_WORD_SUBTREE_A: switch(g6_001_WORD_SUBTREE_A){ case 0 : goto C6_001_EXIT01;break; } /**/ C6_002_WORD_START: /*007*/ chp=ch; /*019*/ *chp='\0'; goto C6_002_WORD_START_EX; /**/ C6_003_WORD_BODY: goto C6_004_KEYWORD; C6_004_KEYWORD_EX: C6_009_NON_KEYWOR_D_EX: goto C6_003_WORD_BODY_EX; /**/ C6_004_KEYWORD: goto C6_005_KEYWORD_START; C6_005_KEYWORD_START_EX: goto C6_006_KEYWORD_BODY; C6_006_KEYWORD_BODY_EX: goto C6_008_KEYWORD_END; C6_008_KEYWORD_END_EX: goto C6_004_KEYWORD_EX; /**/ C6_005_KEYWORD_START: /*009*/ listpointer=root; /*021*/ *chp=currch; /*020*/ chp++; /*019*/ *chp='\0'; /*010*/ listpointer=check_pointer(listpointer,currch); if(( /*Q01*/ (!isupper(currch)) && currch!='-' )) goto C6_009_NON_KEYWOR_D; if(( /*Q02*/ listpointer==NULL )) goto C6_009_NON_KEYWOR_D; /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C6_005_KEYWORD_START_EX; /**/ C6_006_KEYWORD_BODY: C6_007_KEYWORD_CHAR_EX: if(!( /*C10*/ (currch==' ' || currch=='\n' || currch=='.' || currch==EOF) )) goto C6_007_KEYWORD_CHAR; goto C6_006_KEYWORD_BODY_EX; /**/ C6_007_KEYWORD_CHAR: /*021*/ *chp=currch; /*020*/ chp++; /*019*/ *chp='\0'; /*010*/ listpointer=check_pointer(listpointer,currch); if(( /*Q01*/ (!isupper(currch)) && currch!='-' )) goto C6_009_NON_KEYWOR_D; if(( /*Q02*/ listpointer==NULL )) goto C6_009_NON_KEYWOR_D; /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C6_007_KEYWORD_CHAR_EX; /**/ C6_008_KEYWORD_END: /*011*/ dat=get_data(listpointer); if(( /*Q03*/ dat==NULL )) goto C6_009_NON_KEYWOR_D; /*014*/ token->token_type=KEYWORD;token->value.keyword_number=dat; /*012*/ write_token(outfile,token); goto C6_008_KEYWORD_END_EX; /**/ C6_009_NON_KEYWOR_D: goto C6_010_CHARS; C6_010_CHARS_EX: goto C6_015_CHOICE; C6_015_CHOICE_EX: goto C6_009_NON_KEYWOR_D_EX; /**/ C6_010_CHARS: goto C6_011_CHARS_START; C6_011_CHARS_START_EX: goto C6_012_CHARS_BODY; C6_012_CHARS_BODY_EX: goto C6_014_CHARS_END; C6_014_CHARS_END_EX: goto C6_010_CHARS_EX; /**/ C6_011_CHARS_START: /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C6_011_CHARS_START_EX; /**/ C6_012_CHARS_BODY: C6_013_CHAR_EX: if(!( /*C10*/ (currch==' ' || currch=='\n' || currch=='.' || currch==EOF) )) goto C6_013_CHAR; goto C6_012_CHARS_BODY_EX; /**/ C6_013_CHAR: /*021*/ *chp=currch; /*020*/ chp++; /*019*/ *chp='\0'; /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C6_013_CHAR_EX; /**/ C6_014_CHARS_END: /*027*/ node=look_for_by_name(ch,symtab); goto C6_014_CHARS_END_EX; /**/ C6_015_CHOICE: if(( /*C11*/ (node==NULL && isdigit(ch[0])) )) goto C6_016_POSSIBLE_NUMBER; if(( /*C18*/ (node!=NULL) )) goto C6_018_VARIABLE; C6_016_POSSIBLE_NUMBER_EX: C6_018_VARIABLE_EX: goto C6_015_CHOICE_EX; /**/ C6_016_POSSIBLE_NUMBER: goto C6_017_NUMBER; C6_017_NUMBER_EX: goto C6_016_POSSIBLE_NUMBER_EX; /**/ C6_017_NUMBER: /*018*/ dat=str_to_int(ch); /*024*/ token->token_type=NUMERIC;token->value.keyword_number=dat; /*012*/ write_token(outfile,token); goto C6_017_NUMBER_EX; /**/ C6_018_VARIABLE: goto C6_019_VAR_START; C6_019_VAR_START_EX: goto C6_018_VARIABLE_EX; /**/ C6_019_VAR_START: /*023*/ token->token_type=VARIABLE_NAME;token->value.var_values.hash=node->own.hash; token->value.var_values.unique=node->own.unique; /*012*/ write_token(outfile,token); goto C6_019_VAR_START_EX; /**/ C3_001_REST_SUBTREE: goto C3_002_REST_OF_GROUP; C3_002_REST_OF_GROUP_EX: C3_001_REST_SUBTREE_A: switch(g3_001_REST_SUBTREE_A){ case 0 : goto C3_001_EXIT01;break; } /**/ C3_002_REST_OF_GROUP: C3_003_DATA_GROUP_EX: if(!( /*C12*/ (currch==EOF || isdigit(currch)) )) goto C3_003_DATA_GROUP; goto C3_002_REST_OF_GROUP_EX; /**/ C3_003_DATA_GROUP: goto C3_004_DATA; C3_004_DATA_EX: goto C3_007_DATA_END; C3_007_DATA_END_EX: goto C3_003_DATA_GROUP_EX; /**/ C3_004_DATA: C3_005_LINE_EX: if(!( /*C13*/ (currch=='\n' || currch==EOF) )) goto C3_005_LINE; goto C3_004_DATA_EX; /**/ C3_005_LINE: goto C3_006_DATA_STUFFSUB; C3_006_DATA_STUFFSUB_EX: goto C3_005_LINE_EX; /**/ C3_006_DATA_STUFFSUB: g2_001_DATA_STUFFSUB_A=1; goto C2_001_DATA_STUFFSUB; C2_001_EXIT03: goto C3_006_DATA_STUFFSUB_EX; /**/ C3_007_DATA_END: /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C3_007_DATA_END_EX; /**/ C4_001_SINGLE_SUBTREE: goto C4_002__START; C4_002__START_EX: goto C4_003__BODY; C4_003__BODY_EX: goto C4_007__END; C4_007__END_EX: C4_001_SINGLE_SUBTREE_A: switch(g4_001_SINGLE_SUBTREE_A){ case 0 : goto C4_001_EXIT01;break; } /**/ C4_002__START: /*007*/ chp=ch; /*019*/ *chp='\0'; /*025*/ length_of=0; /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C4_002__START_EX; /**/ C4_003__BODY: C4_004_CHAR_EX: if(!( /*C16*/ (currch=='\'' && nextch!='\'') )) goto C4_004_CHAR; goto C4_003__BODY_EX; /**/ C4_004_CHAR: if(( /*C14*/ (currch=='\'' && nextch=='\'') )) goto C4_005_QUOTE_QUOTE; if(!( /*C14*/ (currch=='\'' && nextch=='\'') )) goto C4_006_ANY; C4_005_QUOTE_QUOTE_EX: C4_006_ANY_EX: goto C4_004_CHAR_EX; /**/ C4_005_QUOTE_QUOTE: /*026*/ length_of++; /*021*/ *chp=currch; /*020*/ chp++; /*019*/ *chp='\0'; /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C4_005_QUOTE_QUOTE_EX; /**/ C4_006_ANY: /*026*/ length_of++; /*021*/ *chp=currch; /*020*/ chp++; /*019*/ *chp='\0'; /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C4_006_ANY_EX; /**/ C4_007__END: /*017*/ token->token_type=NON_NUMERIC_LITERAL_LENGTH;token->value.keyword_number= length_of; /*012*/ write_token(outfile,token); /*016*/ token->token_type=NON_NUMERIC_LITERAL;token->value.string=ch; /*012*/ write_token(outfile,token); /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C4_007__END_EX; /**/ C5_001_DOUBLE_SUBTREE: goto C5_002__START; C5_002__START_EX: goto C5_003__BODY; C5_003__BODY_EX: goto C5_007__END; C5_007__END_EX: C5_001_DOUBLE_SUBTREE_A: switch(g5_001_DOUBLE_SUBTREE_A){ case 0 : goto C5_001_EXIT01;break; } /**/ C5_002__START: /*007*/ chp=ch; /*019*/ *chp='\0'; /*025*/ length_of=0; /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C5_002__START_EX; /**/ C5_003__BODY: C5_004_CHAR_EX: if(!( /*C17*/ (currch=='"' && nextch!='"') )) goto C5_004_CHAR; goto C5_003__BODY_EX; /**/ C5_004_CHAR: if(( /*C15*/ (currch=='"' && nextch=='"') )) goto C5_005_QUOTE_QUOTE; if(!( /*C15*/ (currch=='"' && nextch=='"') )) goto C5_006_ANY; C5_005_QUOTE_QUOTE_EX: C5_006_ANY_EX: goto C5_004_CHAR_EX; /**/ C5_005_QUOTE_QUOTE: /*026*/ length_of++; /*021*/ *chp=currch; /*020*/ chp++; /*019*/ *chp='\0'; /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C5_005_QUOTE_QUOTE_EX; /**/ C5_006_ANY: /*026*/ length_of++; /*021*/ *chp=currch; /*020*/ chp++; /*019*/ *chp='\0'; /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C5_006_ANY_EX; /**/ C5_007__END: /*017*/ token->token_type=NON_NUMERIC_LITERAL_LENGTH;token->value.keyword_number= length_of; /*012*/ write_token(outfile,token); /*016*/ token->token_type=NON_NUMERIC_LITERAL;token->value.string=ch; /*012*/ write_token(outfile,token); /*006*/ currch=nextch; if(nextch!=EOF) nextch=getc(infile); goto C5_007__END_EX; /**/ /* Data Analysis Map*/ /**/ /* ------------- Data Analysis By -------------*/ /**/ /* BOX TYPE OPERATION ALLOCATION*/ /* Tree name: OPS-ANALYSER*/ /**/ /* Leaf : 5 Operations: 19*/ /* Quits : 0*/ /* Selections: 0*/ /* Sequences : 5*/ /* Iterations: 3*/ /* Backtracks: 0*/ /* Subtrees : 2 --> DATA-STUFFSUB*/ /* REST-SUBTREE*/ /**/ /* Tree name: DATA-STUFFSUB*/ /**/ /* Leaf : 2 Operations: 4*/ /* Quits : 0*/ /* Selections: 2*/ /* Sequences : 5*/ /* Iterations: 1*/ /* Backtracks: 0*/ /* Subtrees : 3 --> SINGLE-SUBTREE*/ /* DOUBLE-SUBTREE*/ /* WORD-SUBTREE*/ /**/ /* Tree name: WORD-SUBTREE*/ /**/ /* Leaf : 9 Operations: 27*/ /* Quits : 5*/ /* Selections: 1*/ /* Sequences : 6*/ /* Iterations: 2*/ /* Backtracks: 1*/ /* Subtrees : 0*/ /**/ /* Tree name: REST-SUBTREE*/ /**/ /* Leaf : 1 Operations: 1*/ /* Quits : 0*/ /* Selections: 0*/ /* Sequences : 3*/ /* Iterations: 2*/ /* Backtracks: 0*/ /* Subtrees : 1 --> DATA-STUFFSUB*/ /**/ /* Tree name: SINGLE-SUBTREE*/ /**/ /* Leaf : 4 Operations: 20*/ /* Quits : 0*/ /* Selections: 1*/ /* Sequences : 1*/ /* Iterations: 1*/ /* Backtracks: 0*/ /* Subtrees : 0*/ /**/ /* Tree name: DOUBLE-SUBTREE*/ /**/ /* Leaf : 4 Operations: 20*/ /* Quits : 0*/ /* Selections: 1*/ /* Sequences : 1*/ /* Iterations: 1*/ /* Backtracks: 0*/ /* Subtrees : 0*/ /**/ /**/ /**/ veryend: ; }
void elf_hide(int pfile, char *p) { int i; Elf_Ehdr *pehdr; Elf_Shdr *pshdr; Elf_Phdr *pphdr; struct stat sb; pexe = p; pehdr = (Elf_Ehdr *) pexe; #ifdef DEBUG printf("elf header\n"); printf("e_type %x\n", pehdr->e_type); printf("e_machine %x\n", pehdr->e_machine); printf("e_version %x\n", pehdr->e_version); printf("e_entry %x\n", pehdr->e_entry); printf("e_phoff %x\n", pehdr->e_phoff); printf("e_shoff %x\n", pehdr->e_shoff); printf("e_flags %x\n", pehdr->e_flags); printf("e_ehsize %x\n", pehdr->e_ehsize); printf("e_phentsize %x\n", pehdr->e_phentsize); printf("e_phnum %x\n", pehdr->e_phnum); printf("e_shentsize %x\n", pehdr->e_shentsize); printf("e_shnum %x\n", pehdr->e_shnum); printf("e_shstrndx %x\n", pehdr->e_shstrndx); #endif load_shstr_tab(pehdr, pexe); #ifdef DEBUG for (i = 0; i < pehdr->e_shnum; i++) { pshdr = (Elf_Phdr *) (pexe + pehdr->e_shoff + (i * pehdr->e_shentsize)); printf("section header %d\n", i); printf("sh_name %x ", pshdr->sh_name); fprint_shstr(stdout, pshdr->sh_name); printf("\n"); printf("sh_type %x\n", pshdr->sh_type); printf("sh_flags %x\n", pshdr->sh_flags); printf("sh_addr %x\n", pshdr->sh_addr); printf("sh_offset %x\n", pshdr->sh_offset); printf("sh_size %x\n", pshdr->sh_size); printf("sh_link %x\n", pshdr->sh_link); printf("sh_info %x\n", pshdr->sh_info); printf("sh_addralign %x\n", pshdr->sh_addralign); printf("sh_entsize %x\n", pshdr->sh_entsize); } #endif /* DEBUG */ #ifdef DEBUG for (i = 0; i < pehdr->e_phnum; i++) { pshdr = (Elf_Phdr *) (pexe + pehdr->e_phoff + (i * pehdr->e_phentsize)); printf("program header %d\n", i); printf("p_type %x\n", pphdr->p_type); printf("p_offset %x\n", pphdr->p_offset); printf("p_vaddr %x\n", pphdr->p_vaddr); printf("p_paddr %x\n", pphdr->p_paddr); printf("p_filesz %x\n", pphdr->p_filesz); printf("p_memsz %x\n", pphdr->p_memsz); printf("p_flags %x\n", pphdr->p_flags); printf("p_align %x\n", pphdr->p_align); } #endif /* DEBUG */ #if 0 for (i = 0; i < pehdr->e_shnum; i++) { pshdr = (Elf_Phdr *) (pexe + pehdr->e_shoff + (i * pehdr->e_shentsize)); if (strcmp(".strtab", get_shstr(pshdr->sh_name)) == 0) break; } fprint_shstr(stdout, pshdr->sh_name); printf("\n"); #endif load_strtab(pehdr, pexe); load_symtab(pehdr, pexe); munmap(pexe, sb.st_size); close(pfile); }
void main(){ FILE *infile; SYMTAB_ENTRY **symtab=create_symbol_table_array(100); int eof; TOKEN *token,t; NODE *node; COND *cond; COND **cond_array=create_cond_array(); int g2_001_LHS_A; int g3_001_KEYWORDS_A; int g4_001_RHS_A; int g5_001_GROUP_SUBTREE_A; /**************************************************************************/ /**************************************************************************/ /******************* DRIVING PROCEDURE B:\CONDSBLD ********************/ /**************************************************************************/ PROCEDURE_DIVISION: /**/ /** take the output from the condition*/ /** tokeniser, it consists of an iteration*/ /** of condition number, left hand side,*/ /** a relational operator ie NOT >, or >*/ /** then the right hand side*/ /**/ C1_001_CONDS_BUILD: goto C1_002_CONDS_START; C1_002_CONDS_START_EX: goto C1_003_CONDS_BODY; C1_003_CONDS_BODY_EX: goto C1_009_CONDS_END; C1_009_CONDS_END_EX: goto veryend; /**/ C1_002_CONDS_START: /*001*/ infile=open_input("b:cndout.dat"); /*007*/ load_symtab(symtab,"b:symtable.out"); cross_reference(symtab,100); /*005*/ token=&t; /*006*/ eof=get_token(infile,token); goto C1_002_CONDS_START_EX; /**/ C1_003_CONDS_BODY: C1_004_COND_EX: if(!( /*C01*/ (eof==1) )) goto C1_004_COND; goto C1_003_CONDS_BODY_EX; /**/ C1_004_COND: goto C1_005_COND_NUM; C1_005_COND_NUM_EX: goto C1_006_LHS; C1_006_LHS_EX: goto C1_007_KEYWORDS; C1_007_KEYWORDS_EX: goto C1_008_RHS; C1_008_RHS_EX: goto C1_004_COND_EX; /**/ C1_005_COND_NUM: /*010*/ cond=create_cond(); /*011*/ cond_array[token->value.keyword_number]=cond; /*006*/ eof=get_token(infile,token); goto C1_005_COND_NUM_EX; /**/ C1_006_LHS: g2_001_LHS_A=0; goto C2_001_LHS; C2_001_EXIT01: goto C1_006_LHS_EX; /**/ C1_007_KEYWORDS: g3_001_KEYWORDS_A=0; goto C3_001_KEYWORDS; C3_001_EXIT01: goto C1_007_KEYWORDS_EX; /**/ C1_008_RHS: g4_001_RHS_A=0; goto C4_001_RHS; C4_001_EXIT01: goto C1_008_RHS_EX; /**/ C1_009_CONDS_END: /*002*/ close_file(infile); /*004*/ save_cond_array("b:cndout2.dat",cond_array); goto C1_009_CONDS_END_EX; /**/ C5_001_GROUP_SUBTREE: if(( /*C08*/ (token->token_type==RELATIONAL_OP) )) goto C5_002_RELATIONAL; if(( /*C09*/ (token->token_type==KEYWORD) )) goto C5_008_VERB; C5_002_RELATIONAL_EX: C5_008_VERB_EX: C5_001_GROUP_SUBTREE_A: switch(g5_001_GROUP_SUBTREE_A){ case 0 : goto C5_001_EXIT02;break; case 1 : goto C5_001_EXIT03;break; } /**/ C5_002_RELATIONAL: goto C5_003_RELATIONAL_BODY; C5_003_RELATIONAL_BODY_EX: goto C5_007_RELATIONAL_END; C5_007_RELATIONAL_END_EX: goto C5_002_RELATIONAL_EX; /**/ C5_003_RELATIONAL_BODY: if(( /*C10*/ (token->value.keyword_number==GREATER_THAN) )) goto C5_004_GREATER_SYMBOL; if(( /*C11*/ (token->value.keyword_number==LESS_THAN) )) goto C5_005_LESS_SYMBOL; if(( /*C12*/ (token->value.keyword_number==EQUAL_TO) )) goto C5_006_EQUAL_SYMBOL; C5_004_GREATER_SYMBOL_EX: C5_005_LESS_SYMBOL_EX: C5_006_EQUAL_SYMBOL_EX: goto C5_003_RELATIONAL_BODY_EX; /**/ C5_004_GREATER_SYMBOL: /*014*/ cond->relation.relation=GREATER_THAN; goto C5_004_GREATER_SYMBOL_EX; /**/ C5_005_LESS_SYMBOL: /*015*/ cond->relation.relation=LESS_THAN; goto C5_005_LESS_SYMBOL_EX; /**/ C5_006_EQUAL_SYMBOL: /*016*/ cond->relation.relation=EQUAL_TO; goto C5_006_EQUAL_SYMBOL_EX; /**/ C5_007_RELATIONAL_END: /*006*/ eof=get_token(infile,token); goto C5_007_RELATIONAL_END_EX; /**/ C5_008_VERB: goto C5_009_VERB_BODY; C5_009_VERB_BODY_EX: goto C5_019_VERB_END; C5_019_VERB_END_EX: goto C5_008_VERB_EX; /**/ C5_009_VERB_BODY: if(( /*C13*/ (token->value.keyword_number==GREATER) )) goto C5_010_GREATER; if(( /*C14*/ (token->value.keyword_number==LESS) )) goto C5_013_LESS; if(( /*C15*/ (token->value.keyword_number==EQUAL) )) goto C5_016_EQUAL; C5_010_GREATER_EX: C5_013_LESS_EX: C5_016_EQUAL_EX: goto C5_009_VERB_BODY_EX; /**/ C5_010_GREATER: goto C5_011_GREATER; C5_011_GREATER_EX: goto C5_012_THAN; C5_012_THAN_EX: goto C5_010_GREATER_EX; /**/ C5_011_GREATER: /*006*/ eof=get_token(infile,token); goto C5_011_GREATER_EX; /**/ C5_012_THAN: /*014*/ cond->relation.relation=GREATER_THAN; goto C5_012_THAN_EX; /**/ C5_013_LESS: goto C5_014_LESS; C5_014_LESS_EX: goto C5_015_THAN; C5_015_THAN_EX: goto C5_013_LESS_EX; /**/ C5_014_LESS: /*006*/ eof=get_token(infile,token); goto C5_014_LESS_EX; /**/ C5_015_THAN: /*015*/ cond->relation.relation=LESS_THAN; goto C5_015_THAN_EX; /**/ C5_016_EQUAL: goto C5_017_EQUAL; C5_017_EQUAL_EX: goto C5_018_TO; C5_018_TO_EX: goto C5_016_EQUAL_EX; /**/ C5_017_EQUAL: /*006*/ eof=get_token(infile,token); goto C5_017_EQUAL_EX; /**/ C5_018_TO: /*016*/ cond->relation.relation=EQUAL_TO; goto C5_018_TO_EX; /**/ C5_019_VERB_END: /*006*/ eof=get_token(infile,token); goto C5_019_VERB_END_EX; /**/ /** skip the IS, take the NOT and the*/ /** relational and build a relational part o*/ /** f the condition*/ /**/ C3_001_KEYWORDS: goto C3_002_KSTART; C3_002_KSTART_EX: goto C3_003_POSS_IS; C3_003_POSS_IS_EX: goto C3_005_KEYWORD_GROUP; C3_005_KEYWORD_GROUP_EX: C3_001_KEYWORDS_A: switch(g3_001_KEYWORDS_A){ case 0 : goto C3_001_EXIT01;break; } /**/ C3_002_KSTART: /*023*/ printf("relation bit\n"); goto C3_002_KSTART_EX; /**/ C3_003_POSS_IS: if(( /*C05*/ (token->token_type==KEYWORD && token->value.keyword_number==IS) )) goto C3_004_IS; C3_004_IS_EX: goto C3_003_POSS_IS_EX; /**/ C3_004_IS: /*006*/ eof=get_token(infile,token); goto C3_004_IS_EX; /**/ C3_005_KEYWORD_GROUP: if(( /*C06*/ (token->token_type==KEYWORD && token->value.keyword_number==NOT) )) goto C3_006_NOT_GROUP; if(( /*C07*/ (token->token_type==KEYWORD || token->token_type==RELATIONAL_OP) )) goto C3_010_NOT_NOT_GROUP; C3_006_NOT_GROUP_EX: C3_010_NOT_NOT_GROUP_EX: goto C3_005_KEYWORD_GROUP_EX; /**/ C3_006_NOT_GROUP: goto C3_007_NOT; C3_007_NOT_EX: goto C3_008_GROUP; C3_008_GROUP_EX: goto C3_006_NOT_GROUP_EX; /**/ C3_007_NOT: /*006*/ eof=get_token(infile,token); /*017*/ cond->relation.not=YES_STATUS; goto C3_007_NOT_EX; /**/ C3_008_GROUP: goto C3_009_GROUP_SUBTREE; C3_009_GROUP_SUBTREE_EX: goto C3_008_GROUP_EX; /**/ C3_009_GROUP_SUBTREE: g5_001_GROUP_SUBTREE_A=0; goto C5_001_GROUP_SUBTREE; C5_001_EXIT02: goto C3_009_GROUP_SUBTREE_EX; /**/ C3_010_NOT_NOT_GROUP: goto C3_011_GROUP; C3_011_GROUP_EX: goto C3_010_NOT_NOT_GROUP_EX; /**/ C3_011_GROUP: goto C3_012_GROUP_SUBTREE; C3_012_GROUP_SUBTREE_EX: goto C3_011_GROUP_EX; /**/ C3_012_GROUP_SUBTREE: g5_001_GROUP_SUBTREE_A=1; goto C5_001_GROUP_SUBTREE; C5_001_EXIT03: goto C3_012_GROUP_SUBTREE_EX; /**/ C4_001_RHS: goto C4_002_RHS_START; C4_002_RHS_START_EX: goto C4_003_RHS_BODY; C4_003_RHS_BODY_EX: goto C4_007_RHS_END; C4_007_RHS_END_EX: C4_001_RHS_A: switch(g4_001_RHS_A){ case 0 : goto C4_001_EXIT01;break; } /**/ C4_002_RHS_START: /*022*/ printf("right hand side\n");getchar(); /*021*/ cond->relation.not=NO_STATUS; goto C4_002_RHS_START_EX; /**/ C4_003_RHS_BODY: if(( /*C02*/ (token->token_type==NUMERIC) )) goto C4_004_INTEGER; if(( /*C03*/ (token->token_type==VARIABLE_NAME) )) goto C4_005_VARIABLE; if(( /*C04*/ (token->token_type==NON_NUMERIC_LITERAL) )) goto C4_006_STRING; C4_004_INTEGER_EX: C4_005_VARIABLE_EX: C4_006_STRING_EX: goto C4_003_RHS_BODY_EX; /**/ C4_004_INTEGER: /*018*/ cond->rhs.type=SIDE_LITERAL; cond->rhs.contents.numeric_literal=token->value.keyword_number; /*025*/ printf("numeric value \n"); goto C4_004_INTEGER_EX; /**/ C4_005_VARIABLE: /*009*/ node=look_for(token->value.var_values.unique, token->value.var_values.hash, symtab); /*020*/ cond->rhs.type=SIDE_VAR; cond->rhs.contents.variable=node; /*026*/ printf("variable\n"); goto C4_005_VARIABLE_EX; /**/ C4_006_STRING: /*019*/ cond->rhs.type=SIDE_NON_LITERAL; cond->rhs.contents.non_numeric_literal=token->value.string; /*028*/ printf("string2\n"); goto C4_006_STRING_EX; /**/ C4_007_RHS_END: /*006*/ eof=get_token(infile,token); goto C4_007_RHS_END_EX; /**/ C2_001_LHS: goto C2_002_LHS_START; C2_002_LHS_START_EX: goto C2_003_LHS_BODY; C2_003_LHS_BODY_EX: goto C2_007_LHS_END; C2_007_LHS_END_EX: C2_001_LHS_A: switch(g2_001_LHS_A){ case 0 : goto C2_001_EXIT01;break; } /**/ C2_002_LHS_START: /*024*/ printf("lefthand side\n"); goto C2_002_LHS_START_EX; /**/ C2_003_LHS_BODY: if(( /*C02*/ (token->token_type==NUMERIC) )) goto C2_004_INTEGER; if(( /*C03*/ (token->token_type==VARIABLE_NAME) )) goto C2_005_VARIABLE; if(( /*C04*/ (token->token_type==NON_NUMERIC_LITERAL) )) goto C2_006_STRING; C2_004_INTEGER_EX: C2_005_VARIABLE_EX: C2_006_STRING_EX: goto C2_003_LHS_BODY_EX; /**/ C2_004_INTEGER: /*003*/ cond->lhs.type=SIDE_LITERAL; /*008*/ cond->lhs.contents.numeric_literal=token->value.keyword_number; /*025*/ printf("numeric value \n"); goto C2_004_INTEGER_EX; /**/ C2_005_VARIABLE: /*009*/ node=look_for(token->value.var_values.unique, token->value.var_values.hash, symtab); /*013*/ cond->lhs.contents.variable=node; cond->lhs.type=SIDE_VAR; /*026*/ printf("variable\n"); goto C2_005_VARIABLE_EX; /**/ C2_006_STRING: /*012*/ cond->lhs.type=SIDE_NON_LITERAL; cond->lhs.contents.non_numeric_literal=token->value.string; /*027*/ printf("string\n"); goto C2_006_STRING_EX; /**/ C2_007_LHS_END: /*006*/ eof=get_token(infile,token); goto C2_007_LHS_END_EX; /**/ /* Data Analysis Map*/ /**/ /* ------------- Data Analysis By -------------*/ /**/ /* BOX TYPE OPERATION ALLOCATION*/ /* Tree name: CONDS-BUILD*/ /**/ /* Leaf : 3 Operations: 9*/ /* Quits : 0*/ /* Selections: 0*/ /* Sequences : 2*/ /* Iterations: 1*/ /* Backtracks: 0*/ /* Subtrees : 3 --> LHS*/ /* KEYWORDS*/ /* RHS*/ /**/ /* Tree name: GROUP-SUBTREE*/ /**/ /* Leaf : 11 Operations: 11*/ /* Quits : 0*/ /* Selections: 3*/ /* Sequences : 5*/ /* Iterations: 0*/ /* Backtracks: 0*/ /* Subtrees : 0*/ /**/ /* Tree name: KEYWORDS*/ /**/ /* Leaf : 3 Operations: 4*/ /* Quits : 0*/ /* Selections: 2*/ /* Sequences : 5*/ /* Iterations: 0*/ /* Backtracks: 0*/ /* Subtrees : 2 --> GROUP-SUBTREE*/ /* GROUP-SUBTREE*/ /**/ /* Tree name: RHS*/ /**/ /* Leaf : 5 Operations: 10*/ /* Quits : 0*/ /* Selections: 1*/ /* Sequences : 1*/ /* Iterations: 0*/ /* Backtracks: 0*/ /* Subtrees : 0*/ /**/ /* Tree name: LHS*/ /**/ /* Leaf : 5 Operations: 10*/ /* Quits : 0*/ /* Selections: 1*/ /* Sequences : 1*/ /* Iterations: 0*/ /* Backtracks: 0*/ /* Subtrees : 0*/ /**/ /**/ /**/ veryend: ; }