forked from arti/vt1200
checkpoint: VT1200 reverse-engineering workspace before board-model work
This commit is contained in:
commit
acb92d3e44
325 files changed
+951894
No files matched your search
@@ -0,0 +1,62 @@
|
||||
"""Tests for tools/ptr_constants.py.
|
||||
|
||||
The VT1200 firmware stores TMS34010 *bit* addresses: a 32-bit value P refers to
|
||||
physical byte P >> 3. ptr_constants.scan() finds those constants in an
|
||||
address-ordered image and resolves where they point.
|
||||
"""
|
||||
import os
|
||||
import struct
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
sys.path.insert(0, os.path.join(HERE, "tools"))
|
||||
|
||||
import ptr_constants
|
||||
|
||||
ROM_BASE = 0x07E40000
|
||||
|
||||
|
||||
class ScanSyntheticTest(unittest.TestCase):
|
||||
def test_finds_string_pointer(self):
|
||||
img = bytearray(0x1000)
|
||||
img[0x100:0x100 + 11] = b"HELLO WORLD"
|
||||
ptr = (ROM_BASE + 0x100) << 3 # bit address of the string
|
||||
struct.pack_into("<I", img, 0x10, ptr)
|
||||
hits = list(ptr_constants.scan(bytes(img)))
|
||||
self.assertIn((0x10, ptr, 0x100, "string"), hits)
|
||||
|
||||
def test_ignores_values_that_do_not_resolve(self):
|
||||
self.assertEqual(list(ptr_constants.scan(b"\xff" * 0x100)), [])
|
||||
|
||||
|
||||
class ClassifyTest(unittest.TestCase):
|
||||
def test_printable_run_is_a_string(self):
|
||||
img = b"\x00" * 8 + b"ABCDEFGH"
|
||||
self.assertEqual(ptr_constants.classify(img, 8), "string")
|
||||
|
||||
def test_non_printable_is_other(self):
|
||||
img = b"\x00" * 16
|
||||
self.assertEqual(ptr_constants.classify(img, 8), "other")
|
||||
|
||||
def test_out_of_range_returns_none(self):
|
||||
self.assertIsNone(ptr_constants.classify(b"\x00\x01", 99))
|
||||
|
||||
|
||||
class RealImageTest(unittest.TestCase):
|
||||
def test_known_pointer_resolves_to_its_string(self):
|
||||
path = os.path.join(HERE, "vt1200_v21.bin")
|
||||
if not os.path.exists(path):
|
||||
self.skipTest("image not built")
|
||||
with open(path, "rb") as fh:
|
||||
img = fh.read()
|
||||
by_value = {v: (off, tgt, kind) for off, v, tgt, kind in ptr_constants.scan(img)}
|
||||
self.assertIn(0x3F816ED8, by_value)
|
||||
off, tgt, kind = by_value[0x3F816ED8]
|
||||
self.assertEqual(tgt, 0xC2DDB)
|
||||
self.assertEqual(kind, "string")
|
||||
self.assertEqual(img[tgt:tgt + 15], b"Messages re-xmt")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in new issue
Block a user