mirror of
https://github.com/dobin/avred
synced 2026-06-08 13:54:13 +00:00
feature: multiple sections for each match
This commit is contained in:
@@ -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
@@ -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))
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user