Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4973 | right-hear | 1 | #include"mcoff.h" |
2 | #include |
||
3 | #include"string.h" |
||
4 | |||
5 | /* static inline void nprintf(char * s,int n) |
||
6 | { |
||
7 | printf("nprintf(%u, '",n); |
||
8 | for(;n;n--) |
||
9 | putch(*s++); |
||
10 | printf("')"); |
||
11 | } */ |
||
12 | |||
13 | SYMENT * find_coff_symbol(coffobj_t * obj,char * objname) |
||
14 | { |
||
15 | int namelen; |
||
16 | int symno; |
||
17 | int xlen; |
||
18 | SYMENT * symtab; |
||
19 | char * symnamep,symnamelen; |
||
20 | symtab=obj->co_symtab; |
||
21 | namelen=strlen(objname); |
||
22 | for(symno=0;symno |
||
23 | { |
||
24 | if(symtab->e.e.e_zeroes==0) |
||
25 | { |
||
26 | symnamep=(char *)(((long)obj->co_strtab)+symtab->e.e.e_offset); |
||
27 | symnamelen=strlen(symnamep); |
||
28 | /* printf("strtab=%u %x %u ",symtab->e.e.e_offset,symnamep,symnamelen); */ |
||
29 | } else { |
||
30 | symnamep=(char *)symtab->e.e_name; |
||
31 | symnamelen=strlen(symnamep); |
||
32 | if(symnamelen>E_SYMNMLEN) |
||
33 | symnamelen=E_SYMNMLEN; |
||
34 | } |
||
35 | /* nprintf(symnamep,symnamelen); |
||
36 | printf("\n"); */ |
||
37 | if(symtab->e_scnum!=0 && namelen==symnamelen && !strncmp(objname,symnamep,namelen)) |
||
38 | return symtab; |
||
39 | } |
||
40 | return NULL; |
||
41 | } |
||
42 | |||
43 | unsigned long mcoff_get_ref(coffobj_t * obj,char * symname) |
||
44 | { |
||
45 | SYMENT * sym=find_coff_symbol(obj,symname); |
||
46 | if(!sym) return 0; |
||
47 | return sym->e_value+obj->co_sections[sym->e_scnum-1].s_scnptr+obj->co_loadaddr; |
||
48 | } |