mirror of
https://github.com/vivisect/vivisect
synced 2026-06-08 18:04:23 +00:00
6de41d2f23
Squash a few bugs in vstruct related to negative numbers and unformatted values.
35 lines
1.2 KiB
Python
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())
|