(self, rva, size)
| 3979 | return entries |
| 3980 | |
| 3981 | def parse_debug_directory(self, rva, size): |
| 3982 | """""" |
| 3983 | |
| 3984 | dbg_size = Structure(self.__IMAGE_DEBUG_DIRECTORY_format__).sizeof() |
| 3985 | |
| 3986 | debug = [] |
| 3987 | for idx in range(int(size / dbg_size)): |
| 3988 | try: |
| 3989 | data = self.get_data(rva + dbg_size * idx, dbg_size) |
| 3990 | except PEFormatError: |
| 3991 | self.__warnings.append( |
| 3992 | "Invalid debug information. Can't read " "data at RVA: 0x%x" % rva |
| 3993 | ) |
| 3994 | return None |
| 3995 | |
| 3996 | dbg = self.__unpack_data__( |
| 3997 | self.__IMAGE_DEBUG_DIRECTORY_format__, |
| 3998 | data, |
| 3999 | file_offset=self.get_offset_from_rva(rva + dbg_size * idx), |
| 4000 | ) |
| 4001 | |
| 4002 | if not dbg: |
| 4003 | return None |
| 4004 | |
| 4005 | # apply structure according to DEBUG_TYPE |
| 4006 | # http://www.debuginfo.com/articles/debuginfomatch.html |
| 4007 | # |
| 4008 | dbg_type = None |
| 4009 | |
| 4010 | if dbg.Type == 1: |
| 4011 | # IMAGE_DEBUG_TYPE_COFF |
| 4012 | pass |
| 4013 | |
| 4014 | elif dbg.Type == 2: |
| 4015 | # if IMAGE_DEBUG_TYPE_CODEVIEW |
| 4016 | dbg_type_offset = dbg.PointerToRawData |
| 4017 | dbg_type_size = dbg.SizeOfData |
| 4018 | dbg_type_data = self.__data__[ |
| 4019 | dbg_type_offset : dbg_type_offset + dbg_type_size |
| 4020 | ] |
| 4021 | |
| 4022 | if dbg_type_data[:4] == b"RSDS": |
| 4023 | # pdb7.0 |
| 4024 | __CV_INFO_PDB70_format__ = [ |
| 4025 | "CV_INFO_PDB70", |
| 4026 | [ |
| 4027 | "I,CvSignature", |
| 4028 | "I,Signature_Data1", # Signature is of GUID type |
| 4029 | "H,Signature_Data2", |
| 4030 | "H,Signature_Data3", |
| 4031 | "8s,Signature_Data4", |
| 4032 | # 'H,Signature_Data5', |
| 4033 | # 'I,Signature_Data6', |
| 4034 | "I,Age", |
| 4035 | ], |
| 4036 | ] |
| 4037 | pdbFileName_size = ( |
| 4038 | dbg_type_size - Structure(__CV_INFO_PDB70_format__).sizeof() |
nothing calls this directly
no test coverage detected