feature: multiple sections for each match

This commit is contained in:
Dobin Rutishauser
2023-01-04 06:40:56 +01:00
parent b39f7f7502
commit d4abbef4dc
3 changed files with 30 additions and 5 deletions
+1 -1
View File
@@ -57,7 +57,7 @@ def augmentFileWord(fileOffice: FileOffice, matches: List[Match]):
for m in matches:
data = fileOffice.data[m.start():m.end()]
dataHexdump = hexdump.hexdump(data, result='return')
sectionName = ac.getSectionForAddr(m.start())
sectionName = ac.getSectionsForAddr(m.start(), m.size)
detail = ''
itemSet = results.at(m.fileOffset)
+14 -2
View File
@@ -207,6 +207,19 @@ class AddressConverter():
return self.sector[sector]
def getSectionsForAddr(self, addr, size):
res = {}
# just brute force it...
offset = addr
while offset < addr+size:
section = self.getSectionForAddr(offset)
res[section] = ''
offset += self.ole.mini_sector_size
return list(res.keys())
def _paintMinistreamSectorChain(self, ministreamSectStart, name, sector, size):
# offset into the ministream
offset = sector * self.ole.mini_sector_size
@@ -244,7 +257,7 @@ class AddressConverter():
for c in self.sector:
res += "{} {}: {}\n".format(c, ((c+1) * 512), self.sector[c])
return res
def _getDirForName(self, name:str) -> olefile.olefile.OleDirectoryEntry:
for id in range(len(self.ole.direntries)):
@@ -255,6 +268,5 @@ class AddressConverter():
return d
def roundTo(number, multiple):
return int(multiple * floor(number / multiple))
+15 -2
View File
@@ -35,8 +35,8 @@ class DisasmMakroTest(unittest.TestCase):
self.assertEqual(ac.physicalAddressFor("VBA/ThisDocument", 4093), 10237)
self.assertEqual(ac.physicalAddressFor("VBA/ThisDocument", 4125), 1565) # not: smaller address
def test_AddressConverter(self):
# Only the VbaAddressConverter
def test_AddressConverterGetSection(self):
file = 'tests/data/test.docm.vbaProject.bin'
ole = olefile.OleFileIO(file)
ac = AddressConverter(ole)
@@ -48,6 +48,19 @@ class DisasmMakroTest(unittest.TestCase):
self.assertEqual(ac.getSectionForAddr(3572), "__SRP_2")
def test_AddressConverterGetSections(self):
file = 'tests/data/test.docm.vbaProject.bin'
ole = olefile.OleFileIO(file)
ac = AddressConverter(ole)
sections = ac.getSectionsForAddr(3584, 1024)
print(str(sections))
self.assertEqual(len(sections), 3)
self.assertTrue('Directory' in sections)
self.assertTrue('__SRP_3' in sections)
self.assertTrue('NewMacros' in sections)
def test_disasm_pcodedmp(self):
# Only the Pcodedmp dumping, docm
results = pcodedmp.processFile("tests/data/test.docm")