| 197 | |
| 198 | |
| 199 | class DySymbolTable: |
| 200 | # TODO: finish parser |
| 201 | def __init__(self, lc, data): |
| 202 | self.locsymbol_index = lc.locsymbol_index |
| 203 | self.locsymbol_num = lc.locsymbol_number |
| 204 | self.defext_index = lc.defined_extsymbol_index |
| 205 | self.defext_num = lc.defined_extsymbol_number |
| 206 | self.undefext_index = lc.undef_extsymbol_index |
| 207 | self.undefext_num = lc.undef_extsymbol_number |
| 208 | self.indsym_offset = lc.indsym_table_offset |
| 209 | self.indsym_num = lc.indsym_table_entries |
| 210 | self.indirect_symbols = [] |
| 211 | self.extreloc_offset = lc.extreloc_table_offset |
| 212 | self.extreloc_num = lc.extreloc_table_entries |
| 213 | self.extreloc = [] |
| 214 | self.locreloc_offset = lc.locreloc_table_offset |
| 215 | self.locreloc_num = lc.locreloc_table_entries |
| 216 | self.locreloc = [] |
| 217 | |
| 218 | if self.indsym_num: |
| 219 | slide = 0 |
| 220 | for i in range(self.indsym_num): |
| 221 | self.indirect_symbols.append(unpack("<L", data[self.indsym_offset + slide : self.indsym_offset + slide + 4])) |
| 222 | slide += 4 |
| 223 | |
| 224 | if self.extreloc_num: |
| 225 | slide = 0 |
| 226 | for i in range(self.extreloc_num): |
| 227 | self.extreloc.append(Relocation64(data[self.extreloc_offset + slide : self.extreloc_offset + slide + 8])) |
| 228 | slide += 8 |
| 229 | |
| 230 | if self.locreloc_num: |
| 231 | slide = 0 |
| 232 | for i in range(self.locreloc_num): |
| 233 | self.locreloc.append(Relocation64(data[self.locreloc_offset + slide : self.locreloc_offset + slide + 8])) |
| 234 | slide += 8 |
| 235 | |
| 236 | def __str__(self): |
| 237 | pass |