Files
James Gross 6de41d2f23 Fix vstruct number issue (#412)
Squash a few bugs in vstruct related to negative numbers and unformatted values.
2021-07-31 00:09:44 -04:00

35 lines
1.2 KiB
Python

import io
import unittest
import vivisect
class StructTest(unittest.TestCase):
def test_read_struct(self):
vw = vivisect.VivWorkspace()
src = 'struct foo { int bar; char baz; unsigned int biz[40]; }; // test struct'
vw.setUserStructSource(src)
usrc = vw.getUserStructSource('foo')
self.assertEqual(1, len(vw.getUserStructNames()))
self.assertEqual(usrc, src)
def test_make_struct(self):
fd = io.BytesIO(b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\xfc\xfd\xfe\xff')
vw = vivisect.VivWorkspace()
vw.config.viv.parsers.blob.arch = 'arm'
vw.config.viv.parsers.blob.bigend = False
vw.config.viv.parsers.blob.baseaddr = 0x22220000
vw.loadFromFd(fd, fmtname='blob')
src = 'struct allint {int foo; int bar; int baz; int biz;};'
vw.setUserStructSource(src)
vs = vw.makeStructure(0x22220000, 'allint')
self.assertEqual(vs.foo, 0x03020100)
self.assertEqual(vs.bar, 0x07060504)
self.assertEqual(vs.baz, 0x0b0a0908)
self.assertEqual(vs.biz, -0x010204)
fd.seek(0)
self.assertEqual(vs.vsEmit(), fd.read())