From 638d7bac7b608b64d01e3d7879c1125eb60a7d22 Mon Sep 17 00:00:00 2001 From: PlantDaddy Date: Fri, 10 Apr 2020 23:00:54 -0500 Subject: [PATCH 1/4] Updated code to be Python 3 compliant and a Python 3 package could be built successfully, fixed some bugs, found some possible bugs, tightened code to be more in-line with the PEP8 style guide (thus improving pylint score), made this so it should be python 2 and 3 compatible. --- .gitignore | 1 + CC-Bootloader/rfcat_bootloader | 177 +++++----- package.sh | 1 + requirements.txt | 1 + rfcat | 19 +- rfcat_msfrelay | 127 ++++---- rfcat_server | 58 ++-- rflib/__init__.py | 41 +-- rflib/bits.py | 319 +++++++++--------- rflib/cc111Xhparser.py | 65 ++-- rflib/ccrecvdump.py | 8 +- rflib/ccspecan.py | 84 ++--- rflib/chipcon_nic.py | 568 ++++++++++++++++----------------- rflib/chipcon_usb.py | 2 +- rflib/chipcondefs.py | 4 +- rflib/const.py | 3 +- rflib/intelhex.py | 205 ++++++------ rflib/rflib_version.py | 2 +- setup.py | 7 +- tests/test_basics.py | 4 +- tests/test_fakedongle.py | 36 ++- 21 files changed, 884 insertions(+), 848 deletions(-) diff --git a/.gitignore b/.gitignore index 368fb11..b463531 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,4 @@ venv/ ENV/ env.bak/ venv.bak/ +.idea/ diff --git a/CC-Bootloader/rfcat_bootloader b/CC-Bootloader/rfcat_bootloader index 7a040b5..34fdf8c 100755 --- a/CC-Bootloader/rfcat_bootloader +++ b/CC-Bootloader/rfcat_bootloader @@ -7,43 +7,45 @@ from serial.serialutil import SerialException bootloader_error_codes = { - '0' : "OK", - '1' : "Intel HEX Invalid", - '2' : "Bad Checksum", - '3' : "Bad Address", - '4' : "Bad Record Type", - '5' : "Record Too Long" + '0': "OK", + '1': "Intel HEX Invalid", + '2': "Bad Checksum", + '3': "Bad Address", + '4': "Bad Record Type", + '5': "Record Too Long" } + def download_code(ihx_file, serial_port): for line in ihx_file.readlines(): record_type = int(line[7:9], 16) - if (record_type == 0x00): - print "Writing", line[:-1], + if record_type == 0x00: + print("Writing {}".format(line[:-1])) serial_port.write(line) rc = serial_port.read() - print " RC =", rc, + print(" RC = {}".format(rc)) if rc in bootloader_error_codes: - print "(%s)" % bootloader_error_codes[rc] + print("(%s)".format(bootloader_error_codes[rc])) else: - print "(Unknown Error)" - if (rc != '0'): - print "Error downloading code!" + print("(Unknown Error)") + if rc != '0': + print("Error downloading code!") return False else: - print "Skipping non data record: '%s'" % line[:-1] + print("Skipping non data record: '%s'".format(line[:-1])) return True + def verify_code(ihx_file, serial_port): - can_read_any= None + can_read_any = None for line in ihx_file.readlines(): record_type = int(line[7:9], 16) - if (record_type == 0x00): + if record_type == 0x00: length = int(line[1:3], 16) start_addr = int(line[3:7], 16) data = line[9:9+(length*2)] # first time around, check if we can only read 16 byte chunks - if can_read_any == None: + if can_read_any is None: can_read_any = False do_flash_read(serial_port, start_addr, 1) for read_data in serial_port: @@ -55,82 +57,87 @@ def verify_code(ihx_file, serial_port): else: break if not can_read_any: - print "*** warning! this version of CC-Bootloader can only read 16 byte blocks!" - print "*** upgrade recommended!" + print("*** warning! this version of CC-Bootloader can only read 16 byte blocks!") + print("*** upgrade recommended!") if can_read_any: - block_length= length + block_length = length else: - block_length= ((length / 16) + 1) * 16 - print "\rVerifying %04d bytes at address: %04X" % (length, start_addr), + block_length = ((length / 16) + 1) * 16 + print("\rVerifying %04d bytes at address: %04X".format(length, start_addr)) do_flash_read(serial_port, start_addr, block_length) - verify_data= '' + verify_data = '' for read_data in serial_port: - read_data= read_data.strip() - if (not data or read_data == ":00000001FF"): + read_data = read_data.strip() + if not data or read_data == ":00000001FF": break # strip header and checksum verify_data += read_data[9:-2] - if (data == verify_data[:length*2]): - print '(OK)', + if data == verify_data[:length * 2]: + print('(OK) ') else: - print 'Failed! Expected:', data, 'Got:', verify_data[:length*2] + print('Failed! Expected: ' + str(data) + ' Got: ' + str(verify_data[:length*2])) exit(1) sys.stdout.flush() else: - print "Skipping non data record: '%s'" % line[:-1] + print("Skipping non data record: '{}'".format(line[:-1])) return True + def run_user_code(serial_port): # User code is entered on intel HEX EOF record serial_port.write(":00000001FF\n") return True - + + def reset_bootloader(serial_port): serial_port.write(":00000022DE\n") rc = serial_port.read() - print "RC =", rc, + print("RC = {}".format(rc)) if rc in bootloader_error_codes: - print "(%s)" % bootloader_error_codes[rc] + print("(%s)".format(bootloader_error_codes[rc])) else: - print "(Unknown Error)" - if (rc != '0'): - print "Error resetting bootloader!" + print("(Unknown Error)") + if rc != '0': + print("Error resetting bootloader!") return False return True + def erase_all_user(serial_port): serial_port.write(":00000023DD\n") rc = serial_port.read() - print "RC =", rc, + print("RC = ".format(rc)) if rc in bootloader_error_codes: - print "(%s)" % bootloader_error_codes[rc] + print("(%s)".format(bootloader_error_codes[rc])) else: - print "(Unknown Error)" - if (rc != '0'): - print "Error erasing all user flash!" + print("(Unknown Error)") + if rc != '0': + print("Error erasing all user flash!") return False return True - + + def erase_user_page(serial_port, page): chksum = (0xDB + 0x100 - page) & 0xFF serial_port.write(":01000024%02X%02X\n" % (page, chksum)) rc = serial_port.read() - print "RC =", rc, + print("RC = ".format(rc)) if rc in bootloader_error_codes: - print "(%s)" % bootloader_error_codes[rc] + print("(%s)".format(bootloader_error_codes[rc])) else: - print "(Unknown Error)" - if (rc != '0'): - print "Error erasing user flash page!" + print("(Unknown Error)") + if rc != '0': + print("Error erasing user flash page!") return False return True + def do_flash_read(serial_port, start_addr, length): - chksum = (0xD9 + + chksum = (0xD9 + (0x100 - (start_addr & 0xFF)) + - (0x100 - ((start_addr>>8) & 0xFF)) + + (0x100 - ((start_addr >> 8) & 0xFF)) + (0x100 - (length & 0xFF)) + - (0x100 - ((length>>8) & 0xFF)) + (0x100 - ((length >> 8) & 0xFF)) ) & 0xFF serial_port.write(":02%04X25%04X%02X\n" % (start_addr, length, chksum)) @@ -139,16 +146,17 @@ def flash_read(ihx_file, serial_port, start_addr, length): do_flash_read(serial_port, start_addr, length) for line in serial_port: if not line == "\n": - if(ihx_file): + if ihx_file: ihx_file.write(line) else: - print line, - if (line == ":00000001FF\n"): + print(line) + if line == ":00000001FF\n": break + def print_usage(): import sys - print """ + print(""" CC Bootloader Download Utility Usage: %s serial_port command @@ -193,14 +201,15 @@ Commands: verify Verify hex_file matches device flash memory. - """ % sys.argv[0] + """ % sys.argv[0]) + if __name__ == '__main__': import sys - if (len(sys.argv) < 3): + if len(sys.argv) < 3: print_usage() sys.exit(1) - + serial_port_name = sys.argv[1] command = sys.argv[2] options = sys.argv[3:] @@ -210,59 +219,61 @@ if __name__ == '__main__': serial_port = serial.Serial(serial_port_name, timeout=1) break - except SerialException,e: - print "\nSomething is talking to the RfCat dongle (Modem Manager, most likely). Retrying again after 5 seconds. This can take a minute, please be patient. (error: %r)" % e + except SerialException as e: + print("\nSomething is talking to the RfCat dongle (Modem Manager, most" + "likely). Retrying again after 5 seconds. This can take a " + "minute, please be patient. (error: {})".format(e)) time.sleep(6) except KeyboardInterrupt: - print "Caught , exitting..." - exit (-2) - except Exception,e: + print("Caught , exitting...") + exit(-2) + except Exception as e: sys.excepthook(*sys.exc_info()) - print e - exit (-1) - + print(e) + exit(-1) + try: - if (command == 'download' or command == 'verify'): - if (len(options) < 1): + if command == 'download' or command == 'verify': + if len(options) < 1: print_usage() else: ihx_filename = options[0] ihx_file = open(ihx_filename, 'r') - if (command == 'download'): + if command == 'download': download_code(ihx_file, serial_port) else: verify_code(ihx_file, serial_port) - - elif (command == 'run'): + + elif command == 'run': run_user_code(serial_port) - - elif (command == 'reset'): + + elif command == 'reset': reset_bootloader(serial_port) - - elif (command == 'erase_all'): + + elif command == 'erase_all': erase_all_user(serial_port) - - elif (command == 'erase'): - if (len(options) < 1): + + elif command == 'erase': + if len(options) < 1: print_usage() else: erase_user_page(serial_port, int(options[0])) - - elif (command == 'read'): - if (len(options) < 2): + + elif command == 'read': + if len(options) < 2: print_usage() else: ihx_file = None - if(len(options) == 3): + if len(options) == 3: try: ihx_filename = options[2] ihx_file = open(ihx_filename, 'w') - print 'reading to:', ihx_filename + print('reading to: {}'.format(ihx_filename)) except: - print "couldn't open output file:", ihx_filename + print("couldn't open output file: {}".format(ihx_filename)) exit(2) flash_read(ihx_file, serial_port, int(options[0], 16), int(options[1], 16)) - + else: print_usage() finally: diff --git a/package.sh b/package.sh index e34e334..6400abe 100755 --- a/package.sh +++ b/package.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash echo "=== set revision: `./revision.sh` ===" if ( which sdcc ) diff --git a/requirements.txt b/requirements.txt index 98ab555..3f68644 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +pyserial PySide2 pyusb future diff --git a/rfcat b/rfcat index 30a3e53..6c13457 100755 --- a/rfcat +++ b/rfcat @@ -10,7 +10,7 @@ readline.parse_and_bind("tab: complete") from rflib import * -logging.basicConfig(level=logging.DEBUG, format='%(asctime)s:%(levelname)s:%(name)s: %(message)s') +logging.basicConfig(level=logging.DEBUG, format='{asctime:!s}:{levelname:!s}:{name:!s}: {message:!s}') logger = logging.getLogger(__name__) @@ -34,20 +34,26 @@ if __name__ == "__main__": import argparse parser = argparse.ArgumentParser() - parser.add_argument('-r', '--research', default=False, action="store_true", help='Interactive Python and the "d" instance to talk to your dongle. melikey longtime.') + parser.add_argument('-r', '--research', default=False, action="store_true", help='Interactive Python and the "d" ' + 'instance to talk to your dongle. ' + ' melikey longtime.') parser.add_argument('-i', '--index', default=0, type=int) parser.add_argument('-s', '--specan', default=False, action="store_true", help='start spectrum analyzer') parser.add_argument('-f', '--centfreq', default=902e6, type=float) parser.add_argument('-c', '--inc', default=250e3, type=float) parser.add_argument('-n', '--specchans', default=104, type=int) - parser.add_argument('--bootloader', default=False, action="store_true", help='trigger the bootloader (use in order to flash the dongle)') - parser.add_argument('--force', default=False, action="store_true", help='use this to make sure you want to set bootloader mode (you *must* flash after setting --bootloader)') + parser.add_argument('--bootloader', default=False, action="store_true", help='trigger the bootloader (use in order ' + 'to flash the dongle)') + parser.add_argument('--force', default=False, action="store_true", help='use this to make sure you want to set ' + 'bootloader mode (you *must* flash after ' + 'setting --bootloader)') ifo = parser.parse_args() if ifo.bootloader: if not ifo.force: - print("Protecting you from yourself. If you want to trigger Bootloader mode (you will then *have* to flash a new RfCat image on it) use the --force argument as well") + print("Protecting you from yourself. If you want to trigger Bootloader mode (you will then *have* to " + "flash a new RfCat image on it) use the --force argument as well") exit(-1) print("Entering RfCat Bootloader mode, ready for new image...") @@ -55,7 +61,7 @@ if __name__ == "__main__": exit(0) elif ifo.specan: - RfCat(ifo.index).specan(ifo.centfreq,ifo.inc,ifo.specchans) + RfCat(ifo.index).specan(ifo.centfreq, ifo.inc, ifo.specchans) elif ifo.research: interactive(ifo.index, DongleClass=RfCat, intro=intro) @@ -64,4 +70,3 @@ if __name__ == "__main__": # do the full-rfcat thing d = RfCat(ifo.index, debug=False) d.rf_redirection((sys.stdin, sys.stdout)) - diff --git a/rfcat_msfrelay b/rfcat_msfrelay index a682165..800de1d 100644 --- a/rfcat_msfrelay +++ b/rfcat_msfrelay @@ -13,8 +13,8 @@ import base64 import socket import threading -from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer -from urlparse import parse_qs,urlparse +from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer +from urlparse import parse_qs, urlparse from rflib import * # Global Nic used for MSFHandler @@ -26,6 +26,7 @@ last_sent = 0 username = None password = None + class MSFHandler(BaseHTTPRequestHandler): def status(self): status = {} @@ -37,7 +38,7 @@ class MSFHandler(BaseHTTPRequestHandler): except: hw_version = "not supported" status["operational"] = 1 # Possibly connect this to ping? - status["hw_specialty"] = { "rftransceiver": True } + status["hw_specialty"] = { "rftransceiver": True} status["hw_capabilities"] = { "cc11xx": True} status["last_10_errors"] = last_errors status["api_version"] = "0.0.2" @@ -55,33 +56,34 @@ class MSFHandler(BaseHTTPRequestHandler): return stats def datetime(self): - return { "sytem_datetime": int(time.time()) } + return {"sytem_datetime": int(time.time())} def timezone(self): - return { "system_timezone": time.strftime("%Z") } + return {"system_timezone": time.strftime("%Z")} def supported_idx(self): - return { "indexes": [ nic.idx ] } + return {"indexes": [nic.idx]} def reset(self): nic.resetup() - return { "status": "Resetting" } + return {"status": "Resetting"} def set_freq(self, args): mhz = 24 - if not "freq" in args: + if "freq" not in args: return self.not_supported() if "mhz" in args: mhz = int(args["mhz"]) nic.setFreq(int(args["freq"][0]), mhz) - return { "success": True } + return {"success": True} def get_modulations(self): - mods = [ "2FSK", "GFSK", "4FSK", "ASK/OOK", "MSK", "2FSK/Manchester", "GFSK/Manchester", "ASK/OOK/Manchester", "MSK/Manchester" ] + mods = ["2FSK", "GFSK", "4FSK", "ASK/OOK", "MSK", "2FSK/Manchester", "GFSK/Manchester", "ASK/OOK/Manchester", + "MSK/Manchester"] return mods def set_modulation(self, args): - if not "mod" in args: + if "mod" not in args: return self.not_supported() modvalue = -1 for modv, modstr in MODULATIONS.items(): @@ -92,31 +94,31 @@ class MSFHandler(BaseHTTPRequestHandler): try: nic.setMdmModulation(modvalue) except: - return { "success": False } - return { "success": True } + return {"success": False} + return {"success": True} # Fixed Len def make_packet_flen(self, args): - if not "len" in args: + if "len" not in args: return self.not_supported() try: nic.makePktFLEN(int(args["len"][0])) except: - return { "success": False } - return { "success": True } + return {"success": False} + return {"success": True} # Variable Len def make_packet_vlen(self, args): - if not "len" in args: + if "len" not in args: return self.not_supported() try: nic.makePktVLEN(int(args["len"][0])) except: - return { "success": False } - return { "success": True } + return {"success": False} + return {"success": True} def set_mode(self, args): - if not "mode" in args: + if "mode" not in args: return self.not_supported() mode = args["mode"][0] if mode == "TX" or mode == "tx": @@ -127,21 +129,21 @@ class MSFHandler(BaseHTTPRequestHandler): nic.setModeIDLE() else: return self.not_supported() - return { "success": True } + return {"success": True} def enablePktCRC(self): nic.setEnablePktCRC() - return { "success": True } + return {"success": True} def enableManchester(self): nic.setEnableMdmManchester() - return { "success": True} + return {"success": True} def set_channel(self, args): - if not "channel" in args: + if "channel" not in args: return self.not_supported() nic.setChannel(int(args["channel"])) - return { "success": True } + return {"success": True} def set_channel_bandwidth(self, args): mhz = 24 @@ -150,7 +152,7 @@ class MSFHandler(BaseHTTPRequestHandler): if "mhz" in args: mhz = int(args["mhz"][0]) nic.setMdmChanBW(int(args["bw"]), mhz) - return { "success": True } + return {"success": True} def set_channel_spc(self, args): chanspc = None @@ -166,69 +168,69 @@ class MSFHandler(BaseHTTPRequestHandler): try: nic.setMdmChanSpc(chanspc, chanspc_m, chanspc_e, mhz) except: - return { "success": False } - return { "success": True } + return {"success": False} + return {"success": True} def set_baud_rate(self, args): mhz = 24 - if not "rate" in args: + if "rate" not in args: return self.not_supported() if "mhz" in args: mhz = int(args["mhz"][0]) try: nic.setMdmDRate(int(args["rate"][0]), mhz) except: - return { "success": False } - return { "success": True } + return {"success": False} + return {"success": True} def set_deviation(self, args): mhz = 24 - if not "deviat" in args: + if "deviat" not in args: return self.not_supported() if "mhz" in args: mhz = int(args["mhz"][0]) try: nic.setMdmDeviatn(int(args["deviat"][0]), mhz) except: - return { "success": False } - return { "success": True } + return {"success": False} + return {"success": True} def set_sync_word(self, args): - if not "word" in args: + if "word" not in args: return self.not_supported() nic.setMdmSyncWord(int(args["word"][0])) - return { "success": True} + return {"success": True} def set_sync_mode(self, args): - if not "mode" in args: + if "mode" not in args: return self.not_supported() nic.setMdmSyncMode(int(args["mode"][0])) - return { "success": True } + return {"success": True} def set_number_preamble(self, args): - if not "num" in args: + if "num" not in args: return self.not_supported() nic.setMdmNumPreamble(int(args["num"][0])) - return { "success": True } + return {"success": True} def set_lowball(self): nic.lowball(1) - return { "success": True } + return {"success": True} def set_maxpower(self): nic.setMaxPower() - return { "success": True } + return {"success": True} def set_power(self, args): - if not "power" in args: + if "power" not in args: return self.not_supported() nic.setPower(int(args["power"][0])) - return { "success": True } + return {"success": True} def rfxmit(self, args): repeat = 0 offset = 0 - if not "data" in args: + if "data" not in args: return self.not_supported() if "repeat" in args: repeat = int(args["repeat"][0]) @@ -236,11 +238,11 @@ class MSFHandler(BaseHTTPRequestHandler): offset = int(args["offset"][0]) data = base64.urlsafe_b64decode(args["data"][0]) nic.RFxmit(data, repeat, offset) - return { "success": True } # Should do some checks here eventually + return {"success": True} # Should do some checks here eventually def rfrecv(self, args): - timeout=USB_RX_WAIT - blocksize=None + timeout = USB_RX_WAIT + blocksize =None if "timeout" in args: timeout = int(args["timeout"][0]) if "blocksize" in args: @@ -250,15 +252,14 @@ class MSFHandler(BaseHTTPRequestHandler): except: return {} msg, ts = data - return { "data": base64.urlsafe_b64encode(msg), "timestamp": ts } - + return {"data": base64.urlsafe_b64encode(msg), "timestamp": ts} def not_supported(self): - return { "status": "not supported" } + return {"status": "not supported"} def send(self, data, resp=200): self.send_response(resp) - self.send_header('Content-type','application/json') + self.send_header('Content-type', 'application/json') self.end_headers() self.wfile.write(json.dumps(data)) return @@ -271,8 +272,8 @@ class MSFHandler(BaseHTTPRequestHandler): self.wfile.write("Please Authenticate") def do_GET(self): - if not password == None: - if self.headers.getheader('Authorization') == None: + if not password is None: + if self.headers.getheader('Authorization') is None: print("Did not authenticate") self.do_AUTHHEAD() return @@ -282,23 +283,23 @@ class MSFHandler(BaseHTTPRequestHandler): return url = urlparse(self.path) args = parse_qs(url.query) - if self.path=="/status": + if self.path == "/status": self.send(self.status()) - elif self.path=="/statistics": + elif self.path == "/statistics": self.send(self.statistics()) - elif self.path=="/settings/datetime": + elif self.path == "/settings/datetime": self.send(self.datetime()) - elif self.path=="/settings/timezone": + elif self.path == "/settings/timezone": self.send(self.timezone()) - elif self.path=="/control/factory_reset": + elif self.path == "/control/factory_reset": self.send(self.reset()) - elif self.path=="/rftransceiver/supported_idx": + elif self.path == "/rftransceiver/supported_idx": self.send(self.supported_idx()) elif self.path.startswith("/rftransceiver/"): re_idx = re.compile("/rftransceiver/(\d+)/") m = re_idx.match(self.path) if m: - idx = m.group(1) + idx = m.group(1) # FIXME idx isn't used, remove? if self.path.find("/set_freq?") > -1: self.send(self.set_freq(args)) elif self.path.find("/get_modulations") > -1: @@ -349,6 +350,7 @@ class MSFHandler(BaseHTTPRequestHandler): self.send(self.not_supported(), 404) return + class CC1111NIC_MSFRelay(cmd.Cmd): intro = """ cc1111usb Metasploit Relay @@ -375,7 +377,7 @@ class CC1111NIC_MSFRelay(cmd.Cmd): try: buf = '' self._nicsock = HTTPServer((self._ip, self._nicport), MSFHandler) - starttime = int(time.time()) + starttime = int(time.time()) # FIXME starttime isn't used, remove? print("RfCat MSFRelay running.") self._nicsock.serve_forever() except KeyboardInterrupt: @@ -386,7 +388,6 @@ class CC1111NIC_MSFRelay(cmd.Cmd): sys.excepthook(*sys.exc_info()) - if __name__ == "__main__": import argparse diff --git a/rfcat_server b/rfcat_server index e64173f..350af57 100644 --- a/rfcat_server +++ b/rfcat_server @@ -13,6 +13,7 @@ from rflib import * DATA_START_IDX = 4 # without the app/cmd/len bytes, the data starts at byte 4 + def splitargs(cmdline): cmdline = cmdline.replace('\\\\"', '"').replace('\\"', '') patt = re.compile('\".+?\"|\S+') @@ -38,6 +39,7 @@ SYNC_MODES = { READLINE_MAX_READ_LEN = 1000 + class FileSocket(socket.socket): def __init__(self, sock): self._buf = '' @@ -48,7 +50,6 @@ class FileSocket(socket.socket): return getattr(self._sock, attr) elif hasattr(self, attr): return getattr(self.__class__, attr) - def write(self, data): return self.sendall(data) @@ -67,7 +68,6 @@ class FileSocket(socket.socket): return data - def flush(self): pass @@ -75,6 +75,7 @@ class FileSocket(socket.socket): class KillCfgLoop(Exception): pass + class CC1111NIC_Server(cmd.Cmd): intro = """ welcome to the cc1111usb interactive config tool. hack fun! @@ -85,7 +86,7 @@ class CC1111NIC_Server(cmd.Cmd): self.use_rawinput = rawinput self.printable = printable - #self.nic = FHSSNIC(nicidx) + # self.nic = FHSSNIC(nicidx) self.nic = RfCat(nicidx) self._ip = ip self._nicport = nicport @@ -105,7 +106,7 @@ class CC1111NIC_Server(cmd.Cmd): while self._go: # serve the NIC port try: - buf = '' + buf = '' # FIXME buf isnt used, remove? self._nicsock = socket.socket() s = self._nicsock s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) @@ -114,7 +115,7 @@ class CC1111NIC_Server(cmd.Cmd): while True: # implement pipe between the usb RF NIC and the TCP socket try: - print(("Listening for NIC connection on port %d" % self._nicport), file=sys.stderr) + print(("Listening for NIC connection on port {:d}".format(self._nicport)), file=sys.stderr) self._nicsock = s.accept() rs, addr = self._nicsock rs.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) @@ -123,7 +124,7 @@ class CC1111NIC_Server(cmd.Cmd): # handing off the socket for rf_redirection, socket-style self.nic.rf_redirection( (rs,) ) - print(("NIC connection on port %d terminated" % self._nicport), file=sys.stderr) + print(("NIC connection on port {:d} terminated".format(self._nicport)), file=sys.stderr) except KeyboardInterrupt: self._go = False @@ -135,8 +136,6 @@ class CC1111NIC_Server(cmd.Cmd): except: sys.excepthook(*sys.exc_info()) - - def startConfigThread(self): self._cfgthread = threading.Thread(target=self._cfgRun) self._cfgthread.setDaemon(True) @@ -175,15 +174,13 @@ class CC1111NIC_Server(cmd.Cmd): #ok so just kill the connection :) def Print(self, info): - print((info), file=self.stdout) - + print(info, file=self.stdout) def do_stop(self, line): """ stop the nic """ self._pause = True - def do_start(self, line): """ @@ -197,10 +194,10 @@ class CC1111NIC_Server(cmd.Cmd): ''' * SPECAN - spectrum analysis mode ''' - basefreq=902e6 - inc=25e3 - count=104 - self.nic._doSpecAn(basefreq,inc,count) + basefreq = 902e6 + inc = 25e3 + count = 104 + self.nic._doSpecAn(basefreq, inc, count) def do_stopspecan(self,line): ''' @@ -226,7 +223,7 @@ class CC1111NIC_Server(cmd.Cmd): ''' self.Print("Calibrating radio...") self.nic.setModeCAL() - while (self.getMARCSTATE()[1] not in (MARC_STATE_IDLE, MARC_STATE_RX, MARC_STATE_TX)): + while self.getMARCSTATE()[1] not in (MARC_STATE_IDLE, MARC_STATE_RX, MARC_STATE_TX): sys.stdout.write('.') self.Print("done calibrating.") @@ -238,7 +235,7 @@ class CC1111NIC_Server(cmd.Cmd): ''' self.Print("Calibrating radio...") self.nic.setModeTX() - while (self.getMARCSTATE()[1] not in (MARC_STATE_TX)): + while self.getMARCSTATE()[1] not in MARC_STATE_TX: sys.stdout.write('.') self.Print("Radio has reached the TX state.") @@ -252,7 +249,7 @@ class CC1111NIC_Server(cmd.Cmd): ''' self.Print("Radio entering RX state...") self.nic.setModeTX() - while (self.getMARCSTATE()[1] not in (MARC_STATE_RX)): + while self.getMARCSTATE()[1] not in MARC_STATE_RX: sys.stdout.write('.') self.Print("Radio has reached the RX state.") @@ -265,7 +262,7 @@ class CC1111NIC_Server(cmd.Cmd): ''' self.Print("Radio entering IDLE state...") self.nic.setModeIDLE() - while (self.getMARCSTATE()[1] not in (MARC_STATE_IDLE)): + while self.getMARCSTATE()[1] not in MARC_STATE_IDLE: sys.stdout.write('.') self.Print("Radio has reached the IDLE state.") @@ -275,7 +272,7 @@ class CC1111NIC_Server(cmd.Cmd): ''' self.Print("Radio entering FSTXON state...") self.nic.setModeFSTXON() - while (self.getMARCSTATE()[1] not in (MARC_STATE_FSTXON)): + while self.getMARCSTATE()[1] not in MARC_STATE_FSTXON: sys.stdout.write('.') self.Print("Radio has reached the FSTXON state.") @@ -284,7 +281,8 @@ class CC1111NIC_Server(cmd.Cmd): * MODULATION - set the RF modulation scheme. values include "2FSK", "GFSK", "4FSK", "MSK", "ASK_OOK". note: GFSK/OOK/ASK only up to 250kbaud, MSK only above 26kbaud and no manchester encoding. ''' if not len(line) or line not in ("2FSK", "GFSK", "4FSK", "MSK", "ASK_OOK"): - self.Print('need to give me one of the values "2FSK", "GFSK", "4FSK" (experimental), "MSK", "ASK_OOK" got: "%s"' % line) + self.Print('need to give me one of the values "2FSK", "GFSK", "4FSK" ' + '(experimental), "MSK", "ASK_OOK" got: "{}"'.format(line)) return mod = eval("MOD_"+line.strip()) @@ -292,7 +290,6 @@ class CC1111NIC_Server(cmd.Cmd): self.nic.setMdmModulation(mod) self.nic.setModeRX() - def complete_modulation(self, text, line, begidx, endidx): self.Print("complete_modulation: %s %s %s %s") % (repr(text), repr(line), repr(begidx), repr(endidx)) @@ -653,13 +650,13 @@ class CC1111NIC_Server(cmd.Cmd): (be very cautious! the firmware expects certain things like return-to-RX, and no RX-timeout, etc..) ''' - def do_show_config(self, line): + def do_show_config(self, line): # FIXME Line isnt used, remove? ''' * show_config - Print a represented string of the radio configuration ''' self.Print(self.nic.reprRadioConfig()) - def do_dump_config(self, line): + def do_dump_config(self, line): # FIXME line isnt used, remove? ''' * dump_config - Print a hex representation of the radio configuration registers ''' @@ -690,15 +687,14 @@ class CC1111NIC_Server(cmd.Cmd): ''' * save_config - save the radio configuration to a file you specify ''' - file(line, "wb").write(repr(self.nic.getRadioConfig())) - + open(line, "wb").write(repr(self.nic.getRadioConfig()).encode()) def do_load_config(self, line): ''' * load_config (be very cautious! the firmware expects certain things like return-to-RX, and no RX-timeout, etc..) ''' - config = file(line, "rb").read() + config = open(line, "rb").read() self.nic.setModeIDLE() print("loading config from bytes: %s" % repr(config)) self.setRadioConfig(config) @@ -712,7 +708,7 @@ class CC1111NIC_Server(cmd.Cmd): if 0 < len(args) < 3: if len(args) == 1: args.append('1') - self.Print(self.peek(int(args[0])), int(args[1]).encode('hex')) + self.Print(self.peek(int(args[0])), int(args[1]).encode('hex')) # FIXME more arguments than self.Print takes? else: self.Print("please provide exactly one xdata address and an optional length!") @@ -726,7 +722,6 @@ class CC1111NIC_Server(cmd.Cmd): except: self.Print("please provide exactly one xdata address and hex data") - def do_ping(self, line): ''' * ping - hello? is the dongle still responding? @@ -769,7 +764,7 @@ class CC1111NIC_Server(cmd.Cmd): if len(args) > 1: self.nic.setRFRegister(val) else: - self.Print("%s : %x" % (args[0], ord(self.nic.peek(val)))) + self.Print("{} : {:x}".format(args[0], ord(self.nic.peek(val)))) except: self.Print(sys.exc_info()) @@ -791,7 +786,7 @@ class CC1111NIC_Server(cmd.Cmd): else: self.printable = True - self.Print("printable output is: %s" % ('disabled','enabled')[self.printable]) + self.Print("printable output is: %s" % ('disabled', 'enabled')[self.printable]) def do_rawinput(self, line): ''' @@ -824,7 +819,6 @@ class CC1111NIC_Server(cmd.Cmd): ''' - if __name__ == "__main__": dongleserver = CC1111NIC_Server() diff --git a/rflib/__init__.py b/rflib/__init__.py index 5b1ecc2..c18883f 100755 --- a/rflib/__init__.py +++ b/rflib/__init__.py @@ -3,8 +3,6 @@ from __future__ import print_function from __future__ import absolute_import -from builtins import str -from builtins import range from .chipcon_nic import * import rflib.bits as rfbits @@ -13,12 +11,13 @@ MAX_FREQ = 936e6 + class RfCat(FHSSNIC): def RFdump(self, msg="Receiving", maxnum=100, timeoutms=1000): try: for x in range(maxnum): y, t = self.RFrecv(timeoutms) - print("(%5.3f) %s: %s" % (t, msg, y.encode('hex'))) + print("({:5.3f}) {}: {}".format(t, msg, y.encode('hex'))) except ChipconUsbTimeoutException: pass @@ -34,7 +33,7 @@ def scan(self, basefreq=902e6, inc=250e3, count=104, delaysec=2, drate=38400, lo try: print("(press Enter to quit)") for freq in range(int(basefreq), int(basefreq+(inc*count)), int(inc)): - print("Scanning for frequency %d..." % freq) + print("Scanning for frequency {:d}...".format(freq)) self.setFreq(freq) self.RFdump(timeoutms=delaysec*1000) if keystop(): @@ -76,8 +75,8 @@ def _doSpecAn(self, centfreq, inc, count): halfspec = spectrum / 2.0 basefreq = centfreq - halfspec if (count * inc) + basefreq > MAX_FREQ: - raise Exception("Sorry, %1.3f + (%1.3f * %1.3f) is higher than %1.3f" % - (basefreq, count, inc)) + raise Exception("Sorry, {:1.3f} + ({:1.3f} * (:1.3f}) is " + "higher than {:1.3f}".format(basefreq, count, inc)) self.getRadioConfig() self._specan_backup_radiocfg = self.radiocfg @@ -87,7 +86,7 @@ def _doSpecAn(self, centfreq, inc, count): freq, fbytes = self.getFreq() delta = self.getMdmChanSpc() - self.send(APP_NIC, RFCAT_START_SPECAN, "%c" % (count) ) + self.send(APP_NIC, RFCAT_START_SPECAN, "{:c}".format(count)) return freq, delta def _stopSpecAn(self): @@ -98,14 +97,13 @@ def _stopSpecAn(self): self.radiocfg = self._specan_backup_radiocfg self.setRadioConfig() - - def rf_configure(*args, **kwargs): + def rf_configure(self, *args, **kwargs): self.setRFparameters(*args, **kwargs) def rf_redirection(self, fdtup, use_rawinput=False, printable=False): buf = '' - if len(fdtup)>1: + if len(fdtup) > 1: fd0i, fd0o = fdtup else: fd0i, = fdtup @@ -117,11 +115,11 @@ def rf_redirection(self, fdtup, use_rawinput=False, printable=False): try: while True: - #if self._pause: + # if self._pause: # continue try: - x,y,z = select.select([fd0i ], [], [], .1) + x, y, z = select.select([fd0i], [], [], .1) if fd0i in x: # FIXME: make this aware of VLEN/FLEN and the proper length if fdsock: @@ -137,10 +135,10 @@ def rf_redirection(self, fdtup, use_rawinput=False, printable=False): if vlen: pktlen = ord(buf[0]) - #FIXME: probably want to take in a length struct here and then only send when we have that many bytes... + # FIXME: probably want to take in a length struct here and then only send when we have that many bytes... data = buf[:pktlen] if use_rawinput: - data = eval('"%s"'%data) + data = eval('"{}"'.format(data)) if len(buf) >= pktlen: self.RFxmit(data) @@ -164,7 +162,7 @@ def rf_redirection(self, fdtup, use_rawinput=False, printable=False): except ChipconUsbTimeoutException: pass - #special handling of specan dumps... somewhat set in solid jello + # special handling of specan dumps... somewhat set in solid jello try: data, time = self.recv(APP_SPECAN, 1, 1) data = struct.pack("H", ">I", ">I", ">Q", ">Q", ">Q", ">Q"] -sizes = [ 0, 1, 2, 4, 4, 8, 8, 8, 8] -masks = [ (1<<(8*i))-1 for i in range(9) ] +sizes = [0, 1, 2, 4, 4, 8, 8, 8, 8] +masks = [(1 << (8 * i)) - 1 for i in range(9)] PYVER = int(sys.version[0]) + + def correctbytes(val): global PYVER @@ -22,9 +24,10 @@ def correctbytes(val): return bytes([val]) + def wtfo(string): outstr = [] - bitlen = len(outstr) * 8 + bitlen = len(outstr) * 8 # FIXME bitlen is not used, remove? for x in range(8): outstr.append(shiftString(string, x)) @@ -34,6 +37,7 @@ def wtfo(string): return outstr + def strBitReverse(string): # FIXME: this is really dependent upon python's number system. large strings will not convert well. # FIXME: break up array of 8-bit numbers and bit-swap in the array @@ -42,23 +46,24 @@ def strBitReverse(string): # convert to MSB number for x in range(len(string)): ch = string[x] - #num |= (ord(ch)<<(8*x)) # this is LSB + # num |= (ord(ch)<<(8*x)) # this is LSB num <<= 8 num |= ord(ch) - print (hex(num)) + print(hex(num)) rnum = bitReverse(num, bits) - print (hex(rnum)) + print(hex(rnum)) # convert back from MSB number to string out = [] for x in range(len(string)): - out.append(correctbytes(rnum&0xff)) + out.append(correctbytes(rnum & 0xff)) rnum >>= 8 out.reverse() print(''.join(out).encode('hex')) return ''.join(out) + def strXorMSB(string, xorval, size): ''' lsb @@ -77,27 +82,27 @@ def strXorMSB(string, xorval, size): out.append(tempstr) return ''.join(out) - - def bitReverse(num, bitcnt): newnum = 0 for idx in range(bitcnt): newnum <<= 1 - newnum |= num&1 + newnum |= num & 1 num >>= 1 return newnum + def shiftString(string, bits): - carry = 0 + carry = 0 # FIXME carry is never used, remove it? news = [] for x in range(len(string)-1): newc = ((ord(string[x]) << bits) + (ord(string[x+1]) >> (8-bits))) & 0xff - news.append("%c"%newc) - newc = (ord(string[-1])<> 6) # start with bit 7 - nb = ( ( fbRegister>>3) ^ (fbRegister>>6)) &1 - fbRegister = ( ( fbRegister << 1 ) | nb ) & 0x7f # do shifting - #print "retval: %x fbRegister: %x bit7: %x nb: %x" % (retval, fbRegister, (fbRegister>>6), nb) + nb = ((fbRegister >> 3) ^ (fbRegister >> 6)) & 1 + fbRegister = ((fbRegister << 1) | nb) & 0x7f # do shifting + # print "retval: %x fbRegister: %x bit7: %x nb: %x" % (retval, fbRegister, (fbRegister>>6), nb) return retval + def getNextByte_feedbackRegister7bitsLSB(): ''' this returns a byte of a 7-bit feedback register stemming off bits 4 and 7 @@ -123,13 +129,13 @@ def getNextByte_feedbackRegister7bitsLSB(): global fbRegister retval = 0 - for x in range(8): #MSB, + for x in range(8): # MSB, retval >>= 1 - retval |= ((fbRegister << 1)&0x80) # start with bit 7 + retval |= ((fbRegister << 1) & 0x80) # start with bit 7 - nb = ( ( fbRegister>>3) ^ (fbRegister>>6)) &1 - fbRegister = ( ( fbRegister << 1 ) | nb ) & 0x7f # do shifting - #print "retval: %x fbRegister: %x bit7: %x nb: %x" % (retval, fbRegister, (fbRegister>>6), nb) + nb = ((fbRegister >> 3) ^ (fbRegister >> 6)) & 1 + fbRegister = ((fbRegister << 1) | nb) & 0x7f # do shifting + # print "retval: %x fbRegister: %x bit7: %x nb: %x" % (retval, fbRegister, (fbRegister>>6), nb) return retval @@ -138,13 +144,14 @@ def whitenData(data, seed=0xffff, getNextByte=getNextByte_feedbackRegister7bitsM global fbRegister fbRegister = seed - carry = 0 + carry = 0 # FIXME carry is never used, remove it? news = [] for x in range(len(data)-1): - newc = ((ord(data[x]) ^ getNextByte() ) & 0xff) - news.append("%c"%newc) + newc = ((ord(data[x]) ^ getNextByte()) & 0xff) + news.append("{:c}".format(newc)) return "".join(news) + def findSyncWord(byts, sensitivity=4, minpreamble=2): ''' seek SyncWords from a raw bitstream. @@ -153,10 +160,10 @@ def findSyncWord(byts, sensitivity=4, minpreamble=2): possDwords = [] # find the preamble (if any) while True: # keep searching through string until we don't find any more preamble bits to pick on - sbyts = byts - pidx = byts.find("\xaa"*minpreamble) + sbyts = byts # FIXME sbyts is never used, after assigning it the value of byts, remove it? + pidx = byts.find("\xaa" * minpreamble) if pidx == -1: - pidx = byts.find("\x55"*minpreamble) + pidx = byts.find("\x55" * minpreamble) byts = shiftString(byts, 1) if pidx == -1: @@ -164,46 +171,46 @@ def findSyncWord(byts, sensitivity=4, minpreamble=2): # chop off the nonsense before the preamble sbyts = byts[pidx:] - #print "sbyts: %s" % repr(sbyts) + # print "sbyts: %s" % repr(sbyts) # find the definite end of the preamble (ie. it may be sooner, but we know this is the end) - while (sbyts[0] == '\xaa' and len(sbyts)>2): + while sbyts[0] == '\xaa' and len(sbyts) > 2: sbyts = sbyts[1:] - #print "sbyts: %s" % repr(sbyts) + # print "sbyts: %s" % repr(sbyts) # now we look at the next 16 bits to narrow the possibilities to 8 # at this point we have no hints at bit-alignment aside from 0xaa vs 0x55 - dwbits, = struct.unpack(">H", sbyts[:2]) - #print "sbyts: %s" % repr(sbyts) - #print "dwbits: %s" % repr(dwbits) - if len(sbyts)>=3: - bitcnt = 0 + dwbits, = struct.unpack(">H", sbyts[:2]) # FIXME dwbits is not used, remove it? + # print "sbyts: %s" % repr(sbyts) + # print "dwbits: %s" % repr(dwbits) + if len(sbyts) >= 3: + bitcnt = 0 # FIXME bitcnt is never used, remove it? # bits1 = aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb # bits2 = bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bits1, = struct.unpack(">H", sbyts[:2]) bits1 = bits1 | (ord('\xaa') << 16) bits1 = bits1 | (ord('\xaa') << 24) bits1 <<= 8 - bits1 |= (ord(sbyts[2]) ) - #print "bits: %x" % (bits1) + bits1 |= (ord(sbyts[2])) + # print "bits: %x" % (bits1) bit = (5 * 8) - 2 # bytes times bits/byte #FIXME: MAGIC NUMBERS!? - while (bits1 & (3<>= (bit-16) - #while (bits1 & 0x30000 != 0x20000): # now we align the end of the 101010 pattern with the beginning of the dword + # while (bits1 & 0x30000 != 0x20000): # now we align the end of the 101010 pattern with the beginning of the dword # bits1 >>= 2 - #print "bits: %x" % (bits1) + # print "bits: %x" % (bits1) - bitcount = min( 2 * sensitivity, 17 ) + bitcount = min(2 * sensitivity, 17) for frontbits in range( bitcount ): # with so many bit-inverted systems, let's not assume we know anything about the bit-arrangement. \x55\x55 could be a perfectly reasonable preamble. poss = (bits1 >> frontbits) & 0xffff if not poss in possDwords: possDwords.append(poss) byts = byts[pidx+1:] - return possDwords + return possDwords # FIXME this code is unreachable due to 'while True' loop. def findSyncWordDoubled(byts): possDwords = [] @@ -220,54 +227,57 @@ def findSyncWordDoubled(byts): byts = byts[pidx:] # find the definite end of the preamble (ie. it may be sooner, but we know this is the end) - while (byts[0] == ('\xaa', '\x55')[bitoff] and len(byts)>2): + while byts[0] == ('\xaa', '\x55')[bitoff] and len(byts) > 2: byts = byts[1:] # now we look at the next 16 bits to narrow the possibilities to 8 # at this point we have no hints at bit-alignment - dwbits, = struct.unpack(">H", byts[:2]) - if len(byts)>=5: - bitcnt = 0 + dwbits, = struct.unpack(">H", byts[:2]) # FIXME dwbits is never used, remove? + if len(byts) >= 5: + bitcnt = 0 # FIXME bitcnt is never used, remove it? # bits1 = aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb # bits2 = bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb bits1, = struct.unpack(">H", byts[:2]) - bits1 = bits1 | (ord(('\xaa','\x55')[bitoff]) << 16) - bits1 = bits1 | (ord(('\xaa','\x55')[bitoff]) << 24) + bits1 = bits1 | (ord(('\xaa', '\x55')[bitoff]) << 16) + bits1 = bits1 | (ord(('\xaa', '\x55')[bitoff]) << 24) bits1 <<= 8 - bits1 |= (ord(byts[2]) ) + bits1 |= (ord(byts[2])) bits1 >>= bitoff bits2, = struct.unpack(">L", byts[:4]) bits2 <<= 8 - bits2 |= (ord(byts[4]) ) + bits2 |= (ord(byts[4])) bits2 >>= bitoff - frontbits = 0 - for frontbits in range(16, 40, 2): #FIXME: if this doesn't work, try 16, then 18+frontbits - dwb1 = (bits1 >> (frontbits)) & 3 - dwb2 = (bits2 >> (frontbits)) & 3 - print("\tfrontbits: %d \t\t dwb1: %s dwb2: %s" % (frontbits, bin(bits1 >> (frontbits)), bin(bits2 >> (frontbits)))) + for frontbits in range(16, 40, 2): # FIXME: if this doesn't work, try 16, then 18+frontbits + dwb1 = (bits1 >> frontbits) & 3 + dwb2 = (bits2 >> frontbits) & 3 + print("\tfrontbits: {:d} \t\t dwb1: {} dwb2: {}".format(frontbits, + bin(bits1 >> frontbits), + bin(bits2 >> frontbits))) if dwb2 != dwb1: break # frontbits now represents our unknowns... let's go from the other side now for tailbits in range(16, -1, -2): - dwb1 = (bits1 >> (tailbits)) & 3 - dwb2 = (bits2 >> (tailbits)) & 3 - print("\ttailbits: %d\t\t dwb1: %s dwb2: %s" % (tailbits, bin(bits1 >> (tailbits)), bin(bits2 >> (tailbits)))) + dwb1 = (bits1 >> tailbits) & 3 + dwb2 = (bits2 >> tailbits) & 3 + print("\ttailbits: {:d}\t\t dwb1: {} dwb2: {}".format(tailbits, bin(bits1 >> tailbits), + bin(bits2 >> tailbits))) if dwb2 != dwb1: tailbits += 2 break # now, if we have a double syncword, iinm, tailbits + frontbits >= 16 - print("frontbits: %d\t\t tailbits: %d, bits: %s " % (frontbits, tailbits, bin((bits2>>tailbits & 0xffffffff)))) - if (frontbits + tailbits >= 16): - tbits = bits2 >> (tailbits&0xffff) - tbits &= (0xffffffff) - print("tbits: %x" % tbits) - - poss = tbits&0xffffffff + print("frontbits: {:d}\t\t tailbits: {:d}, bits: {} ".format(frontbits, tailbits, + bin((bits2 >> tailbits & 0xffffffff)))) + if frontbits + tailbits >= 16: + tbits = bits2 >> (tailbits & 0xffff) + tbits &= 0xffffffff + print("tbits: {:x}".format(tbits)) + + poss = tbits & 0xffffffff if poss not in possDwords: possDwords.append(poss) else: @@ -277,50 +287,49 @@ def findSyncWordDoubled(byts): possDwords.reverse() return possDwords -#def test(): +# def test(): + def visBits(data): pass - def getBit(data, bit): idx = old_div(bit, 8) bidx = bit % 8 char = data[idx] - return (ord(char)>>(7-bidx)) & 1 - + return (ord(char) >> (7 - bidx)) & 1 def detectRepeatPatterns(data, size=64, minEntropy=.07): - #FIXME: convert strings to bit arrays before comparing. + # FIXME: convert strings to bit arrays before comparing. c1 = 0 c2 = 0 d1 = 0 p1 = 0 - mask = (1< 0: s1 = p1 - size s2 = p2 - size - print("s1: %d\t p1: %d\t " % (s1, p1)) - print("s2: %d\t p2: %d\t " % (s2, p2)) + print("s1: {:d}\t p1: {:d}\t ".format(s1, p1)) + print("s2: {:d}\t p2: {:d}\t ".format(s2, p2)) # complete the pattern until the numbers differ or meet while True: p1 += 1 p2 += 1 - #print "s1: %d\t p1: %d\t " % (s1, p1) - #print "s2: %d\t p2: %d\t " % (s2, p2) + # print "s1: %d\t p1: %d\t " % (s1, p1) + # print "s2: %d\t p2: %d\t " % (s2, p2) if p2 >= bitlen: break - b1 = getBit(data,p1) - b2 = getBit(data,p2) + b1 = getBit(data, p1) + b2 = getBit(data, p2) if p1 == s2 or b1 != b2: break @@ -349,12 +358,13 @@ def detectRepeatPatterns(data, size=64, minEntropy=.07): c2 = 0 p2 -= size - bitSection, ent = bitSectString(data, s1, s1+length) + bitSection, ent = bitSectString(data, s1, s1 + length) if ent > minEntropy: print("success:") - print(" * bit idx1: %4d (%4d bits) - '%s' %s" % (s1, length, bin(d1), bitSection.encode("hex"))) - print(" * bit idx2: %4d (%4d bits) - '%s'" % (s2, length, bin(d2))) - #else: + print(" * bit idx1: {:4d} ({:4d} bits) - '{}' {}".format(s1, length, bin(d1), + bitSection.encode("hex"))) + print(" * bit idx2: {:4d} ({:4d} bits) - '{}'".format(s2, length, bin(d2))) + # else: # print " * idx1: %d - '%s' * idx2: %d - '%s'" % (p1, d1, p2, d2) p2 += 1 p1 += 1 @@ -377,17 +387,17 @@ def bitSectString(string, startbit, endbit): while bit < endbit: - byte1 = ord( string[Bidx] ) + byte1 = ord(string[Bidx]) try: - byte2 = ord( string[Bidx+1] ) + byte2 = ord(string[Bidx+1]) except IndexError: byte2 = 0 byte = (byte1 << bidx) & 0xff byte |= (byte2 >> (8-bidx)) - #calculate entropy over the byte + # calculate entropy over the byte for bi in range(8): - b = (byte>>bi) & 1 + b = (byte >> bi) & 1 entropy[b] += 1 bit += 8 @@ -395,17 +405,16 @@ def bitSectString(string, startbit, endbit): if bit > endbit: diff = bit-endbit - mask = ~ ( (1<>bitx) & 1 + bit = (byte >> bitx) & 1 s.append(bit) return (s, ent) chars_top = [ - " ", #000 - " ", #001 - "^", #010 - "/", #011 - " ", #100 - " ", #101 - "\\",#110 - "-", #111 + " ", # 000 + " ", # 001 + "^", # 010 + "/", # 011 + " ", # 100 + " ", # 101 + "\\", # 110 + "-", # 111 ] chars_mid = [ - " ", #000 - "|", #001 - "#", #010 - " ", #011 - "|", #100 - "#", #101 - " ", #110 - " ", #110 + " ", # 000 + "|", # 001 + "#", # 010 + " ", # 011 + "|", # 100 + "#", # 101 + " ", # 110 + " ", # 110 ] chars_bot = [ - "-", #000 - "/", #001 - " ", #010 - " ", #011 - "\\",#100 - "V", #101 - " ", #110 - " ", #110 + "-", # 000 + "/", # 001 + " ", # 010 + " ", # 011 + "\\", # 100 + "V", # 101 + " ", # 110 + " ", # 110 ] @@ -464,38 +473,39 @@ def reprBitArray(bitAry, width=194): arylen = len(bitAry) # top line - #FIXME: UGGGGLY and kinda broken. + # FIXME: UGGGGLY and kinda broken. fraction = 1.0 * arylen/width - expand = [bitAry[int(x*fraction)] for x in range(width)] + expand = [bitAry[int(x * fraction)] for x in range(width)] for bindex in range(width): bits = 0 - if bindex>0: - bits += (expand[bindex-1]) << (2) + if bindex > 0: + bits += (expand[bindex - 1]) << (2) bits += (expand[bindex]) << (1) if bindex < width-1: bits += (expand[bindex+1]) - top.append( chars_top[ bits ] ) - mid.append( chars_mid[ bits ] ) - bot.append( chars_bot[ bits ] ) + top.append(chars_top[bits]) + mid.append(chars_mid[bits]) + bot.append(chars_bot[bits]) tops = "".join(top) mids = "".join(mid) bots = "".join(bot) return "\n".join([tops, mids, bots]) + def invertBits(data): output = [] ldata = len(data) off = 0 - if ldata&1: - output.append( correctbytes( ord( data[0] ) ^ 0xff) ) + if ldata & 1: + output.append(correctbytes(ord(data[0]) ^ 0xff)) off = 1 - if ldata&2: - output.append( struct.pack( "> (y+1)) & 1 + bit0 = (byte >> (y + 1)) & 1 bit1 = (byte >> y) & 1 else: diff = last >> 1 bit0 = last & 1 - bit1 = (byte >> (y+1)) & 1 + bit1 = (byte >> (y + 1)) & 1 if bit0 == bit1: if syncd or not align: - raise Exception("Differential Manchester Decoder cannot work with this data. Sync fault at index %d,%d" % (bidx, y)) + raise Exception("Differential Manchester Decoder cannot work with this data. Sync fault at index " + "{:d},{:d}".format(bidx, y)) syncd = 1 # redo the last stuff with new info diff = last >> 1 bit0 = last & 1 - bit1 = (byte >> (y+1)) & 1 + bit1 = (byte >> (y + 1)) & 1 obyte <<= 1 if diff != bit0: obyte |= 1 last = (bit0 << 1) | bit1 - if (bidx & 1): + if bidx & 1: out.append(correctbytes(obyte)) obyte = 0 @@ -565,7 +576,6 @@ def diff_manchester_decode(data, align=False): return ''.join(out) - def biphase_mark_coding_encode(data): # FIXME: broken? this looks more like BMC (biphase mark encoding) # FIXME: write encoder as well @@ -592,6 +602,7 @@ def biphase_mark_coding_encode(data): return ''.join(out) + def manchester_decode(data, hilo=1): out = [] last = 0 @@ -611,15 +622,16 @@ def manchester_decode(data, hilo=1): obyte |= 1 last = bit - if (bidx & 1): + if bidx & 1: out.append(correctbytes(obyte)) obyte = 0 if not (bidx & 1): - obyte << 4 # pad 0's on end + obyte << 4 # pad 0's on end out.append(correctbytes(obyte)) return ''.join(out) + def manchester_encode(data, hilo=1): ''' for the sake of testing. @@ -634,15 +646,16 @@ def manchester_encode(data, hilo=1): for bidx in range(len(data)): byte = ord(data[bidx]) obyte = 0 - for bitx in range(7,-1,-1): - bit = (byte>>bitx) & 1 + for bitx in range(7, -1, -1): + bit = (byte >> bitx) & 1 obyte <<= 2 obyte |= bits[bit] out.append(struct.pack(">H", obyte)) return ''.join(out) -def findManchesterData(data, hilo=1): + +def findManchesterData(data, hilo=1): # FIXME hilo is never used, remove? poss = [] for x in range(8): @@ -653,6 +666,7 @@ def findManchesterData(data, hilo=1): except: pass + def findManchester(data, minbytes=10): print("DEBUG: DATA=" + repr(data)) success = [] @@ -666,9 +680,9 @@ def findManchester(data, minbytes=10): byt = ord(data[bidx]) for btidx in range(0, 8, 2): # compare every other bits - bit = (byt>>(8-btidx)) & 1 + bit = (byt >> (8 - btidx)) & 1 - if (bit + last + last2) in (1,2): + if (bit + last + last2) in (1, 2): lastCount += 1 else: # we're done, or not started @@ -681,7 +695,7 @@ def findManchester(data, minbytes=10): lenbits -= 8 startbit = btidx - lenbits - stopbyte = startbyte + lenbytes + (0,1)[lenbits>0] + stopbyte = startbyte + lenbytes + (0, 1)[lenbits > 0] bytez = data[startbyte:stopbyte] success.append((bidx, startbyte, startbit, bytez)) @@ -690,4 +704,3 @@ def findManchester(data, minbytes=10): last2 = last last = bit return success - diff --git a/rflib/cc111Xhparser.py b/rflib/cc111Xhparser.py index a89f22e..db08ef3 100644 --- a/rflib/cc111Xhparser.py +++ b/rflib/cc111Xhparser.py @@ -52,26 +52,26 @@ def parseLines(lines): for line in lines: # find single-line comments slc = line.find("//") - if (slc > -1): - line = line[:slc] + "#" + line[slc+2:] + if slc > -1: + line = line[:slc] + "#" + line[slc+2:] # find /* */ comments mlcs = line.find("/*") mlce = line.find("*/") - if (mlcs>-1): - if (mlce>-1): # both are in this line - if (mlce>mlcs): # they are "together" - if (mlce >= len(line.strip())-3): - line = line[:mlcs] + '#' + line[mlcs+2:mlce] + if mlcs > -1: + if mlce > -1: # both are in this line + if mlce > mlcs: # they are "together" + if mlce >= len(line.strip())-3: + line = line[:mlcs] + '#' + line[mlcs + 2:mlce] else: - line = line[:mlcs] + '"""' + line[mlcs+2:mlce] + '"""' + line[mlce+2:] + line = line[:mlcs] + '"""' + line[mlcs + 2:mlce] + '"""' + line[mlce + 2:] else: # they are *not* together - line = line[mlce+2:mlcs] + line = line[mlce + 2:mlcs] else: # only the beginning is in this line, treat like a single-line comment for now line = line[:mlcs] incomment = True elif incomment: # no mlc-starter found... are we incomment? then ignore until the end of comment - if (mlce>-1): - line = line[mlce+2:] + if mlce > -1: + line = line[mlce + 2:] incomment = False else: line = '' @@ -82,37 +82,37 @@ def parseLines(lines): line = line.strip() # now we can actually parse the line - if (line.startswith("#define ")): + if line.startswith("#define "): line = line[8:].strip() # peel off any additional spaces after the #define pieces = line.split(" ", 1) - if len(pieces)<2: + if len(pieces) < 2: continue name, value = pieces if "(" in name: - print(("SKIPPING: %s"%(line)), file=sys.stderr) + print(("SKIPPING: {}".format(line)), file=sys.stderr) continue # skip adding "function" defines defs[name.strip()] = value.strip() - elif (line.startswith("SFR(")): + elif line.startswith("SFR("): endparen = line.find(")") - if (endparen == -1): - print(("ERROR: SFR without end parens: '%s'"%(line)), file=sys.stderr) + if endparen == -1: + print(("ERROR: SFR without end parens: '{}'".format(line)), file=sys.stderr) continue line = line[4:endparen].strip() name, value = line.split(",", 1) defs[name.strip()] = value.strip() - elif (line.startswith("SFRX(")): + elif line.startswith("SFRX("): endparen = line.find(")") - if (endparen == -1): - print(("ERROR: SFRX without end parens: '%s'"%(line)), file=sys.stderr) + if endparen == -1: + print(("ERROR: SFRX without end parens: '{}'".format(line)), file=sys.stderr) continue line = line[5:endparen].strip() name, value = line.split(",", 1) defs[name.strip()] = value.strip() - elif (line.startswith("SBIT")): + elif line.startswith("SBIT"): endparen = line.find(")") - if (endparen == -1): - print(("ERROR: SBIT without end parens: '%s'"%(line)), file=sys.stderr) + if endparen == -1: + print(("ERROR: SBIT without end parens: '{}'".format(line)), file=sys.stderr) continue line = line[5:endparen].strip() name, val1, val2 = line.split(",", 2) @@ -123,28 +123,19 @@ def parseLines(lines): if __name__ == '__main__': defs = {} - defs.update(parseLines(file('../includes/cc1110-ext.h'))) - defs.update(parseLines(file('../includes/cc1111.h'))) - defs.update(parseLines(file('/usr/share/sdcc/include/mcs51/cc1110.h'))) + defs.update(parseLines(open('../includes/cc1110-ext.h', 'r'))) + defs.update(parseLines(open('../includes/cc1111.h', 'r'))) + defs.update(parseLines(open('/usr/share/sdcc/include/mcs51/cc1110.h', 'r'))) skeys = list(defs.keys()) skeys.sort() - out = ["%-30s = %s"%(key,defs[key]) for key in skeys] + out = ["%-30s = %s" % (key, defs[key]) for key in skeys] trueout = [] for x in out: try: - compile(x,'stdin','exec') + compile(x, 'stdin', 'exec') trueout.append(x) print(x) except: sys.excepthook(*sys.exc_info()) - - - - - - - - - diff --git a/rflib/ccrecvdump.py b/rflib/ccrecvdump.py index 744d5aa..0f51fcb 100644 --- a/rflib/ccrecvdump.py +++ b/rflib/ccrecvdump.py @@ -11,12 +11,12 @@ dport = "/dev/tty" + port -print("Opening serial port %s for listening..." % dport) +print("Opening serial port {} for listening...".format(dport)) s=serial.Serial(dport, 115200) counter = 0 while True: - print ("%d: %s" % (counter, repr(s.read(12)))) + print("{:d} {}".format(counter, repr(s.read(12)))) counter += 1 - #sys.stdout.write(s.read(1)) - #sys.stdout.flush() + # sys.stdout.write(s.read(1)) + # sys.stdout.flush() diff --git a/rflib/ccspecan.py b/rflib/ccspecan.py index f6bd796..69dba9a 100755 --- a/rflib/ccspecan.py +++ b/rflib/ccspecan.py @@ -24,8 +24,6 @@ from future import standard_library standard_library.install_aliases() -from builtins import bytes -from builtins import range from past.utils import old_div import sys import time @@ -42,6 +40,7 @@ from PySide2 import QtCore, QtGui, QtWidgets from PySide2.QtCore import Qt, QPointF, QLineF + def ensureQapp(): global _qt_app if not globals().get("_qt_app"): @@ -51,6 +50,7 @@ def ensureQapp(): APP_SPECAN = 0x43 SPECAN_QUEUE = 1 + class SpecanThread(threading.Thread): def __init__(self, data, low_frequency, high_frequency, freq_step, delay, new_frame_callback): threading.Thread.__init__(self) @@ -68,16 +68,20 @@ def __init__(self, data, low_frequency, high_frequency, freq_step, delay, new_fr def run(self): # this is where we pull in the data from the device - #frame_source = self._device.specan(self._low_frequency, self._high_frequency) + # frame_source = self._device.specan(self._low_frequency, self._high_frequency) num_chans = int(old_div((self._high_frequency - self._low_frequency), self._freq_step)) + # FIXME num_chans isnt used, remove it? if type(self._data) == list: for rssi_values, timestamp in self._data: - rssi_values = [ (old_div((ord(x)^0x80),2))-88 for x in rssi_values[4:] ] + rssi_values = [(old_div((ord(x) ^ 0x80), 2)) - 88 for x in rssi_values[4:]] # since we are not accessing the dongle, we need some sort of delay time.sleep(self._delay) - frequency_axis = numpy.linspace(self._low_frequency, self._high_frequency, num=len(rssi_values), endpoint=True) + frequency_axis = numpy.linspace(self._low_frequency, + self._high_frequency, + num=len(rssi_values), + endpoint=True) self._new_frame_callback(numpy.copy(frequency_axis), numpy.copy(rssi_values)) if self._stop: @@ -86,8 +90,11 @@ def run(self): while not self._stop: try: rssi_values, timestamp = self._data.recv(APP_SPECAN, SPECAN_QUEUE, 10000) - rssi_values = [ (old_div((ord(x)^0x80),2))-88 for x in rssi_values ] - frequency_axis = numpy.linspace(self._low_frequency, self._high_frequency, num=len(rssi_values), endpoint=True) + rssi_values = [(old_div((ord(x) ^ 0x80), 2)) - 88 for x in rssi_values] + frequency_axis = numpy.linspace(self._low_frequency, + self._high_frequency, + num=len(rssi_values), + endpoint=True) self._new_frame_callback(numpy.copy(frequency_axis), numpy.copy(rssi_values)) except: @@ -99,6 +106,7 @@ def stop(self): self.join(3.0) self._stopped = True + class RenderArea(QtWidgets.QWidget): def __init__(self, data, low_freq=2.400e9, high_freq=2.483e9, freq_step=1e6, delay=0, parent=None): QtWidgets.QWidget.__init__(self, parent) @@ -113,9 +121,9 @@ def __init__(self, data, low_freq=2.400e9, high_freq=2.483e9, freq_step=1e6, del self._persisted_frames_depth = 350 self._path_max = None - self._low_frequency = low_freq #2.400e9 - self._high_frequency = high_freq #2.483e9 - self._frequency_step = freq_step #1e6 + self._low_frequency = low_freq # 2.400e9 + self._high_frequency = high_freq # 2.483e9 + self._frequency_step = freq_step # 1e6 self._high_dbm = 0.0 self._low_dbm = -100.0 @@ -155,8 +163,8 @@ def minimumSizeHint(self): return QtCore.QSize(x_points * 4, y_points * 1) def _new_frame(self, frequency_axis, rssi_values): - #print repr(frequency_axis) - #print repr(rssi_values) + # print repr(frequency_axis) + # print repr(rssi_values) self._frame = (frequency_axis, rssi_values) if self._persisted_frames is None: self._new_persisted_frames(len(frequency_axis)) @@ -211,32 +219,34 @@ def _draw_graph(self): pen.setBrush(Qt.red) pen.setStyle(Qt.DotLine) painter.setPen(pen) - painter.drawText(QPointF(x_axis[max_max] + 4, 30), '%.06f' % (old_div(self._x_to_hz(x_axis[max_max]), 1e6))) - painter.drawText(QPointF(30, y_max[max_max] - 4), '%d' % (self._y_to_dbm(y_max[max_max]))) + painter.drawText(QPointF(x_axis[max_max] + 4, 30), '{:.06f}'.format(old_div( + self._x_to_hz(x_axis[max_max]), + 1e6))) + painter.drawText(QPointF(30, y_max[max_max] - 4), '{:d}'.format(self._y_to_dbm(y_max[max_max]))) painter.drawLine(QPointF(x_axis[max_max], 0), QPointF(x_axis[max_max], self.height())) painter.drawLine(QPointF(0, y_max[max_max]), QPointF(self.width(), y_max[max_max])) if self._mouse_x: - painter.drawText(QPointF(self._hz_to_x(self._mouse_x) + 4, 58), '(%.06f)' % ((old_div(self._x_to_hz(x_axis[max_max]), 1e6)) - (old_div(self._mouse_x, 1e6)))) + painter.drawText(QPointF(self._hz_to_x(self._mouse_x) + 4, 58), '({:.06f})'.format((old_div(self._x_to_hz(x_axis[max_max]), 1e6)) - (old_div(self._mouse_x, 1e6)))) pen.setBrush(Qt.yellow) painter.setPen(pen) - painter.drawText(QPointF(self._hz_to_x(self._mouse_x) + 4, 44), '%.06f' % (old_div(self._mouse_x, 1e6))) - painter.drawText(QPointF(54, self._dbm_to_y(self._mouse_y) - 4), '%d' % (self._mouse_y)) + painter.drawText(QPointF(self._hz_to_x(self._mouse_x) + 4, 44), '{:.06f}'.format(old_div(self._mouse_x, 1e6))) + painter.drawText(QPointF(54, self._dbm_to_y(self._mouse_y) - 4), '{:d}'.format(self._mouse_y)) painter.drawLine(QPointF(self._hz_to_x(self._mouse_x), 0), QPointF(self._hz_to_x(self._mouse_x), self.height())) painter.drawLine(QPointF(0, self._dbm_to_y(self._mouse_y)), QPointF(self.width(), self._dbm_to_y(self._mouse_y))) if self._mouse_x2: - painter.drawText(QPointF(self._hz_to_x(self._mouse_x2) + 4, 118), '(%.06f)' % ((old_div(self._mouse_x, 1e6)) - (old_div(self._mouse_x2, 1e6)))) + painter.drawText(QPointF(self._hz_to_x(self._mouse_x2) + 4, 118), '({:.06f})'.format((old_div(self._mouse_x, 1e6)) - (old_div(self._mouse_x2, 1e6)))) if self._mouse_x2: pen.setBrush(Qt.red) painter.setPen(pen) - painter.drawText(QPointF(self._hz_to_x(self._mouse_x2) + 4, 102), '(%.06f)' % ((old_div(self._x_to_hz(x_axis[max_max]), 1e6)) - (old_div(self._mouse_x2, 1e6)))) + painter.drawText(QPointF(self._hz_to_x(self._mouse_x2) + 4, 102), '({:.06f})'.format((old_div(self._x_to_hz(x_axis[max_max]), 1e6)) - (old_div(self._mouse_x2, 1e6)))) pen.setBrush(Qt.magenta) painter.setPen(pen) - painter.drawText(QPointF(self._hz_to_x(self._mouse_x2) + 4, 88), '%.06f' % (old_div(self._mouse_x2, 1e6))) - painter.drawText(QPointF(78, self._dbm_to_y(self._mouse_y2) - 4), '%d' % (self._mouse_y2)) + painter.drawText(QPointF(self._hz_to_x(self._mouse_x2) + 4, 88), '{:.06f}'.format(old_div(self._mouse_x2, 1e6))) + painter.drawText(QPointF(78, self._dbm_to_y(self._mouse_y2) - 4), '{:d}'.format(self._mouse_y2)) painter.drawLine(QPointF(self._hz_to_x(self._mouse_x2), 0), QPointF(self._hz_to_x(self._mouse_x2), self.height())) painter.drawLine(QPointF(0, self._dbm_to_y(self._mouse_y2)), QPointF(self.width(), self._dbm_to_y(self._mouse_y2))) if self._mouse_x: - painter.drawText(QPointF(self._hz_to_x(self._mouse_x) + 4, 74), '(%.06f)' % ((old_div(self._mouse_x2, 1e6)) - (old_div(self._mouse_x, 1e6)))) + painter.drawText(QPointF(self._hz_to_x(self._mouse_x) + 4, 74), '({:.06f})'.format((old_div(self._mouse_x2, 1e6)) - (old_div(self._mouse_x, 1e6)))) finally: painter.end() @@ -263,10 +273,10 @@ def _draw_reticle(self): painter.setPen(Qt.blue) # TODO: Removed to support old (<1.0) PySide API in Ubuntu 10.10 - #painter.drawLines(dbm_lines) + # painter.drawLines(dbm_lines) for dbm_line in dbm_lines: painter.drawLine(dbm_line) # TODO: Removed to support old (<1.0) PySide API in Ubuntu 10.10 - #painter.drawLines(frequency_lines) + # painter.drawLines(frequency_lines) for frequency_line in frequency_lines: painter.drawLine(frequency_line) painter.setPen(Qt.white) @@ -305,7 +315,7 @@ def _hz_to_x(self, frequency_hz): delta = frequency_hz - self._low_frequency range = self._high_frequency - self._low_frequency normalized = old_div(delta, range) - #print "freq: %s \nlow: %s \nhigh: %s \ndelta: %s \nrange: %s \nnormalized: %s" % (frequency_hz, self._low_frequency, self._high_frequency, delta, range, normalized) + # print "freq: %s \nlow: %s \nhigh: %s \ndelta: %s \nrange: %s \nnormalized: %s" % (frequency_hz, self._low_frequency, self._high_frequency, delta, range, normalized) return normalized * self.width() def _x_to_hz(self, x): @@ -326,6 +336,7 @@ def _y_to_dbm(self, y): delta = tmp * range return self._high_dbm - delta + class Window(QtWidgets.QWidget): def __init__(self, data, low_freq, high_freq, spacing, delay=.01, parent=None): QtWidgets.QWidget.__init__(self, parent) @@ -333,7 +344,7 @@ def __init__(self, data, low_freq, high_freq, spacing, delay=.01, parent=None): self._low_freq = low_freq self._high_freq = high_freq self._spacing = spacing - self._delay= delay + self._delay = delay self._data = self._open_data(data) @@ -359,7 +370,7 @@ def _open_data(self, data): numChans = int(old_div((self._high_freq-self._low_freq), self._spacing)) data._doSpecAn(freq, spc, numChans) else: - data = pickle.load(file(data,'rb')) + data = pickle.load(open(data, 'rb')) if data is None: raise Exception('Data not found') return data @@ -391,21 +402,21 @@ def mousePressEvent(self, event): def keyPressEvent(self, event): # test for non-alphanumeric keys first # arrow key - if event.key() >= Qt.Key_Left and event.key() <= Qt.Key_Down: + if Qt.Key_Left <= event.key() <= Qt.Key_Down: # left if event.key() == Qt.Key_Left: - self._low_freq -= self._spacing - self._high_freq -= self._spacing + self._low_freq -= self._spacing + self._high_freq -= self._spacing # up if event.key() == Qt.Key_Up: - self._spacing = int(self._spacing * 1.1) + self._spacing = int(self._spacing * 1.1) # right if event.key() == Qt.Key_Right: - self._low_freq += self._spacing - self._high_freq += self._spacing + self._low_freq += self._spacing + self._high_freq += self._spacing # down if event.key() == Qt.Key_Down: - self._spacing = int(self._spacing / 1.1) + self._spacing = int(self._spacing / 1.1) # this will redraw window with the correct labels etc., but we also need to re-start # specan on the dongle, and I'm not sure how best to do that! self.layout().removeWidget(self.render_area) @@ -416,7 +427,7 @@ def keyPressEvent(self, event): # anything else is alphanumeric try: - key= correctbytes(event.key()).upper() + key = correctbytes(event.key()).upper() event.accept() except: print('Unknown key pressed: 0x%x' % event.key()) @@ -449,6 +460,7 @@ def keyPressEvent(self, event): return print('Unsupported key pressed:', key) + if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) f = sys.argv[1] @@ -461,6 +473,6 @@ def keyPressEvent(self, event): delay = .01 window = Window(f, fbase, fhigh, fdelta, delay) - #window = Window('../data.again', 902.0, 928.0, 3e-1) + # window = Window('../data.again', 902.0, 928.0, 3e-1) window.show() sys.exit(app.exec_()) diff --git a/rflib/chipcon_nic.py b/rflib/chipcon_nic.py index dfeec3d..9255360 100644 --- a/rflib/chipcon_nic.py +++ b/rflib/chipcon_nic.py @@ -4,10 +4,6 @@ from __future__ import absolute_import from __future__ import division -from builtins import bytes -from builtins import hex -from builtins import range -from builtins import object from past.utils import old_div import re import sys @@ -21,6 +17,7 @@ from .bits import correctbytes from .const import * + def makeFriendlyAscii(instring): out = [] start = 0 @@ -28,36 +25,34 @@ def makeFriendlyAscii(instring): instrlen = len(instring) for cidx in range(instrlen): - if (0x20 < ord(instring[cidx]) < 0x7f): - if last < cidx-1: - out.append( "." * (cidx-1-last)) + if 0x20 < ord(instring[cidx]) < 0x7f: + if last < cidx - 1: + out.append("." * (cidx - 1 - last)) start = cidx last = cidx else: if last == cidx-1: - out.append( instring[ start:last+1 ] ) + out.append(instring[start:last + 1]) if last != cidx: out.append( "." * (cidx-last) ) - else: # if start == 0: - out.append( instring[ start: ] ) + else: # if start == 0: + out.append(instring[start:]) return ''.join(out) - - def calculateT2(tick_ms, mhz=24): # each tick, not each cycle - TICKSPD = [(old_div(mhz*1000000,pow(2,x))) for x in range(8)] + TICKSPD = [(old_div(mhz * 1000000, pow(2, x))) for x in range(8)] - tick_ms = 1.0*tick_ms/1000 + tick_ms = 1.0 * tick_ms / 1000 candidates = [] for tickidx in range(8): for tipidx in range(4): for PR in range(256): T = 1.0 * PR * TIP[tipidx] / TICKSPD[tickidx] - if abs(T-tick_ms) < .010: + if abs(T - tick_ms) < .010: candidates.append((T, tickidx, tipidx, PR)) diff = 1024 best = None @@ -66,30 +61,35 @@ def calculateT2(tick_ms, mhz=24): best = c diff = abs(c[0] - tick_ms) return best - #return ms, candidates, best + # return ms, candidates, best class EnDeCode(object): def encode(self, msg): raise Exception("EnDeCode.encode() not implemented. Each subclass must implement their own") + def decode(self, msg): raise Exception("EnDeCode.encode() not implemented. Each subclass must implement their own") def savePkts(pkts, filename): - pickle.dump(pkts, file(filename, 'a')) + pickle.dump(pkts, open(filename, 'a')) + + def loadPkts(filename): - return pickle.load( file(filename, 'r')) + return pickle.load(open(filename, 'r')) + def printSyncWords(syncworddict): print("SyncWords seen:") tmp = [] - for x,y in list(syncworddict.items()): - tmp.append((y,x)) + for x, y in list(syncworddict.items()): + tmp.append((y, x)) tmp.sort() - for y,x in tmp: - print("0x%.4x: %d" % (x,y)) + for y, x in tmp: + print("{:#x}: {:d}".format(x[0:3], y)) + class NICxx11(USBDongle): ''' @@ -115,7 +115,7 @@ def setRfMode(self, rfmode, parms=''): sets the radio state to "rfmode", and makes ''' self._rfmode = rfmode - r = self.send(APP_SYSTEM, SYS_CMD_RFMODE, "%c" % (self._rfmode) + parms) + r = self.send(APP_SYSTEM, SYS_CMD_RFMODE, "{:c}".format(self._rfmode) + parms) ### set standard radio state to TX/RX/IDLE (TX is pretty much only good for jamming). TX/RX modes are set to return to whatever state you choose here. def setModeTX(self): @@ -138,38 +138,37 @@ def setModeIDLE(self): AND: set radio to return to IDLE state when done with other states ''' self.setRfMode(RFST_SIDLE) - ### send raw state change to radio (doesn't update the return state for after RX/TX occurs) def strobeModeTX(self): ''' set radio to TX state (transient) ''' - self.poke(X_RFST, "%c"%RFST_STX) + self.poke(X_RFST, "{:c}".format(RFST_STX)) def strobeModeRX(self): ''' set radio to RX state (transient) ''' - self.poke(X_RFST, "%c"%RFST_SRX) + self.poke(X_RFST, "{:c}".format(RFST_SRX)) def strobeModeIDLE(self): ''' set radio to IDLE state (transient) ''' - self.poke(X_RFST, "%c"%RFST_SIDLE) + self.poke(X_RFST, "{:c}".format(RFST_SIDLE)) def strobeModeFSTXON(self): ''' set radio to FSTXON state (transient) ''' - self.poke(X_RFST, "%c"%RFST_SFSTXON) + self.poke(X_RFST, "{:c}".format(RFST_SFSTXON)) def strobeModeCAL(self): ''' set radio to CAL state (will return to whichever state is configured (via setMode* functions) ''' - self.poke(X_RFST, "%c"%RFST_SCAL) + self.poke(X_RFST, "{:c}".format(RFST_SCAL)) def strobeModeReturn(self, marcstate=None): """ @@ -180,10 +179,7 @@ def strobeModeReturn(self, marcstate=None): #marcstate = self.radiocfg.marcstate #if self._debug: print("MARCSTATE: %x returning to %x" % (marcstate, MARC_STATE_MAPPINGS[marcstate][2]) ) #self.poke(X_RFST, "%c"%MARC_STATE_MAPPINGS[marcstate][2]) - self.poke(X_RFST, "%c" % self._rfmode) - - - + self.poke(X_RFST, "{:c}".format(self._rfmode)) #### radio config ##### def getRadioConfig(self): @@ -191,7 +187,7 @@ def getRadioConfig(self): self.radiocfg.vsParse(bytedef) return bytedef - def setRadioConfig(self, bytedef = None): + def setRadioConfig(self, bytedef=None): if bytedef is None: bytedef = self.radiocfg.vsEmit() @@ -211,7 +207,6 @@ def setRadioConfig(self, bytedef = None): return bytedef - ##### GETTER/SETTERS for Radio Config/Status ##### ### radio state def setLedMode(self, ledmode): @@ -219,7 +214,7 @@ def setLedMode(self, ledmode): sets the led state to "ledmode" ''' self._ledmode = ledmode - r = self.send(APP_SYSTEM, SYS_CMD_LED_MODE, "%c" % (self._ledmode)) + r = self.send(APP_SYSTEM, SYS_CMD_LED_MODE, "{:c}".format(self._ledmode)) def getMARCSTATE(self, radiocfg=None): if radiocfg is None: @@ -254,7 +249,7 @@ def setRFRegister(self, regaddr, value, suppress=False): def setRFbits(self, addr, bitnum, bitsz, val, suppress=False): ''' sets individual bits of a register ''' - mask = ((1<> 16 - radiocfg.freq1 = (num>>8) & 0xff + radiocfg.freq1 = (num >> 8) & 0xff radiocfg.freq0 = num & 0xff - if (freq > FREQ_EDGE_900 and freq < FREQ_MID_900) or (freq > FREQ_EDGE_400 and freq < FREQ_MID_400) or (freq < FREQ_MID_300): + if (FREQ_EDGE_900 < freq < FREQ_MID_900) or (FREQ_EDGE_400 < freq < FREQ_MID_400) or (freq < FREQ_MID_300): # select low VCO radiocfg.fscal2 = 0x0A - elif freq <1e9 and ((freq > FREQ_MID_900) or (freq > FREQ_MID_400) or (freq > FREQ_MID_300)): + elif freq < 1e9 and ((freq > FREQ_MID_900) or (freq > FREQ_MID_400) or (freq > FREQ_MID_300)): # select high VCO radiocfg.fscal2 = 0x2A @@ -324,16 +319,16 @@ def setFreq(self, freq=902000000, mhz=24, radiocfg=None, applyConfig=True): def getFreq(self, mhz=24, radiocfg=None): freqmult = old_div((0x10000 / 1000000.0), mhz) - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg - num = (radiocfg.freq2<<16) + (radiocfg.freq1<<8) + radiocfg.freq0 + num = (radiocfg.freq2 << 16) + (radiocfg.freq1 << 8) + radiocfg.freq0 freq = old_div(num, freqmult) return freq, hex(num) def getFreqEst(self, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg @@ -344,7 +339,7 @@ def getFreqEst(self, radiocfg=None): # the TI design note for this is missing from TI's main website but can be found here: # http://e2e.ti.com/cfs-file/__key/telligent-evolution-components-attachments/00-155-01-00-00-73-46-38/DN015_5F00_Permanent_5F00_Frequency_5F00_Offset_5F00_Compensation.pdf def adjustFreqOffset(self, mhz=24, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg @@ -354,7 +349,7 @@ def adjustFreqOffset(self, mhz=24, radiocfg=None): # set 'standard' power - for more complex power shaping this will need to be done manually def setPower(self, power=None, radiocfg=None, invert=False): - if radiocfg == None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg @@ -379,63 +374,63 @@ def setPower(self, power=None, radiocfg=None, invert=False): # max power settings are frequency dependent, so set frequency before calling def setMaxPower(self, radiocfg=None, invert=False): - if radiocfg == None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg freq= self.getFreq(radiocfg=radiocfg)[0] if freq <= 400000000: - power= 0xC2 + power = 0xC2 elif freq <= 464000000: - power= 0xC0 + power = 0xC0 elif freq <= 900000000: - power= 0xC2 + power = 0xC2 else: - power= 0xC0 + power = 0xC0 self.setPower(power, radiocfg=radiocfg, invert=invert) def setMdmModulation(self, mod, radiocfg=None, invert=False): - if radiocfg == None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg - if (mod) & ~MDMCFG2_MOD_FORMAT: + if mod & ~MDMCFG2_MOD_FORMAT: raise Exception("Please use constants MOD_FORMAT_* to specify modulation and ") radiocfg.mdmcfg2 &= ~MDMCFG2_MOD_FORMAT - radiocfg.mdmcfg2 |= (mod) + radiocfg.mdmcfg2 |= mod - power= None + power = None # ASK_OOK needs to flip power table if mod == MOD_ASK_OOK and not invert: if radiocfg.pa_table1 == 0x00 and radiocfg.pa_table0 != 0x00: - power= radiocfg.pa_table0 + power = radiocfg.pa_table0 else: if radiocfg.pa_table0 == 0x00 and radiocfg.pa_table1 != 0x00: - power= radiocfg.pa_table1 + power = radiocfg.pa_table1 self.setRFRegister(MDMCFG2, radiocfg.mdmcfg2) self.setPower(power, radiocfg=radiocfg, invert=invert) def getMdmModulation(self, radiocfg=None): - if radiocfg == None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg mdmcfg2 = radiocfg.mdmcfg2 - mod = (mdmcfg2) & MDMCFG2_MOD_FORMAT + mod = mdmcfg2 & MDMCFG2_MOD_FORMAT return mod def getMdmChanSpc(self, mhz=24, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg chanspc_m = radiocfg.mdmcfg0 chanspc_e = radiocfg.mdmcfg1 & 3 - chanspc = 1000000.0 * mhz/pow(2,18) * (256 + chanspc_m) * pow(2, chanspc_e) + chanspc = 1000000.0 * mhz/pow(2, 18) * (256 + chanspc_m) * pow(2, chanspc_e) #print "chanspc_e: %x chanspc_m: %x chanspc: %f hz" % (chanspc_e, chanspc_m, chanspc) return (chanspc) @@ -449,11 +444,11 @@ def setMdmChanSpc(self, chanspc=None, chanspc_m=None, chanspc_e=None, mhz=24, ra * chanspc * chanspc_m and chanspc_e ''' - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg - if (chanspc != None): + if chanspc is not None: for e in range(4): m = int(((old_div(chanspc * pow(2,18), (1000000.0 * mhz * pow(2,e))))-256) +.5) # rounded evenly if m < 256: @@ -469,11 +464,11 @@ def setMdmChanSpc(self, chanspc=None, chanspc_m=None, chanspc_e=None, mhz=24, ra radiocfg.mdmcfg1 &= ~MDMCFG1_CHANSPC_E # clear out old exponent value radiocfg.mdmcfg1 |= chanspc_e radiocfg.mdmcfg0 = chanspc_m - self.setRFRegister(MDMCFG1, (radiocfg.mdmcfg1)) - self.setRFRegister(MDMCFG0, (radiocfg.mdmcfg0)) + self.setRFRegister(MDMCFG1, radiocfg.mdmcfg1) + self.setRFRegister(MDMCFG0, radiocfg.mdmcfg0) def makePktVLEN(self, maxlen=RF_MAX_TX_BLOCK, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg @@ -488,12 +483,12 @@ def makePktVLEN(self, maxlen=RF_MAX_TX_BLOCK, radiocfg=None): def makePktFLEN(self, flen=RF_MAX_TX_BLOCK, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg if flen > EP5OUT_BUFFER_SIZE - 4: - raise Exception("Packet too large (%d bytes). Maximum fixed length packet is %d bytes." % (flen, EP5OUT_BUFFER_SIZE - 6)) + raise Exception("Packet too large ({:d} bytes). Maximum fixed length packet is {:d} bytes.".format(flen, EP5OUT_BUFFER_SIZE - 6)) radiocfg.pktctrl0 &= ~PKTCTRL0_LENGTH_CONFIG # if we're sending a large block, pktlen is dealt with by the firmware @@ -502,8 +497,8 @@ def makePktFLEN(self, flen=RF_MAX_TX_BLOCK, radiocfg=None): radiocfg.pktlen = 0x00 else: radiocfg.pktlen = flen - self.setRFRegister(PKTCTRL0, (radiocfg.pktctrl0)) - self.setRFRegister(PKTLEN, (radiocfg.pktlen)) + self.setRFRegister(PKTCTRL0, radiocfg.pktctrl0) + self.setRFRegister(PKTLEN, radiocfg.pktlen) def getPktLEN(self): ''' @@ -512,54 +507,54 @@ def getPktLEN(self): return (self.radiocfg.pktlen, self.radiocfg.pktctrl0 & PKTCTRL0_LENGTH_CONFIG) def setEnablePktCRC(self, enable=True, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg - crcE = (0,1)[enable]<<2 - crcM = ~(1<<2) + crcE = (0,1)[enable] << 2 + crcM = ~(1 << 2) radiocfg.pktctrl0 &= crcM radiocfg.pktctrl0 |= crcE - self.setRFRegister(PKTCTRL0, (radiocfg.pktctrl0)) + self.setRFRegister(PKTCTRL0, radiocfg.pktctrl0) def getEnablePktCRC(self, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg - return (radiocfg.pktctrl0 >>2) & 0x1 + return (radiocfg.pktctrl0 >> 2) & 0x1 def setEnablePktDataWhitening(self, enable=True, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg - dwEnable = (0,1)[enable]<<6 + dwEnable = (0, 1)[enable] << 6 radiocfg.pktctrl0 &= ~PKTCTRL0_WHITE_DATA radiocfg.pktctrl0 |= dwEnable - self.setRFRegister(PKTCTRL0, (radiocfg.pktctrl0)) + self.setRFRegister(PKTCTRL0, radiocfg.pktctrl0) def getEnablePktDataWhitening(self, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg - return (radiocfg.pktctrl0 >>6) & 0x1 + return (radiocfg.pktctrl0 >> 6) & 0x1 def setPktPQT(self, num=3, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg num &= 7 num <<= 5 - numM = ~(7<<5) + numM = ~(7 << 5) radiocfg.pktctrl1 &= numM radiocfg.pktctrl1 |= num - self.setRFRegister(PKTCTRL1, (radiocfg.pktctrl1)) + self.setRFRegister(PKTCTRL1, radiocfg.pktctrl1) def getPktPQT(self, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg @@ -570,82 +565,81 @@ def setEnablePktAppendStatus(self, enable=True, radiocfg=None): enable append status bytes. two bytes will be appended to the payload of the packet, containing RSSI and LQI values as well as CRC OK. ''' - if radiocfg == None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg radiocfg.pktctrl1 &= ~PKTCTRL1_APPEND_STATUS - radiocfg.pktctrl1 |= (enable<<2) + radiocfg.pktctrl1 |= (enable << 2) self.setRFRegister(PKTCTRL1, radiocfg.pktctrl1) def getEnablePktAppendStatus(self, radiocfg=None): ''' return append status bytes setting. ''' - if radiocfg == None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg pktctrl1 = radiocfg.pktctrl1 - append = (pktctrl1>>2) & 0x01 + append = (pktctrl1 >> 2) & 0x01 return append def setEnableMdmManchester(self, enable=True, radiocfg=None): - if radiocfg == None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg radiocfg.mdmcfg2 &= ~MDMCFG2_MANCHESTER_EN - radiocfg.mdmcfg2 |= (enable<<3) + radiocfg.mdmcfg2 |= (enable << 3) self.setRFRegister(MDMCFG2, radiocfg.mdmcfg2) def getEnableMdmManchester(self, radiocfg=None): - if radiocfg == None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg mdmcfg2 = radiocfg.mdmcfg2 - mchstr = (mdmcfg2>>3) & 0x01 + mchstr = (mdmcfg2 >> 3) & 0x01 return mchstr def setEnableMdmFEC(self, enable=True, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg - fecEnable = (0,1)[enable]<<7 + fecEnable = (0, 1)[enable] << 7 radiocfg.mdmcfg1 &= ~MFMCFG1_FEC_EN radiocfg.mdmcfg1 |= fecEnable - self.setRFRegister(MDMCFG1, (radiocfg.mdmcfg1)) + self.setRFRegister(MDMCFG1, radiocfg.mdmcfg1) def getEnableMdmFEC(self, radiocfg=None): - if radiocfg == None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg mdmcfg1 = radiocfg.mdmcfg1 - fecEnable = (mdmcfg1>>7) & 0x01 + fecEnable = (mdmcfg1 >> 7) & 0x01 return fecEnable def setEnableMdmDCFilter(self, enable=True, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg - dcfEnable = (0,1)[enable]<<7 + dcfEnable = (0, 1)[enable] << 7 radiocfg.mdmcfg2 &= ~MDMCFG2_DEM_DCFILT_OFF radiocfg.mdmcfg2 |= dcfEnable self.setRFRegister(MDMCFG2, radiocfg.mdmcfg2) def getEnableMdmDCFilter(self, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg - dcfEnable = (radiocfg.mdmcfg2>>7) & 0x1 + dcfEnable = (radiocfg.mdmcfg2 >> 7) & 0x1 return dcfEnable - def setFsIF(self, freq_if, mhz=24, radiocfg=None): ''' Note that the SmartRF Studio software @@ -653,43 +647,42 @@ def setFsIF(self, freq_if, mhz=24, radiocfg=None): setting based on channel spacing and channel filter bandwidth. (from cc1110f32.pdf) ''' - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg ifBits = old_div(freq_if * pow(2,10), (1000000.0 * mhz)) ifBits = int(ifBits + .5) # rounded evenly - if ifBits >0x1f: - raise Exception("FAIL: freq_if is too high? freqbits: %x (must be <0x1f)" % ifBits) - radiocfg.fsctrl1 &= ~(0x1f) + if ifBits > 0x1f: + raise Exception("FAIL: freq_if is too high? freqbits: {:x} (must be <0x1f)".format(ifBits)) + radiocfg.fsctrl1 &= ~0x1f radiocfg.fsctrl1 |= int(ifBits) - self.setRFRegister(FSCTRL1, (radiocfg.fsctrl1)) + self.setRFRegister(FSCTRL1, radiocfg.fsctrl1) def getFsIF(self, mhz=24, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg - freq_if = (radiocfg.fsctrl1&0x1f) * (1000000.0 * mhz / pow(2,10)) + freq_if = (radiocfg.fsctrl1 & 0x1f) * (1000000.0 * mhz / pow(2, 10)) return freq_if - - def setFsOffset(self, if_off, mhz=24, radiocfg=None): + def setFsOffset(self, if_off, mhz=24, radiocfg=None): # FIXME mhz is never used, remove? ''' Note that the SmartRF Studio software automatically calculates the optimum register setting based on channel spacing and channel filter bandwidth. (from cc1110f32.pdf) ''' - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg radiocfg.fsctrl0 = if_off - self.setRFRegister(FSCTRL0, (radiocfg.fsctrl0)) + self.setRFRegister(FSCTRL0, radiocfg.fsctrl0) - def getFsOffset(self, mhz=24, radiocfg=None): + def getFsOffset(self, mhz=24, radiocfg=None): # FIXME mhz is never used, remove? if radiocfg==None: self.getRadioConfig() radiocfg = self.radiocfg @@ -711,7 +704,7 @@ def setChannel(self, channr, radiocfg=None): radiocfg = self.radiocfg radiocfg.channr = channr - self.setRFRegister(CHANNR, (radiocfg.channr)) + self.setRFRegister(CHANNR, radiocfg.channr) def setMdmChanBW(self, bw, mhz=24, radiocfg=None): ''' @@ -747,14 +740,14 @@ def setMdmChanBW(self, bw, mhz=24, radiocfg=None): DR:500kb Mod:MSK RXBW:750kHz sensitive fsctrl1:0e mdmcfg:0e 55 73 43 11 dev:00 foc/bscfg:1d/1c agctrl:c7 00 b0 frend:b6 10 (IF_changes, Modulation of course, Deviation has different meaning with MSK) ''' - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg chanbw_e = None chanbw_m = None for e in range(4): - m = int(((old_div(mhz*1000000.0, (bw *pow(2,e) * 8.0 ))) - 4) + .5) # rounded evenly + m = int(((old_div(mhz*1000000.0, (bw *pow(2, e) * 8.0))) - 4) + .5) # rounded evenly if m < 4: chanbw_e = e chanbw_m = m @@ -762,12 +755,12 @@ def setMdmChanBW(self, bw, mhz=24, radiocfg=None): if chanbw_e is None: raise Exception("ChanBW does not translate into acceptable parameters. Should you be changing this?") - bw = 1000.0*mhz / (8.0*(4+chanbw_m) * pow(2,chanbw_e)) + bw = 1000.0* mhz / (8.0 * (4 + chanbw_m) * pow(2, chanbw_e)) #print "chanbw_e: %x chanbw_m: %x chanbw: %f kHz" % (e, m, bw) radiocfg.mdmcfg4 &= ~(MDMCFG4_CHANBW_E | MDMCFG4_CHANBW_M) - radiocfg.mdmcfg4 |= ((chanbw_e<<6) | (chanbw_m<<4)) - self.setRFRegister(MDMCFG4, (radiocfg.mdmcfg4)) + radiocfg.mdmcfg4 |= ((chanbw_e << 6) | (chanbw_m << 4)) + self.setRFRegister(MDMCFG4, radiocfg.mdmcfg4) # from http://www.cs.jhu.edu/~carlson/download/datasheets/ask_ook_settings.pdf if bw > 102e3: @@ -783,13 +776,13 @@ def setMdmChanBW(self, bw, mhz=24, radiocfg=None): self.setRFRegister(TEST1, 0x35) def getMdmChanBW(self, mhz=24, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg chanbw_e = (radiocfg.mdmcfg4 >> 6) & 0x3 chanbw_m = (radiocfg.mdmcfg4 >> 4) & 0x3 - bw = 1000000.0*mhz / (8.0*(4+chanbw_m) * pow(2,chanbw_e)) + bw = 1000000.0*mhz / (8.0 * (4 + chanbw_m) * pow(2, chanbw_e)) #print "chanbw_e: %x chanbw_m: %x chanbw: %f hz" % (chanbw_e, chanbw_m, bw) return bw @@ -797,14 +790,14 @@ def setMdmDRate(self, drate, mhz=24, radiocfg=None): ''' set the baud of data being modulated through the radio ''' - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg drate_e = None drate_m = None for e in range(16): - m = int((old_div(drate * pow(2,28), (pow(2,e)* (mhz*1000000.0)))-256) + .5) # rounded evenly + m = int((old_div(drate * pow(2, 28), (pow(2, e) * (mhz * 1000000.0))) - 256) + .5) # rounded evenly if m < 256: drate_e = e drate_m = m @@ -812,43 +805,43 @@ def setMdmDRate(self, drate, mhz=24, radiocfg=None): if drate_e is None: raise Exception("DRate does not translate into acceptable parameters. Should you be changing this?") - drate = 1000000.0 * mhz * (256+drate_m) * pow(2,drate_e) / pow(2,28) - if self._debug: print("drate_e: %x drate_m: %x drate: %f Hz" % (drate_e, drate_m, drate)) + drate = 1000000.0 * mhz * (256 + drate_m) * pow(2, drate_e) / pow(2, 28) + if self._debug: + print("drate_e: {:x} drate_m: {:x} drate: {:f} Hz".format(drate_e, drate_m, drate)) radiocfg.mdmcfg3 = drate_m radiocfg.mdmcfg4 &= ~MDMCFG4_DRATE_E radiocfg.mdmcfg4 |= drate_e - self.setRFRegister(MDMCFG3, (radiocfg.mdmcfg3)) - self.setRFRegister(MDMCFG4, (radiocfg.mdmcfg4)) + self.setRFRegister(MDMCFG3, radiocfg.mdmcfg3) + self.setRFRegister(MDMCFG4, radiocfg.mdmcfg4) def getMdmDRate(self, mhz=24, radiocfg=None): ''' get the baud of data being modulated through the radio ''' - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg drate_e = radiocfg.mdmcfg4 & 0xf drate_m = radiocfg.mdmcfg3 - drate = 1000000.0 * mhz * (256+drate_m) * pow(2,drate_e) / pow(2,28) + drate = 1000000.0 * mhz * (256 + drate_m) * pow(2, drate_e) / pow(2, 28) #print "drate_e: %x drate_m: %x drate: %f hz" % (drate_e, drate_m, drate) return drate - - + def setMdmDeviatn(self, deviatn, mhz=24, radiocfg=None): ''' configure the deviation settings for the given modulation scheme ''' - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg dev_e = None dev_m = None for e in range(8): - m = int((old_div(deviatn * pow(2,17), (pow(2,e)* (mhz*1000000.0)))-8) + .5) # rounded evenly + m = int((old_div(deviatn * pow(2, 17), (pow(2, e) * (mhz * 1000000.0))) - 8) + .5) # rounded evenly if m < 8: dev_e = e dev_m = m @@ -856,61 +849,61 @@ def setMdmDeviatn(self, deviatn, mhz=24, radiocfg=None): if dev_e is None: raise Exception("Deviation does not translate into acceptable parameters. Should you be changing this?") - dev = 1000000.0 * mhz * (8+dev_m) * pow(2,dev_e) / pow(2,17) + dev = 1000000.0 * mhz * (8 + dev_m) * pow(2, dev_e) / pow(2, 17) #print "dev_e: %x dev_m: %x deviatn: %f Hz" % (e, m, dev) radiocfg.deviatn = (dev_e << 4) | dev_m self.setRFRegister(DEVIATN, radiocfg.deviatn) def getMdmDeviatn(self, mhz=24, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg dev_e = radiocfg.deviatn >> 4 dev_m = radiocfg.deviatn & DEVIATN_DEVIATION_M - dev = 1000000.0 * mhz * (8+dev_m) * pow(2,dev_e) / pow(2,17) + dev = 1000000.0 * mhz * (8 + dev_m) * pow(2, dev_e) / pow(2, 17) return dev def getMdmSyncWord(self, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg return (radiocfg.sync1 << 8) + radiocfg.sync0 def setMdmSyncWord(self, word, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg radiocfg.sync1 = word >> 8 radiocfg.sync0 = word & 0xff - self.setRFRegister(SYNC1, (radiocfg.sync1)) - self.setRFRegister(SYNC0, (radiocfg.sync0)) + self.setRFRegister(SYNC1, radiocfg.sync1) + self.setRFRegister(SYNC0, radiocfg.sync0) def getMdmSyncMode(self, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg return radiocfg.mdmcfg2 & MDMCFG2_SYNC_MODE def setMdmSyncMode(self, syncmode=SYNCM_15_of_16, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg radiocfg.mdmcfg2 &= ~MDMCFG2_SYNC_MODE radiocfg.mdmcfg2 |= syncmode - self.setRFRegister(MDMCFG2, (radiocfg.mdmcfg2)) + self.setRFRegister(MDMCFG2, radiocfg.mdmcfg2) def getMdmNumPreamble(self, radiocfg=None): ''' get the minimum number of preamble bits to be transmitted. note this is a flag, not a count so the return value must be interpeted - e.g. 0x30 == 0x03 << 4 == MFMCFG1_NUM_PREAMBLE_6 == 6 bytes ''' - if radiocfg == None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg @@ -921,19 +914,19 @@ def setMdmNumPreamble(self, preamble=MFMCFG1_NUM_PREAMBLE_4, radiocfg=None): ''' set the minimum number of preamble bits to be transmitted (default: MFMCFG1_NUM_PREAMBLE_4) ''' - if radiocfg == None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg radiocfg.mdmcfg1 &= ~MFMCFG1_NUM_PREAMBLE radiocfg.mdmcfg1 |= preamble - self.setRFRegister(MDMCFG1, (radiocfg.mdmcfg1)) + self.setRFRegister(MDMCFG1, radiocfg.mdmcfg1) def getBSLimit(self, radiocfg=None): ''' get the saturation point for the data rate offset compensation algorithm ''' - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg @@ -943,13 +936,13 @@ def setBSLimit(self, bslimit, radiocfg=None): ''' set the saturation point for the data rate offset compensation algorithm ''' - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg radiocfg.bscfg &= ~BSCFG_BS_LIMIT radiocfg.bscfg |= bslimit - self.setRFRegister(BSCFG, (radiocfg.bscfg)) + self.setRFRegister(BSCFG, radiocfg.bscfg) def calculateMdmDeviatn(self, mhz=24, radiocfg=None): ''' calculates the optimal DEVIATN setting for the current freq/baud @@ -964,9 +957,9 @@ def calculateMdmDeviatn(self, mhz=24, radiocfg=None): if baud <= 2400: deviatn = 5100 elif baud <= 38400: - deviatn = 20000 * (old_div((baud-2400),36000)) + deviatn = 20000 * (old_div((baud - 2400), 36000)) else: - deviatn = 129000 * (old_div((baud-38400),211600)) + deviatn = 129000 * (old_div((baud - 38400), 211600)) self.setMdmDeviatn(deviatn) def calculatePktChanBW(self, mhz=24, radiocfg=None): @@ -979,13 +972,14 @@ def calculatePktChanBW(self, mhz=24, radiocfg=None): 250 kbaud BW: 600khz ''' freq, freqhex = self.getFreq() - center_freq = freq + 14000000 + center_freq = freq + 14000000 # FIXME center_freq isn't used. Remove? freq_uncertainty = 20e-6 * freq # +-20ppm freq_uncertainty *= 2 # both xmitter and receiver #minbw = (2 * freq_uncertainty) + self.getMdmDRate() # uncertainty for both sender/receiver minbw = (self.getMdmDRate() + freq_uncertainty) - possibles = [ 53e3,63e3,75e3,93e3,107e3,125e3,150e3,188e3,214e3,250e3,300e3,375e3,428e3,500e3,600e3,750e3, ] + possibles = [53e3, 63e3, 75e3, 93e3, 107e3, 125e3, 150e3, 188e3, 214e3, 250e3, 300e3, 375e3, 428e3, 500e3, + 600e3, 750e3,] for bw in possibles: #if (.8 * bw) > minbw: # can't occupy more the 80% of BW if (bw) > minbw: @@ -1002,6 +996,7 @@ def calculateFsIF(self, mhz=24, radiocfg=None): 500 kbaud IF: 328khz ''' pass + def calculateFsOffset(self, mhz=24, radiocfg=None): ''' calculates the optimal FreqOffset setting for the current freq/baud * totally experimental * @@ -1017,7 +1012,6 @@ def getLQI(self): lqi = self.peek(LQI) return lqi - def setAESmode(self, aesmode=AES_CRYPTO_DEFAULT): ''' set AES crypto co-processor mode. @@ -1062,7 +1056,7 @@ def setAESmode(self, aesmode=AES_CRYPTO_DEFAULT): (ENCCS_MODE_CBC | AES_CRYPTO_OUT_ON | AES_CRYPTO_OUT_ENCRYPT | AES_CRYPTO_IN_ON | AES_CRYPTO_IN_DECRYPT) ''' - return self.send(APP_NIC, NIC_SET_AES_MODE, "%c"%aesmode) + return self.send(APP_NIC, NIC_SET_AES_MODE, "{:c}".format(aesmode)) def getAESmode(self): ''' @@ -1070,7 +1064,7 @@ def getAESmode(self): ''' return self.send(APP_NIC, NIC_GET_AES_MODE, "") - def setAESiv(self, iv= '\0'*16): + def setAESiv(self, iv='\0'*16): ''' set the AES IV. this will persist until the next reboot, but it should be noted that some modes update the IV automatically with each operation, so care must be taken with the higher level @@ -1078,7 +1072,7 @@ def setAESiv(self, iv= '\0'*16): ''' return self.send(APP_NIC, NIC_SET_AES_IV, iv) - def setAESkey(self, key= '\0'*16): + def setAESkey(self, key='\0'*16): ''' set the AES key. this will persist until the next reboot. key must be 128 bits. ''' @@ -1088,7 +1082,8 @@ def setAmpMode(self, ampmode=0): ''' set the amplifier mode (RF amp external to CC1111) ''' - return self.send(APP_NIC, NIC_SET_AMP_MODE, "%c"%ampmode) + return self.send(APP_NIC, NIC_SET_AMP_MODE, "{:c}".format(ampmode)) + def getAmpMode(self): ''' get the amplifier mode (RF amp external to CC1111) @@ -1120,7 +1115,7 @@ def RFxmit(self, data, repeat=0, offset=0): waitlen = len(data) waitlen += repeat * (len(data) - offset) wait = USB_TX_WAIT * ((old_div(waitlen, RF_MAX_TX_BLOCK)) + 1) - self.send(APP_NIC, NIC_XMIT, "%s" % struct.pack(">1)&1)) return "\n".join(output) - def reprFreqConfig(self, mhz=24, radiocfg=None): - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg output = [] freq,num = self.getFreq(mhz, radiocfg) - output.append("Frequency: %f hz (%s)" % (freq,num)) - - output.append("Channel: %d" % radiocfg.channr) + output.append("Frequency: {:f} hz ({})".format(freq, num)) + output.append("Channel: {:d}".format(radiocfg.channr)) freq_if = self.getFsIF(mhz, radiocfg) freqoff = self.getFsOffset(mhz, radiocfg) freqest = self.getFreqEst(radiocfg) - output.append("Intermediate freq: %d hz" % freq_if) - output.append("Frequency Offset: %d +/-" % freqoff) - output.append("Est. Freq Offset: %d" % freqest) + output.append("Intermediate freq: {:d} hz".format(freq_if)) + output.append("Frequency Offset: {:d} +/-".format(freqoff)) + output.append("Est. Freq Offset: {:d}".format(freqest)) return "\n".join(output) @@ -1449,13 +1442,13 @@ def reprAESMode(self): output = [] aesmode= ord(self.getAESmode()[0]) - output.append("AES Mode: %s" % AESMODES[(aesmode & AES_CRYPTO_MODE)]) + output.append("AES Mode: {}".format(AESMODES[(aesmode & AES_CRYPTO_MODE)])) if aesmode & AES_CRYPTO_IN_ENABLE: - output.append("Crypt RF Input: %s" % ("Decrypt", "Encrypt")[(aesmode & AES_CRYPTO_IN_TYPE)]) + output.append("Crypt RF Input: {}".format(("Decrypt", "Encrypt")[(aesmode & AES_CRYPTO_IN_TYPE)])) else: output.append("Crypt RF Input: off") if aesmode & AES_CRYPTO_OUT_ENABLE: - output.append("Crypt RF Output: %s" % ("Decrypt", "Encrypt")[(aesmode & AES_CRYPTO_OUT_TYPE) >> 2]) + output.append("Crypt RF Output: {}".format(("Decrypt", "Encrypt")[(aesmode & AES_CRYPTO_OUT_TYPE) >> 2])) else: output.append("Crypt RF Output: off") @@ -1467,30 +1460,30 @@ def reprPacketConfig(self, radiocfg=None): radiocfg = self.radiocfg output = [] - output.append("Sync Word: 0x%.2X%.2X" % (radiocfg.sync1, radiocfg.sync0)) - output.append("Packet Length: %d" % radiocfg.pktlen) - length_config = radiocfg.pktctrl0&3 - output.append("Length Config: %s" % LENGTH_CONFIGS[length_config]) + output.append("Sync Word: {:#X}{:X}".format(radiocfg.sync1[0:1], radiocfg.sync0[0:1])) + output.append("Packet Length: {:d}".format(radiocfg.pktlen)) + length_config = radiocfg.pktctrl0 & 3 + output.append("Length Config: {}".format(LENGTH_CONFIGS[length_config])) - output.append("Configured Address: 0x%x" % radiocfg.addr) + output.append("Configured Address: {:#x}".format(radiocfg.addr)) pqt = self.getPktPQT(radiocfg) - output.append("Preamble Quality Threshold: 4 * %d" % pqt) + output.append("Preamble Quality Threshold: 4 * {:d}".format(pqt)) - append = (radiocfg.pktctrl1>>2) & 1 - output.append("Append Status: %s" % ("No","Yes")[append]) + append = (radiocfg.pktctrl1 >> 2) & 1 + output.append("Append Status: {}".format(("No", "Yes")[append])) - adr_chk = radiocfg.pktctrl1&3 - output.append("Rcvd Packet Check: %s" % ADR_CHK_TYPES[adr_chk]) + adr_chk = radiocfg.pktctrl1 & 3 + output.append("Rcvd Packet Check: {}".format(ADR_CHK_TYPES[adr_chk])) whitedata = self.getEnablePktDataWhitening(radiocfg) - output.append("Data Whitening: %s" % ("off", "ON (but only with cc2400_en==0)")[whitedata]) + output.append("Data Whitening: {}".format(("off", "ON (but only with cc2400_en==0)")[whitedata])) - pkt_format = (radiocfg.pktctrl0>>5)&3 - output.append("Packet Format: %s" % PKT_FORMATS[pkt_format]) + pkt_format = (radiocfg.pktctrl0 >> 5) & 3 + output.append("Packet Format: {}".format(PKT_FORMATS[pkt_format])) crc = self.getEnablePktCRC(radiocfg) - output.append("CRC: %s" % ("disabled", "ENABLED")[crc]) + output.append("CRC: {}".format(("disabled", "ENABLED")[crc])) return "\n".join(output) @@ -1500,12 +1493,12 @@ def printRadioState(self, radiocfg=None): def reprRadioState(self, radiocfg=None): output = [] try: - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg - output.append(" MARCSTATE: %s (%x)" % (self.getMARCSTATE(radiocfg))) - output.append(" DONGLE RESPONDING: mode :%x, last error# %d"%(self.getDebugCodes())) + output.append(" MARCSTATE: %s (%x)" % self.getMARCSTATE(radiocfg)) + output.append(" DONGLE RESPONDING: mode :%x, last error# %d" % (self.getDebugCodes())) except: output.append(repr(sys.exc_info())) output.append(" DONGLE *not* RESPONDING") @@ -1514,7 +1507,7 @@ def reprRadioState(self, radiocfg=None): def reprModemConfig(self, mhz=24, radiocfg=None): output = [] - if radiocfg==None: + if radiocfg is None: self.getRadioConfig() radiocfg = self.radiocfg @@ -1524,59 +1517,57 @@ def reprModemConfig(self, mhz=24, radiocfg=None): output.append(reprMdmModulation) drate = self.getMdmDRate(mhz, radiocfg) - output.append("DRate: %f hz"%drate) + output.append("DRate: {:f} hz".format(drate)) bw = self.getMdmChanBW(mhz, radiocfg) - output.append("ChanBW: %f hz"%bw) + output.append("ChanBW: {:f} hz".format(bw)) - output.append("DEVIATION: %f hz" % self.getMdmDeviatn(mhz, radiocfg)) + output.append("DEVIATION: {:f} hz".format(self.getMdmDeviatn(mhz, radiocfg))) - output.append("Sync Mode: %s" % SYNCMODES[syncmode]) + output.append("Sync Mode: {}".format(SYNCMODES[syncmode])) - num_preamble = (radiocfg.mdmcfg1>>4)&7 - output.append("Min TX Preamble: %d bytes" % (NUM_PREAMBLE[num_preamble]) ) + num_preamble = (radiocfg.mdmcfg1 >> 4) & 7 + output.append("Min TX Preamble: {:d} bytes".format(NUM_PREAMBLE[num_preamble])) chanspc = self.getMdmChanSpc(mhz, radiocfg) - output.append("Chan Spacing: %f hz" % chanspc) + output.append("Chan Spacing: {:f} hz".format(chanspc)) bslimit = radiocfg.bscfg & BSCFG_BS_LIMIT - output.append("BSLimit: %s"%BSLIMITS[bslimit]) + output.append("BSLimit: {}".format(BSLIMITS[bslimit])) - output.append("DC Filter: %s" % (("enabled", "disabled")[self.getEnableMdmDCFilter(radiocfg)])) + output.append("DC Filter: {}".format(("enabled", "disabled")[self.getEnableMdmDCFilter(radiocfg)])) mchstr = self.getEnableMdmManchester(radiocfg) - output.append("Manchester Encoding: %s" % (("disabled","enabled")[mchstr])) + output.append("Manchester Encoding: {}".format(("disabled","enabled")[mchstr])) fec = self.getEnableMdmFEC(radiocfg) - output.append("Fwd Err Correct: %s" % (("disabled","enabled")[fec])) - + output.append("Fwd Err Correct: {}".format(("disabled","enabled")[fec])) return "\n".join(output) - def checkRepr(self, matchstr, checkval, maxdiff=0): starry = self.reprRadioConfig().split('\n') - line,val = getValueFromReprString(starry, matchstr) + line, val = getValueFromReprString(starry, matchstr) try: f = checkval.__class__(val.split(" ")[0]) if abs(f-checkval) <= maxdiff: - print(" passed: reprRadioConfig test: %s %s" % (repr(val), checkval)) + print(" passed: reprRadioConfig test: {} {}".format(repr(val), checkval)) else: - print(" *FAILED* reprRadioConfig test: %s %s %s" % (repr(line), repr(val), checkval)) + print(" *FAILED* reprRadioConfig test: {} {} {}".format(repr(line), repr(val), checkval)) except ValueError as e: - print(" ERROR checking repr: %s" % e) + print(" ERROR checking repr: {}".format(e)) def testTX(self, data="XYZABCDEFGHIJKL"): - while (sys.stdin not in select.select([sys.stdin],[],[],0)[0]): + while sys.stdin not in select.select([sys.stdin], [], [], 0)[0]: time.sleep(.4) - print("transmitting %s" % repr(data)) + print("transmitting {}".format(repr(data))) self.RFxmit(data) sys.stdin.read(1) ######## APPLICATION METHODS - more for demonstration than anything ######## def setup24330MHz(self): - #self.setRadioConfig('0c4eff000800000b0065600068b583231145073f14166c4340915610a90a0011593f3f8831090000000000000000c02e0006000000000000000000000000'.decode('hex')) + # self.setRadioConfig('0c4eff000800000b0065600068b583231145073f14166c4340915610a90a0011593f3f8831090000000000000000c02e0006000000000000000000000000'.decode('hex')) self.getRadioConfig() rc = self.radiocfg rc.iocfg0 = 0x06 @@ -1789,17 +1780,18 @@ def setup_rfstudio_902PktTx(self): rc.pa_table0 = 0xc0 self.setRadioConfig() + class FHSSNIC(NICxx11): ''' advanced NIC implementation for CCxx11 chips, including Frequency Hopping ''' def FHSSxmit(self, data): - return self.send(APP_NIC, FHSS_XMIT, "%c%s" % (len(data), data)) + return self.send(APP_NIC, FHSS_XMIT, "{:c}{}".format(len(data), data)) def changeChannel(self, chan): - return self.send(APP_NIC, FHSS_CHANGE_CHANNEL, "%c" % (chan)) + return self.send(APP_NIC, FHSS_CHANGE_CHANNEL, "{:c}".format(chan)) - def getChannels(self, channels=[]): + def getChannels(self, channels=[]): # FIXME channels isn't used, remove? return self.send(APP_NIC, FHSS_GET_CHANNELS, '') def setChannels(self, channels=[]): @@ -1809,7 +1801,7 @@ def setChannels(self, channels=[]): return self.send(APP_NIC, FHSS_SET_CHANNELS, length + chans) def nextChannel(self): - return self.send(APP_NIC, FHSS_NEXT_CHANNEL, '' ) + return self.send(APP_NIC, FHSS_NEXT_CHANNEL, '') def startHopping(self): return self.send(APP_NIC, FHSS_START_HOPPING, '') @@ -1826,7 +1818,7 @@ def setMACperiod(self, dwell_ms, mhz=24): T, tickidx, tipidx, PR = val print("Setting MAC period to %f secs (%x %x %x)" % (val)) t2ctl = (ord(self.peek(X_T2CTL)) & 0xfc) | (tipidx) - clkcon = (ord(self.peek(X_CLKCON)) & 0xc7) | (tickidx<<3) + clkcon = (ord(self.peek(X_CLKCON)) & 0xc7) | (tickidx << 3) self.poke(X_T2PR, correctbytes(PR)) self.poke(X_T2CTL, correctbytes(t2ctl)) @@ -1838,7 +1830,7 @@ def _setMACmode(self, _mode): ''' macdata = self.getMACdata() print(repr(macdata)) - macdata = (_mode,) + macdata[1:] + macdata = (_mode,) + macdata[1:] print(repr(macdata)) self.setMACdata(macdata) @@ -1884,24 +1876,25 @@ def reprMACdata(self): u8 g_txMsgIdx; """ - def getMACthreshold(self): - return self.send(APP_NIC, FHSS_SET_MAC_THRESHOLD, struct.pack(" 5: - print(" *FAILED* get/setFsIFandOffset(): %d : %f (diff: %f)" % (fif,nfif,nfif-fif)) + print(" *FAILED* get/setFsIFandOffset(): {:d} : {:f} (diff: {:f})".format(fif, nfif, nfif - fif)) else: - print(" passed: get/setFsIFandOffset(): %d : %f (diff: %f)" % (fif,nfif,nfif-fif)) + print(" passed: get/setFsIFandOffset(): {:d} : {:f} (diff: {:f})".format(fif, nfif, nfif - fif)) if foff != nfoff: - print(" *FAILED* get/setFsIFandOffset(): %d : %d (diff: %d)" % (foff,nfoff,nfoff-foff)) + print(" *FAILED* get/setFsIFandOffset(): {:d} : {:d} (diff: {:d})".format(foff,nfoff,nfoff-foff)) else: - print(" passed: get/setFsIFandOffset(): %d : %d (diff: %d)" % (foff,nfoff,nfoff-foff)) + print(" passed: get/setFsIFandOffset(): {:d} : {:d} (diff: {:d})".format(foff,nfoff,nfoff-foff)) dongle.checkRepr("Intermediate freq:", fif, 11720) dongle.checkRepr("Frequency Offset:", foff) @@ -1986,73 +1979,73 @@ def unittest(dongle): dongle.setMdmModulation(mod, dongle.radiocfg) modcheck = dongle.getMdmModulation(dongle.radiocfg) if mod != modcheck: - print(" *FAILED* get/setMdmModulation(): %d : %d " % (mod, modcheck)) + print(" *FAILED* get/setMdmModulation(): {:d} : {:d} ".format(mod, modcheck)) else: - print(" passed: get/setMdmModulation(): %d : %d " % (mod, modcheck)) + print(" passed: get/setMdmModulation(): {:d} : {:d} ".format(mod, modcheck)) chanspc = dongle.getMdmChanSpc(dongle.mhz, dongle.radiocfg) dongle.setMdmChanSpc(chanspc, dongle.mhz, dongle.radiocfg) chanspc_check = dongle.getMdmChanSpc(dongle.mhz, dongle.radiocfg) if chanspc != chanspc_check: - print(" *FAILED* get/setMdmChanSpc(): %d : %d" % (chanspc, chanspc_check)) + print(" *FAILED* get/setMdmChanSpc(): {:d} : {:d}".format(chanspc, chanspc_check)) else: - print(" passed: get/setMdmChanSpc(): %d : %d" % (chanspc, chanspc_check)) + print(" passed: get/setMdmChanSpc(): {:d} : {:d}".format(chanspc, chanspc_check)) chanbw = dongle.getMdmChanBW(dongle.mhz, dongle.radiocfg) dongle.setMdmChanBW(chanbw, dongle.mhz, dongle.radiocfg) chanbw_check = dongle.getMdmChanBW(dongle.mhz, dongle.radiocfg) if chanbw != chanbw_check: - print(" *FAILED* get/setMdmChanBW(): %d : %d" % (chanbw, chanbw_check)) + print(" *FAILED* get/setMdmChanBW(): {:d} : {:d}".format(chanbw, chanbw_check)) else: - print(" passed: get/setMdmChanBW(): %d : %d" % (chanbw, chanbw_check)) + print(" passed: get/setMdmChanBW(): {:d} : {:d}".format(chanbw, chanbw_check)) drate = dongle.getMdmDRate(dongle.mhz, dongle.radiocfg) dongle.setMdmDRate(drate, dongle.mhz, dongle.radiocfg) drate_check = dongle.getMdmDRate(dongle.mhz, dongle.radiocfg) if drate != drate_check: - print(" *FAILED* get/setMdmDRate(): %d : %d" % (drate, drate_check)) + print(" *FAILED* get/setMdmDRate(): {:d} : {:d}".format(drate, drate_check)) else: - print(" passed: get/setMdmDRate(): %d : %d" % (drate, drate_check)) + print(" passed: get/setMdmDRate(): {:d} : {:d}".format(drate, drate_check)) deviatn = dongle.getMdmDeviatn(dongle.mhz, dongle.radiocfg) dongle.setMdmDeviatn(deviatn, dongle.mhz, dongle.radiocfg) deviatn_check = dongle.getMdmDeviatn(dongle.mhz, dongle.radiocfg) if deviatn != deviatn_check: - print(" *FAILED* get/setMdmdeviatn(): %d : %d" % (deviatn, deviatn_check)) + print(" *FAILED* get/setMdmdeviatn(): {:d} : {:d}".format(deviatn, deviatn_check)) else: - print(" passed: get/setMdmdeviatn(): %d : %d" % (deviatn, deviatn_check)) + print(" passed: get/setMdmdeviatn(): {:d} : {:d}".format(deviatn, deviatn_check)) syncm = dongle.getMdmSyncMode(dongle.radiocfg) dongle.setMdmSyncMode(syncm, dongle.radiocfg) syncm_check = dongle.getMdmSyncMode(dongle.radiocfg) if syncm != syncm_check: - print(" *FAILED* get/setMdmSyncMode(): %d : %d" % (syncm, syncm_check)) + print(" *FAILED* get/setMdmSyncMode(): {:d} : {:d}".format(syncm, syncm_check)) else: - print(" passed: get/setMdmSyncMode(): %d : %d" % (syncm, syncm_check)) + print(" passed: get/setMdmSyncMode(): {:d} : {:d}".format(syncm, syncm_check)) mchstr = dongle.getEnableMdmManchester(dongle.radiocfg) dongle.setEnableMdmManchester(mchstr, dongle.radiocfg) mchstr_check = dongle.getEnableMdmManchester(dongle.radiocfg) if mchstr != mchstr_check: - print(" *FAILED* get/setMdmManchester(): %d : %d" % (mchstr, mchstr_check)) + print(" *FAILED* get/setMdmManchester(): {:d} : {:d}".format(mchstr, mchstr_check)) else: - print(" passed: get/setMdmManchester(): %d : %d" % (mchstr, mchstr_check)) + print(" passed: get/setMdmManchester(): {:d} : {:d}".format(mchstr, mchstr_check)) fec = dongle.getEnableMdmFEC(dongle.radiocfg) dongle.setEnableMdmFEC(fec, dongle.radiocfg) fec_check = dongle.getEnableMdmFEC(dongle.radiocfg) if fec != fec_check: - print(" *FAILED* get/setEnableMdmFEC(): %d : %d" % (fec, fec_check)) + print(" *FAILED* get/setEnableMdmFEC(): {:d} : {:d}".format(fec, fec_check)) else: - print(" passed: get/setEnableMdmFEC(): %d : %d" % (fec, fec_check)) + print(" passed: get/setEnableMdmFEC(): {:d} : {:d}".format(fec, fec_check)) dcf = dongle.getEnableMdmDCFilter(dongle.radiocfg) dongle.setEnableMdmDCFilter(dcf, dongle.radiocfg) dcf_check = dongle.getEnableMdmDCFilter(dongle.radiocfg) if dcf != dcf_check: - print(" *FAILED* get/setEnableMdmDCFilter(): %d : %d" % (dcf, dcf_check)) + print(" *FAILED* get/setEnableMdmDCFilter(): {:d} : {:d}".format(dcf, dcf_check)) else: - print(" passed: get/setEnableMdmDCFilter(): %d : %d" % (dcf, dcf_check)) + print(" passed: get/setEnableMdmDCFilter(): {:d} : {:d}".format(dcf, dcf_check)) # Pkt tests @@ -2060,9 +2053,9 @@ def unittest(dongle): dongle.setPktPQT(pqt, dongle.radiocfg) pqt_check = dongle.getPktPQT(dongle.radiocfg) if pqt != pqt_check: - print(" *FAILED* get/setEnableMdmFEC(): %d : %d" % (pqt, pqt_check)) + print(" *FAILED* get/setEnableMdmFEC(): {:d} : {:d}".format(pqt, pqt_check)) else: - print(" passed: get/setEnableMdmFEC(): %d : %d" % (pqt, pqt_check)) + print(" passed: get/setEnableMdmFEC(): {:d} : {:d}".format(pqt, pqt_check)) # FHSS tests print("\nTesting FHSS State set/get") @@ -2075,6 +2068,7 @@ def unittest(dongle): print(repr(dongle.setFHSSstate(fhssstate[1] ))) print(repr(dongle.getFHSSstate())) + def getValueFromReprString(stringarray, line_text): for string in stringarray: if line_text in string: @@ -2082,6 +2076,7 @@ def getValueFromReprString(stringarray, line_text): val = string[idx+1:].strip() return (string,val) + def mkFreq(freq=902000000, mhz=24): freqmult = old_div((0x10000 / 1000000.0), mhz) num = int(freq * freqmult) @@ -2091,7 +2086,6 @@ def mkFreq(freq=902000000, mhz=24): return (num, freq2,freq1,freq0) - if __name__ == "__main__": idx = 0 if len(sys.argv) > 1: diff --git a/rflib/chipcon_usb.py b/rflib/chipcon_usb.py index aca9696..eab9995 100644 --- a/rflib/chipcon_usb.py +++ b/rflib/chipcon_usb.py @@ -102,7 +102,7 @@ def cleanup(self): self.reset_event.clear() self.trash = [] - def setRFparameters(self): + def setRFparameters(self, *args, **kwargs): # Fixed, rfconfigure would call this function w/o req'd args pass def run_ctrl(self): diff --git a/rflib/chipcondefs.py b/rflib/chipcondefs.py index 54a2ef9..e71c5ee 100644 --- a/rflib/chipcondefs.py +++ b/rflib/chipcondefs.py @@ -1,6 +1,7 @@ import vstruct from vstruct.primitives import * + class RadioConfig(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -1513,6 +1514,3 @@ def __init__(self): PKTCTRL0S[val] = key elif key.startswith("PKTCTRL1_"): PKTCTRL1S[val] = key - - - diff --git a/rflib/const.py b/rflib/const.py index 063df12..138e65a 100644 --- a/rflib/const.py +++ b/rflib/const.py @@ -257,7 +257,7 @@ ENCCS_MODE_OFB: "OFB - Output Feedback", } -NUM_PREAMBLE = [2, 3, 4, 6, 8, 12, 16, 24 ] +NUM_PREAMBLE = [2, 3, 4, 6, 8, 12, 16, 24] ADR_CHK_TYPES = [ "No address check", @@ -334,4 +334,3 @@ 0x11: 24, 0x01: 26, } - diff --git a/rflib/intelhex.py b/rflib/intelhex.py index 6abc498..e50a7f8 100644 --- a/rflib/intelhex.py +++ b/rflib/intelhex.py @@ -38,11 +38,7 @@ ''' from __future__ import division, print_function -from builtins import bytes -from builtins import str -from builtins import range from past.builtins import basestring -from builtins import object from past.utils import old_div __docformat__ = "javadoc" @@ -72,7 +68,7 @@ def __init__(self, source=None): (file name of HEX file, file object, addr dict or other IntelHex object) ''' - #public members + # public members self.padding = 0x0FF # Start Address self.start_addr = None @@ -193,7 +189,7 @@ def loadhex(self, fobj): @param fobj file name or file-like object """ if getattr(fobj, "read", None) is None: - fobj = file(fobj, "r") + fobj = open(fobj, "r") fclose = fobj.close else: fclose = None @@ -223,7 +219,7 @@ def loadbin(self, fobj, offset=0): """ fread = getattr(fobj, "read", None) if fread is None: - f = file(fobj, "rb") + f = open(fobj, "rb") fread = f.read fclose = f.close else: @@ -237,20 +233,20 @@ def loadbin(self, fobj, offset=0): if fclose: fclose() - def loadfile(self, fobj, format): + def loadfile(self, fobj, text_format): """Load data file into internal buffer. Preferred wrapper over loadbin or loadhex. @param fobj file name or file-like object - @param format file format ("hex" or "bin") + @param text_format file format ("hex" or "bin") """ - if format == "hex": + if text_format == "hex": self.loadhex(fobj) - elif format == "bin": + elif text_format == "bin": self.loadbin(fobj) else: raise ValueError('format should be either "hex" or "bin";' - ' got %r instead' % format) + ' got {!r} instead'.format(text_format)) # alias (to be consistent with method tofile) fromfile = loadfile @@ -307,7 +303,7 @@ def tobinarray(self, start=None, end=None, pad=None): start, end = self._get_start_end(start, end) - for i in range(start, end+1): + for i in range(start, end + 1): bin.append(self._buf.get(i, pad)) return bin @@ -332,7 +328,7 @@ def tobinfile(self, fobj, start=None, end=None, pad=0xFF): (if None used self.padding). ''' if getattr(fobj, "write", None) is None: - fobj = file(fobj, "wb") + fobj = open(fobj, "wb") close_fd = True else: close_fd = False @@ -366,7 +362,7 @@ def minaddr(self): @return minimal address or None if no data ''' aa = list(self._buf.keys()) - if aa == []: + if not aa: return None else: return min(aa) @@ -376,7 +372,7 @@ def maxaddr(self): @return maximal address or None if no data ''' aa = list(self._buf.keys()) - if aa == []: + if not aa: return None else: return max(aa) @@ -398,7 +394,7 @@ def __getitem__(self, addr): if addresses: addresses.sort() start = addr.start or addresses[0] - stop = addr.stop or (addresses[-1]+1) + stop = addr.stop or (addresses[-1] + 1) step = addr.step or 1 for i in range(start, stop, step): x = self._buf.get(i) @@ -406,7 +402,7 @@ def __getitem__(self, addr): ih[i] = x return ih else: - raise TypeError('Address has unsupported type: %s' % t) + raise TypeError('Address has unsupported type: {}'.format(t)) def __setitem__(self, addr, byte): """Set byte at address.""" @@ -426,7 +422,7 @@ def __setitem__(self, addr, byte): ra = list(range(start, stop, step)) if len(ra) != len(byte): raise ValueError('Length of bytes sequence does not match ' - 'address range') + 'address range') elif (start, stop) == (None, None): raise TypeError('Unsupported address range') elif start is None: @@ -442,7 +438,7 @@ def __setitem__(self, addr, byte): self._buf[i] = byte[j] j += 1 else: - raise TypeError('Address has unsupported type: %s' % t) + raise TypeError('Address has unsupported type: {}'.format(t)) def __delitem__(self, addr): """Delete byte at address.""" @@ -456,14 +452,14 @@ def __delitem__(self, addr): if addresses: addresses.sort() start = addr.start or addresses[0] - stop = addr.stop or (addresses[-1]+1) + stop = addr.stop or (addresses[-1] + 1) step = addr.step or 1 for i in range(start, stop, step): x = self._buf.get(i) if x is not None: del self._buf[i] else: - raise TypeError('Address has unsupported type: %s' % t) + raise TypeError('Address has unsupported type: {}'.format(t)) def __len__(self): """Return count of bytes with real values.""" @@ -483,7 +479,7 @@ def write_hex_file(self, f, write_start_addr=True): fobj = f fclose = None else: - fobj = file(f, 'w') + fobj = open(f, 'w') fwrite = fobj.write fclose = fobj.close @@ -491,14 +487,14 @@ def write_hex_file(self, f, write_start_addr=True): # timeit shows that using hexstr.translate(table) # is faster than hexstr.upper(): # 0.452ms vs. 0.652ms (translate vs. upper) - table = ''.join(correctbytes(i).upper() for i in range(256)) + table = ''.join(correctbytes(i).upper() for i in range(256)) # start address record if any if self.start_addr and write_start_addr: keys = list(self.start_addr.keys()) keys.sort() - bin = array('B', '\0'*9) - if keys == ['CS','IP']: + bin = array('B', '\0' * 9) + if keys == ['CS', 'IP']: # Start Segment Address Record bin[0] = 4 # reclen bin[1] = 0 # offset msb @@ -549,7 +545,7 @@ def write_hex_file(self, f, write_start_addr=True): while cur_addr <= maxaddr: if need_offset_record: - bin = array('B', '\0'*7) + bin = array('B', '\0' * 7) bin[0] = 2 # reclen bin[1] = 0 # offset msb bin[2] = 0 # offset lsb @@ -565,7 +561,7 @@ def write_hex_file(self, f, write_start_addr=True): # produce one record low_addr = cur_addr & 0x0FFFF # chain_len off by 1 - chain_len = min(15, 65535-low_addr, maxaddr-cur_addr) + chain_len = min(15, 65535 - low_addr, maxaddr - cur_addr) # search continuous chain stop_addr = cur_addr + chain_len @@ -581,18 +577,18 @@ def write_hex_file(self, f, write_start_addr=True): else: chain_len = 1 # real chain_len - bin = array('B', '\0'*(5+chain_len)) + bin = array('B', '\0' * ( 5 + chain_len)) bytes = divmod(low_addr, 256) bin[1] = bytes[0] # msb of low_addr bin[2] = bytes[1] # lsb of low_addr bin[3] = 0 # rectype try: # if there is small holes we'll catch them for i in range(chain_len): - bin[4+i] = self._buf[cur_addr+i] + bin[4+i] = self._buf[cur_addr + i] except KeyError: # we catch a hole so we should shrink the chain chain_len = i - bin = bin[:5+i] + bin = bin[:5 + i] bin[0] = chain_len bin[4+chain_len] = (-sum(bin)) & 0x0FF # chksum fwrite(':' + hexlify(bin.tostring()).translate(table) + '\n') @@ -604,7 +600,7 @@ def write_hex_file(self, f, write_start_addr=True): else: cur_addr = maxaddr + 1 break - high_addr = int(old_div(cur_addr,65536)) + high_addr = int(old_div(cur_addr, 65536)) if high_addr > high_ofs: break @@ -613,28 +609,28 @@ def write_hex_file(self, f, write_start_addr=True): if fclose: fclose() - def tofile(self, fobj, format): + def tofile(self, fobj, text_format): """Write data to hex or bin file. Preferred method over tobin or tohex. @param fobj file name or file-like object - @param format file format ("hex" or "bin") + @param text_format file format ("hex" or "bin") """ - if format == 'hex': + if text_format == 'hex': self.write_hex_file(fobj) - elif format == 'bin': + elif text_format == 'bin': self.tobinfile(fobj) else: raise ValueError('format should be either "hex" or "bin";' - ' got %r instead' % format) + ' got {!r} instead'.format(text_format)) def gets(self, addr, length): """Get string of bytes from given address. If any entries are blank from addr through addr+length, a NotEnoughDataError exception will be raised. Padding is not used.""" - a = array('B', '\0'*length) + a = array('B', '\0' * length) try: for i in range(length): - a[i] = self._buf[addr+i] + a[i] = self._buf[addr + i] except KeyError: raise NotEnoughDataError(address=addr, length=length) return a.tostring() @@ -658,8 +654,8 @@ def getsz(self, addr): break i += 1 except KeyError: - raise NotEnoughDataError(msg=('Bad access at 0x%X: ' - 'not enough data to read zero-terminated string') % addr) + raise NotEnoughDataError(msg=('Bad access at {:#X}: ' + 'not enough data to read zero-terminated string').format(addr)) return self.gets(addr, i) def putsz(self, addr, s): @@ -684,19 +680,19 @@ def dump(self, tofile=None): ip = self.start_addr.get('IP') eip = self.start_addr.get('EIP') if eip is not None and cs is None and ip is None: - tofile.write('EIP = 0x%08X\n' % eip) + tofile.write('EIP = {:#08X}\n'.format(eip)) elif eip is None and cs is not None and ip is not None: - tofile.write('CS = 0x%04X, IP = 0x%04X\n' % (cs, ip)) + tofile.write('CS = {:#04X}, IP = {:#04X}\n'.format(cs, ip)) else: - tofile.write('start_addr = %r\n' % start_addr) + tofile.write('start_addr = {!r}\n'.format(self.start_addr)) # actual data addresses = list(self._buf.keys()) if addresses: addresses.sort() minaddr = addresses[0] maxaddr = addresses[-1] - startaddr = int(old_div(minaddr,16))*16 - endaddr = int(old_div(maxaddr,16)+1)*16 + startaddr = int(old_div(minaddr, 16)) * 16 + endaddr = int(old_div(maxaddr, 16) + 1) * 16 maxdigits = max(len(str(endaddr)), 4) templa = '%%0%dX' % maxdigits range16 = list(range(16)) @@ -707,7 +703,7 @@ def dump(self, tofile=None): for j in range16: x = self._buf.get(i+j) if x is not None: - tofile.write(' %02X' % x) + tofile.write(' {:02X}'.format(x)) if 32 <= x < 128: s.append(correctbytes(x)) else: @@ -739,7 +735,7 @@ def merge(this, other, overlap='error'): raise ValueError("Can't merge itself") if overlap not in ('error', 'ignore', 'replace'): raise ValueError("overlap argument should be either " - "'error', 'ignore' or 'replace'") + "'error', 'ignore' or 'replace'") # merge data this_buf = this._buf other_buf = other._buf @@ -747,7 +743,7 @@ def merge(this, other, overlap='error'): if i in this_buf: if overlap == 'error': raise AddressOverlapError( - 'Data overlapped at address 0x%X' % i) + 'Data overlapped at address {:#X}'.format(i)) elif overlap == 'ignore': continue this_buf[i] = other_buf[i] @@ -807,10 +803,10 @@ def __getitem__(self, addr16): byte1 = self._buf.get(addr1, None) byte2 = self._buf.get(addr2, None) - if byte1 != None and byte2 != None: + if byte1 is not None and byte2 is not None: return byte1 | (byte2 << 8) # low endian - if byte1 == None and byte2 == None: + if byte1 is None and byte2 is None: return self.padding raise BadAccess16bit(address=addr16) @@ -829,7 +825,7 @@ def minaddr(self): @return minimal address used in this object ''' aa = list(self._buf.keys()) - if aa == []: + if not aa: return 0 else: return old_div(min(aa),2) @@ -840,10 +836,10 @@ def maxaddr(self): @return maximal address used in this object ''' aa = list(self._buf.keys()) - if aa == []: + if not aa: return 0 else: - return old_div(max(aa),2) + return old_div(max(aa), 2) #/class IntelHex16bit @@ -862,17 +858,17 @@ def hex2bin(fin, fout, start=None, end=None, size=None, pad=0xFF): try: h = IntelHex(fin) except HexReaderError as e: - print("ERROR: bad HEX file: %s" % str(e)) + print("ERROR: bad HEX file: {}".format(str(e))) return 1 # start, end, size - if size != None and size != 0: - if end == None: - if start == None: + if size is not None and size != 0: + if end is None: + if start is None: start = h.minaddr() end = start + size - 1 else: - if (end+1) >= size: + if (end + 1) >= size: start = end + 1 - size else: start = 0 @@ -880,7 +876,7 @@ def hex2bin(fin, fout, start=None, end=None, size=None, pad=0xFF): try: h.tobinfile(fout, start, end, pad) except IOError as e: - print("ERROR: Could not write to file: %s: %s" % (fout, str(e))) + print("ERROR: Could not write to file: {}: {!s}".format(fout, e)) return 1 return 0 @@ -899,13 +895,13 @@ def bin2hex(fin, fout, offset=0): try: h.loadbin(fin, offset) except IOError as e: - print('ERROR: unable to load bin file:', str(e)) + print('ERROR: unable to load bin file: ', str(e)) return 1 try: - h.tofile(fout, format='hex') + h.tofile(fout, text_format='hex') except IOError as e: - print("ERROR: Could not write to file: %s: %s" % (fout, str(e))) + print("ERROR: Could not write to file: {}: {!s}".format(fout, e)) return 1 return 0 @@ -915,34 +911,34 @@ def bin2hex(fin, fout, offset=0): class Record(object): """Helper methods to build valid ihex records.""" - def _from_bytes(bytes): + def _from_bytes(f_bytes): """Takes a list of bytes, computes the checksum, and outputs the entire record as a string. bytes should be the hex record without the colon or final checksum. - @param bytes list of byte values so far to pack into record. + @param f_bytes list of byte values so far to pack into record. @return String representation of one HEX record """ - assert len(bytes) >= 4 + assert len(f_bytes) >= 4 # calculate checksum - s = (-sum(bytes)) & 0x0FF - bin = array('B', bytes + [s]) + s = (-sum(f_bytes)) & 0x0FF + bin = array('B', f_bytes + [s]) return ':' + hexlify(bin.tostring()).upper() _from_bytes = staticmethod(_from_bytes) - def data(offset, bytes): + def data(offset, bytes_list): """Return Data record. This constructs the full record, including the length information, the record type (0x00), the checksum, and the offset. @param offset load offset of first byte. - @param bytes list of byte values to pack into record. + @param bytes_list list of byte values to pack into record. @return String representation of one HEX record """ assert 0 <= offset < 65536 - assert 0 < len(bytes) < 256 - b = [len(bytes), (offset>>8)&0x0FF, offset&0x0FF, 0x00] + bytes + assert 0 < len(bytes_list) < 256 + b = [len(bytes_list), (offset >> 8) & 0x0FF, offset & 0x0FF, 0x00] + bytes_list return Record._from_bytes(b) data = staticmethod(data) @@ -959,7 +955,7 @@ def extended_segment_address(usba): @return String representation of Intel Hex USBA record. """ - b = [2, 0, 0, 0x02, (usba>>8)&0x0FF, usba&0x0FF] + b = [2, 0, 0, 0x02, (usba >> 8) & 0x0FF, usba & 0x0FF] return Record._from_bytes(b) extended_segment_address = staticmethod(extended_segment_address) @@ -970,8 +966,8 @@ def start_segment_address(cs, ip): @return String representation of Intel Hex SSA record. """ - b = [4, 0, 0, 0x03, (cs>>8)&0x0FF, cs&0x0FF, - (ip>>8)&0x0FF, ip&0x0FF] + b = [4, 0, 0, 0x03, (cs >> 8) & 0x0FF, cs & 0x0FF, + (ip >> 8) & 0x0FF, ip & 0x0FF] return Record._from_bytes(b) start_segment_address = staticmethod(start_segment_address) @@ -981,7 +977,7 @@ def extended_linear_address(ulba): @return String representation of Intel Hex ELA record. """ - b = [2, 0, 0, 0x04, (ulba>>8)&0x0FF, ulba&0x0FF] + b = [2, 0, 0, 0x04, (ulba >> 8) & 0x0FF, ulba & 0x0FF] return Record._from_bytes(b) extended_linear_address = staticmethod(extended_linear_address) @@ -991,8 +987,8 @@ def start_linear_address(eip): @return String representation of Intel Hex SLA record. """ - b = [4, 0, 0, 0x05, (eip>>24)&0x0FF, (eip>>16)&0x0FF, - (eip>>8)&0x0FF, eip&0x0FF] + b = [4, 0, 0, 0x05, (eip >> 24) & 0x0FF, (eip >> 16) & 0x0FF, + (eip >> 8) & 0x0FF, eip & 0x0FF] return Record._from_bytes(b) start_linear_address = staticmethod(start_linear_address) @@ -1001,6 +997,7 @@ class _BadFileNotation(Exception): """Special error class to use with _get_file_and_addr_range.""" pass + def _get_file_and_addr_range(s, _support_drive_letter=None): """Special method for hexmerge.py script to split file notation into 3 parts: (filename, start, end) @@ -1024,13 +1021,14 @@ def _get_file_and_addr_range(s, _support_drive_letter=None): raise _BadFileNotation else: fname = parts[0] - def ascii_hex_to_int(ascii): - if ascii is not None: + + def ascii_hex_to_int(ascii_text): + if ascii_text is not None: try: - return int(ascii, 16) + return int(ascii_text, 16) except ValueError: raise _BadFileNotation - return ascii + return ascii_text fstart = ascii_hex_to_int(parts[1] or None) fend = ascii_hex_to_int(parts[2] or None) return drive+fname, fstart, fend @@ -1078,16 +1076,19 @@ def __str__(self): try: return self._fmt % self.__dict__ except (NameError, ValueError, KeyError) as e: - return 'Unprintable exception %s: %s' \ - % (self.__class__.__name__, str(e)) + return 'Unprintable exception {}: {!s}'.format( + self.__class__.__name__, e) + class _EndOfFile(IntelHexError): """Used for internal needs only.""" _fmt = 'EOF record reached -- signal to stop read file' + class HexReaderError(IntelHexError): _fmt = 'Hex reader base error' + class AddressOverlapError(HexReaderError): _fmt = 'Hex file has data overlap at address 0x%(address)X on line %(line)d' @@ -1095,17 +1096,20 @@ class AddressOverlapError(HexReaderError): class HexRecordError(HexReaderError): - _fmt = 'Hex file contains invalid record at line %(line)d' + _fmt = 'Hex file contains invalid record at line {line:d}' class RecordLengthError(HexRecordError): - _fmt = 'Record at line %(line)d has invalid length' + _fmt = 'Record at line {line:d} has invalid length' + class RecordTypeError(HexRecordError): - _fmt = 'Record at line %(line)d has invalid record type' + _fmt = 'Record at line {line:d} has invalid record type' + class RecordChecksumError(HexRecordError): - _fmt = 'Record at line %(line)d has invalid checksum' + _fmt = 'Record at line {line:d} has invalid checksum' + class EOFRecordError(HexRecordError): _fmt = 'File has invalid End-of-File record' @@ -1114,32 +1118,39 @@ class EOFRecordError(HexRecordError): class ExtendedAddressRecordError(HexRecordError): _fmt = 'Base class for extended address exceptions' + class ExtendedSegmentAddressRecordError(ExtendedAddressRecordError): - _fmt = 'Invalid Extended Segment Address Record at line %(line)d' + _fmt = 'Invalid Extended Segment Address Record at line {line:d}' + class ExtendedLinearAddressRecordError(ExtendedAddressRecordError): - _fmt = 'Invalid Extended Linear Address Record at line %(line)d' + _fmt = 'Invalid Extended Linear Address Record at line {line:d}' class StartAddressRecordError(HexRecordError): _fmt = 'Base class for start address exceptions' + class StartSegmentAddressRecordError(StartAddressRecordError): - _fmt = 'Invalid Start Segment Address Record at line %(line)d' + _fmt = 'Invalid Start Segment Address Record at line {line:d}' + class StartLinearAddressRecordError(StartAddressRecordError): - _fmt = 'Invalid Start Linear Address Record at line %(line)d' + _fmt = 'Invalid Start Linear Address Record at line {line:d}' + class DuplicateStartAddressRecordError(StartAddressRecordError): - _fmt = 'Start Address Record appears twice at line %(line)d' + _fmt = 'Start Address Record appears twice at line {line:d}' + class InvalidStartAddressValueError(StartAddressRecordError): - _fmt = 'Invalid start address value: %(start_addr)s' + _fmt = 'Invalid start address value: {start_addr!s}' class NotEnoughDataError(IntelHexError): - _fmt = ('Bad access at 0x%(address)X: ' - 'not enough data to read %(length)d contiguous bytes') + _fmt = ('Bad access at {#address:X}: ' + 'not enough data to read {length:d} contiguous bytes') + class BadAccess16bit(NotEnoughDataError): - _fmt = 'Bad access at 0x%(address)X: not enough data to read 16 bit value' + _fmt = 'Bad access at {#address:X}: not enough data to read 16 bit value' diff --git a/rflib/rflib_version.py b/rflib/rflib_version.py index f4a1994..8136c49 100644 --- a/rflib/rflib_version.py +++ b/rflib/rflib_version.py @@ -1 +1 @@ -RFLIB_VERSION=543 +RFLIB_VERSION=574 diff --git a/setup.py b/setup.py index 757aa93..6114bb6 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ import sys import os import codecs -from distutils.core import setup, Extension +from setuptools import setup packages = ['rflib', 'vstruct', 'vstruct.defs'] mods = [] @@ -16,7 +16,7 @@ try: REV = os.popen('./revision.sh').readline() if len(REV): - file('rflib/rflib_version.py', 'wb').write("RFLIB_VERSION=%s" % REV) + open('rflib/rflib_version.py', 'wb').write("RFLIB_VERSION={}".format(REV).encode()) except: sys.excepthook(*sys.exc_info()) @@ -68,7 +68,8 @@ def readme(): 'pyusb>=1.0.0', 'libusb>=1.0.21b2', 'PySide2==5.12.0', - 'future>=0.17.1' + 'future>=0.17.1', + 'pyserial>=3.4' ], python_requires = '>=2.7,<3.0.0' ) diff --git a/tests/test_basics.py b/tests/test_basics.py index c232caa..df77c2b 100644 --- a/tests/test_basics.py +++ b/tests/test_basics.py @@ -1,11 +1,12 @@ import unittest + class RfCatBasicTests(unittest.TestCase): def test_importing(self): import rflib devs = rflib.getRfCatDevices() - self.assertEquals(type(devs), list, "rflib.getRfCatDevices() doesn't return a list!: %r" % devs) + self.assertEquals(type(devs), list, "rflib.getRfCatDevices() doesn't return a list!: {!r}".format(devs)) import rflib.chipcon_nic import rflib.chipcon_usb import rflib.chipcondefs @@ -13,4 +14,3 @@ def test_importing(self): import rflib.ccspecan import rflib.intelhex import rflib.rflib_defs - diff --git a/tests/test_fakedongle.py b/tests/test_fakedongle.py index c00cf08..ef41990 100644 --- a/tests/test_fakedongle.py +++ b/tests/test_fakedongle.py @@ -5,25 +5,24 @@ import queue import logging import unittest -import threading from rflib.const import * -logging.basicConfig(level=logging.INFO, format='%(asctime)s:%(levelname)s:%(name)s: %(message)s') +logging.basicConfig(level=logging.INFO, format='{asctime:!s}:{levelname:!s}:{name:!s}: {message:!s}') logger = logging.getLogger(__name__) EP0BUFSIZE = 512 class fakeMemory: - def __init__(self, size=64*1024): + def __init__(self, size=64 * 1024): self.memory = [0 for x in range(size)] def readMemory(self, addr, size): - return ''.join([chr(x) for x in self.memory[addr:addr+size]]) + return ''.join([chr(x) for x in self.memory[addr:addr + size]]) def writeMemory(self, addr, data): - self.memory = self.memory[:addr] + data + self.memory[addr+len(data):] + self.memory = self.memory[:addr] + data + self.memory[addr + len(data):] class fakeDon: @@ -39,13 +38,15 @@ def __init__(self): def controlMsg(self, flags, request, buf, value, index, timeout): if flags & USB_BM_REQTYPE_DIR_OUT: - logger.warn("=> fakeDoer.controlMsg(flags=0x%x, request=%r, buf=%r, value=%r, index=%x, timeout=%r)", flags, request, buf, value, index, timeout) + logger.warn("=> fakeDoer.controlMsg(flags={:#h}, request={:!s}, buf={:!r}, value={:!r}, index={:h}, " + "timeout={:!r)", flags, request, buf, value, index, timeout) elif flags & USB_BM_REQTYPE_DIR_IN: - logger.warn("<= fakeDoer.controlMsg(flags=0x%x, request=%r, buf=%r, value=%r, index=%x, timeout=%r)", flags, request, buf, value, index, timeout) + logger.warn("<= fakeDoer.controlMsg(flags={:#h}, request={:!r}, buf={:!r}, value={:!r}, index={:h}, " + "timeout={:!r})", flags, request, buf, value, index, timeout) - def bulkWrite(self, chan, buf, timeout=1): + def bulkWrite(self, chan, buf, timeout=1): # FIXME chan and timeout aren't used, remove? self._initrcvd = buf - logger.debug("=> fakeDoer.bulkWrite(5, %r)", buf) + logger.debug("=> fakeDoer.bulkWrite(5, {:!r})", buf) app, cmd, mlen = struct.unpack("', length) + logger.debug('<= fakeDoer.bulkRead(5, {:!r}) == ', length) raise usb.USBError('Operation timed out (FakeDongle)') def log(self, msg, *args): if len(args): msg = msg % args self.bulk5.put(struct.pack(' Date: Mon, 13 Apr 2020 02:42:17 -0500 Subject: [PATCH 2/4] Fixed the bugs shown in the travis-ci build (I think), fixed some bugs, possibly found a few bugs, added more python3 compatibility --- rflib/chipcon_usb.py | 2 +- setup.py | 2 +- tests/test_fakedongle.py | 4 +-- vstruct/__init__.py | 51 ++++++++++++++++++------------ vstruct/builder.py | 61 ++++++++++++++++++------------------ vstruct/defs/__init__.py | 6 ++-- vstruct/defs/elf.py | 1 + vstruct/defs/kdcom.py | 10 +++--- vstruct/defs/macho/fat.py | 2 ++ vstruct/defs/macho/loader.py | 1 + vstruct/defs/pe.py | 13 ++++++++ vstruct/defs/win32.py | 2 ++ vstruct/primitives.py | 23 +++++++++----- 13 files changed, 109 insertions(+), 69 deletions(-) diff --git a/rflib/chipcon_usb.py b/rflib/chipcon_usb.py index eab9995..86c331a 100644 --- a/rflib/chipcon_usb.py +++ b/rflib/chipcon_usb.py @@ -43,7 +43,7 @@ def getRfCatDevices(): if (dev.idVendor == 0x0451 and dev.idProduct == 0x4715) or (dev.idVendor == 0x1d50 and (dev.idProduct == 0x6047 or dev.idProduct == 0x6048 or dev.idProduct == 0x605b or dev.idProduct == 0xecc1)): rfcats.append(dev) - elif (dev.idVendor == 0x1d50 and (dev.idProduct == 0x6049 or dev.idProduct == 0x604a or dev.idProduct == 0xecc0)): + elif dev.idVendor == 0x1d50 and (dev.idProduct == 0x6049 or dev.idProduct == 0x604a or dev.idProduct == 0xecc0): print("Already in Bootloader Mode... exiting") exit(0) diff --git a/setup.py b/setup.py index 6114bb6..0b9cc08 100644 --- a/setup.py +++ b/setup.py @@ -71,5 +71,5 @@ def readme(): 'future>=0.17.1', 'pyserial>=3.4' ], - python_requires = '>=2.7,<3.0.0' + python_requires = '>=2.7,>=3.0.0' ) diff --git a/tests/test_fakedongle.py b/tests/test_fakedongle.py index ef41990..7e0cbd5 100644 --- a/tests/test_fakedongle.py +++ b/tests/test_fakedongle.py @@ -8,7 +8,7 @@ from rflib.const import * -logging.basicConfig(level=logging.INFO, format='{asctime:!s}:{levelname:!s}:{name:!s}: {message:!s}') +logging.basicConfig(level=logging.INFO, format='%(asctime)s:%(levelname)s:%(name)s: %(message)s') logger = logging.getLogger(__name__) EP0BUFSIZE = 512 @@ -128,7 +128,7 @@ class RfCatFakeDongle(unittest.TestCase): def test_importing(self): import rflib devs = rflib.getRfCatDevices() - self.assertEquals(type(devs), list, "rflib.getRfCatDevices() doesn't return a list!: {:!r}".format(devs)) + self.assertEquals(type(devs), list, "rflib.getRfCatDevices() doesn't return a list!: {!r}".format(devs)) import rflib.chipcon_nic import rflib.chipcon_usb import rflib.chipcondefs diff --git a/vstruct/__init__.py b/vstruct/__init__.py index a1a92c6..22f0321 100644 --- a/vstruct/__init__.py +++ b/vstruct/__init__.py @@ -1,12 +1,17 @@ import struct -from StringIO import StringIO +try: + from StringIO import StringIO +except ImportError: + from io import StringIO import vstruct.primitives as vs_prims + def isVstructType(x): return isinstance(x, vs_prims.v_base) + class VStruct(vs_prims.v_base): def __init__(self, bigend=False): @@ -15,7 +20,7 @@ def __init__(self, bigend=False): vs_prims.v_base.__init__(self) self._vs_name = self.__class__.__name__ self._vs_fields = [] - self._vs_field_align = False # To toggle visual studio style packing + self._vs_field_align = False # To toggle visual studio style packing self._vs_padnum = 0 self._vs_fmtbase = '<' if bigend: @@ -27,7 +32,7 @@ def vsGetClassPath(self): ''' return '%s.%s' % (self.__module__, self._vs_name) - def vsParse(self, bytes, offset=0): + def vsParse(self, bytes_parse, offset=0): """ For all the primitives contained within, allow them an opportunity to parse the given data and return the @@ -36,7 +41,7 @@ def vsParse(self, bytes, offset=0): plist = self.vsGetPrims() fmt = self.vsGetFormat() size = struct.calcsize(fmt) - vals = struct.unpack(fmt, bytes[offset:offset+size]) + vals = struct.unpack(fmt, bytes_parse[offset:offset + size]) for i in range(len(plist)): plist[i].vsSetParsedValue(vals[i]) @@ -67,17 +72,17 @@ def vsGetFields(self): ret = [] for fname in self._vs_fields: fobj = self._vs_values.get(fname) - ret.append((fname,fobj)) + ret.append((fname, fobj)) return ret def vsGetField(self, name): x = self._vs_values.get(name) - if x == None: - raise Exception("Invalid field: %s" % name) + if x is None: + raise Exception("Invalid field: {!s}".format(name)) return x def vsHasField(self, name): - return self._vs_values.get(name) != None + return self._vs_values.get(name) is not None def vsSetField(self, name, value): if isVstructType(value): @@ -88,7 +93,7 @@ def vsSetField(self, name, value): # FIXME implement more arithmetic for structs... def __ixor__(self, other): - for name,value in other._vs_values.items(): + for name, value in other._vs_values.items(): self._vs_values[name] ^= value return self @@ -109,8 +114,8 @@ def vsAddField(self, name, value): delta = len(self) % align if delta != 0: - print "PADDING %s by %d" % (name,align-delta) - pname = "_pad%d" % self._vs_padnum + print("PADDING {} by {:d]".format(name, align-delta)) + pname = "_pad{:d}".format(self._vs_padnum) self._vs_padnum += 1 self._vs_fields.append(pname) self._vs_values[pname] = vs_prims.v_bytes(align-delta) @@ -170,7 +175,7 @@ def __len__(self): def __getattr__(self, name): # Gotta do this for pickle issues... vsvals = self.__dict__.get("_vs_values") - if vsvals == None: + if vsvals is None: vsvals = {} self.__dict__["_vs_values"] = vsvals r = vsvals.get(name) @@ -183,7 +188,7 @@ def __getattr__(self, name): def __setattr__(self, name, value): # If we have this field, asign to it x = self._vs_values.get(name, None) - if x != None: + if x is not None: return self.vsSetField(name, value) # If it's a vstruct type, create a new field @@ -209,14 +214,15 @@ def tree(self, va=0, reprmax=None): rstr = field.vsGetTypeName() if isinstance(field, vs_prims.v_number): val = field.vsGetValue() - rstr = '0x%.8x (%d)' % (val,val) + rstr = '{:#x} {:d}'.format(val[0:7], val) elif isinstance(field, vs_prims.v_prim): rstr = repr(field) - if reprmax != None and len(rstr) > reprmax: + if reprmax is not None and len(rstr) > reprmax: rstr = rstr[:reprmax] + '...' - ret += "%.8x (%.2d)%s %s: %s\n" % (va+off, len(field), " "*(indent*2),name,rstr) + ret += "{:#x} ({:d}){} {!s}: {!s}\n".format((va+off)[0:7], len(field)[0:1], " " * (indent * 2), name, rstr) return ret + class VArray(VStruct): def __init__(self, elems=()): @@ -234,7 +240,8 @@ def vsAddElement(self, elem): def __getitem__(self, index): return self.vsGetField("%d" % index) - #FIXME slice asignment + # FIXME slice asignment + def resolve(impmod, nameparts): """ @@ -247,14 +254,16 @@ def resolve(impmod, nameparts): m = impmod for nname in nameparts: m = getattr(m, nname, None) - if m == None: + if m is None: break return m + # NOTE: Gotta import this *after* VStruct/VSArray defined import vstruct.defs as vs_defs + def getStructure(sname): """ Return an instance of the specified structure. The @@ -263,18 +272,20 @@ def getStructure(sname): definition from within vstruct.defs. """ x = resolve(vs_defs, sname.split(".")) - if x != None: + if x is not None: return x() return None + def getModuleNames(): return [x for x in dir(vs_defs) if not x.startswith("__")] + def getStructNames(modname): ret = [] mod = resolve(vs_defs, modname) - if mod == None: + if mod is None: return ret for n in dir(mod): diff --git a/vstruct/builder.py b/vstruct/builder.py index 07bafb2..0849947 100644 --- a/vstruct/builder.py +++ b/vstruct/builder.py @@ -9,7 +9,7 @@ import vstruct import vstruct.primitives as vs_prim -prim_types = [ None, +prim_types = [None, vs_prim.v_uint8, vs_prim.v_uint16, None, @@ -22,6 +22,7 @@ VSFF_ARRAY = 1 VSFF_POINTER = 2 + class VStructConstructor: def __init__(self, builder, vsname): self.builder = builder @@ -30,6 +31,7 @@ def __init__(self, builder, vsname): def __call__(self, *args, **kwargs): return self.builder.buildVStruct(self.vsname) + class VStructBuilder: def __init__(self, defs=(), enums=()): @@ -43,14 +45,14 @@ def __init__(self, defs=(), enums=()): def __getattr__(self, name): ns = self._vs_namespaces.get(name) - if ns != None: + if ns is not None: return ns vsdef = self._vs_defs.get(name) - if vsdef != None: + if vsdef is not None: return VStructConstructor(self, name) - raise AttributeError, name + raise AttributeError(name) def addVStructEnumeration(self, enum): self._vs_enums[enum[0]] = enum @@ -65,10 +67,10 @@ def getVStructNamespaceNames(self): return self._vs_namespaces.keys() def hasVStructNamespace(self, namespace): - return self._vs_namespaces.get(namespace, None) != None + return self._vs_namespaces.get(namespace, None) is not None def getVStructNames(self, namespace=None): - if namespace == None: + if namespace is None: return self._vs_defs.keys() nsmod = self._vs_namespaces.get(namespace) ret = [] @@ -89,20 +91,20 @@ def buildVStruct(self, vsname): parts = vsname.split('.', 1) if len(parts) == 2: ns = self._vs_namespaces.get(parts[0]) - if ns == None: + if ns is None: raise Exception('Namespace %s is not present! (need symbols?)' % parts[0]) # If a module gets added as a namespace, assume it has a class def... if isinstance(ns, types.ModuleType): cls = getattr(ns, parts[1]) - if cls == None: + if cls is None: raise Exception('Unknown VStruct Definition: %s' % vsname) return cls() return ns.buildVStruct(parts[1]) vsdef = self._vs_defs.get(vsname) - if vsdef == None: + if vsdef is None: raise Exception('Unknown VStruct Definition: %s' % vsname) vsname, vssize, vskids = vsdef @@ -124,19 +126,19 @@ def buildVStruct(self, vsname): raise Exception('Invalid Pointer Width: %d' % fsize) elif fflags & VSFF_ARRAY: - if ftypename != None: + if ftypename is not None: fieldval = vstruct.VArray() while len(fieldval) < fsize: - fieldval.vsAddElement( self.buildVStruct(ftypename) ) + fieldval.vsAddElement(self.buildVStruct(ftypename)) else: - # FIXME actually handle arrays! + # FIXME actually handle arrays! fieldval = vs_prim.v_bytes(size=fsize) - elif ftypename == None: + elif ftypename is None: - if fsize not in [1,2,4,8]: - #print 'Primitive Field Size: %d' % fsize - fieldval = v_bytes(size=fsize) + if fsize not in [1, 2, 4, 8]: + # print 'Primitive Field Size: %d' % fsize + fieldval = vs_prim.v_bytes(size=fsize) else: fieldval = prim_types[fsize]() @@ -146,7 +148,7 @@ def buildVStruct(self, vsname): cursize = len(vs) if foffset < cursize: - #print 'FIXME handle unions, overlaps, etc...' + # print 'FIXME handle unions, overlaps, etc...' continue if foffset > cursize: @@ -164,10 +166,9 @@ def genVStructPyCode(self): for ename, esize, ekids in self._vs_enums.values(): ret += '%s = v_enum()\n' % ename for kname, kval in ekids: - ret += '%s.%s = %d\n' % (ename,kname,kval) + ret += '%s.%s = %d\n' % (ename, kname, kval) ret += '\n\n' - for vsname, vsize, vskids in self._vs_defs.values(): ret += 'class %s(vstruct.VStruct):\n' % vsname ret += ' def __init__(self):\n' @@ -191,12 +192,12 @@ def genVStructPyCode(self): fconst = 'v_bytes(size=%d) # FIXME should be pointer!' % fsize elif fflags & VSFF_ARRAY: - if ftypename != None: - '[ %s() for i in xrange( %d / len(%s())) ]' % (ftypename, fsize, ftypename) + if ftypename is not None: + '[ %s() for i in xrange( %d / len(%s())) ]' % (ftypename, fsize, ftypename) # FIXME noop? else: fconst = 'v_bytes(size=%d) # FIXME Unknown Array Type' % fsize - elif ftypename == None: + elif ftypename is None: if fsize == 1: fconst = 'v_uint8()' elif fsize == 2: @@ -210,25 +211,25 @@ def genVStructPyCode(self): else: fconst = '%s()' % ftypename - ret += ' self.%s = %s\n' % (fname, fconst) offset += fsize ret += '\n\n' return ret + if __name__ == '__main__': # Parse windows structures from dll symbols... - import os + import os # FIXME unused import sys - import platform + import platform # FIXME unused - from pprint import pprint + from pprint import pprint # FIXME unused import PE import vtrace.platforms.win32 as vt_win32 - p = PE.PE(file(sys.argv[1], 'rb')) + p = PE.PE(open(sys.argv[1], 'rb')) baseaddr = p.IMAGE_NT_HEADERS.OptionalHeader.ImageBase osmajor = p.IMAGE_NT_HEADERS.OptionalHeader.MajorOperatingSystemVersion osminor = p.IMAGE_NT_HEADERS.OptionalHeader.MinorOperatingSystemVersion @@ -243,7 +244,7 @@ def genVStructPyCode(self): e = parser._sym_enums.values() builder = VStructBuilder(defs=t, enums=e) - print '# Version: %d.%d' % (osmajor, osminor) - print '# Architecture: %s' % archname - print builder.genVStructPyCode() + print('# Version: {:d}.(:d}'.format(osmajor, osminor)) + print('# Architecture: {}'.format(archname)) + print(builder.genVStructPyCode()) diff --git a/vstruct/defs/__init__.py b/vstruct/defs/__init__.py index 3aa5963..df96038 100644 --- a/vstruct/defs/__init__.py +++ b/vstruct/defs/__init__.py @@ -1,6 +1,6 @@ # Import all local structure modules -import elf -import pe -import win32 +from . import elf +from . import pe +from . import win32 diff --git a/vstruct/defs/elf.py b/vstruct/defs/elf.py index a7b69ed..789c1e9 100644 --- a/vstruct/defs/elf.py +++ b/vstruct/defs/elf.py @@ -4,6 +4,7 @@ EI_NIDENT = 4 EI_PADLEN = 7 + class Elf32(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) diff --git a/vstruct/defs/kdcom.py b/vstruct/defs/kdcom.py index 099848c..d816202 100644 --- a/vstruct/defs/kdcom.py +++ b/vstruct/defs/kdcom.py @@ -16,9 +16,9 @@ PACKET_TRAILING_BYTE = 0xAA pkt_magic_names = { - BREAKIN_PACKET:"Break Packet", - PACKET_LEADER:"Packet", - CONTROL_PACKET_LEADER:"Control Packet", + BREAKIN_PACKET: "Break Packet", + PACKET_LEADER: "Packet", + CONTROL_PACKET_LEADER: "Control Packet", } # Primary "packet types" @@ -184,6 +184,7 @@ ULONG64 = v_uint64 BOOLEAN = v_uint32 + class DBGKD_LOAD_SYMBOLS64(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -193,9 +194,10 @@ def __init__(self): self.ProcessId = v_uint64() self.CheckSum = v_uint32() self.SizeOfImage = v_uint32() - #self.UnloadSymbols = v_uint8() + # self.UnloadSymbols = v_uint8() self.UnloadSymbols = v_uint32() # HACK must be 32 bit aligned + class DBGKD_WAIT_STATE_CHANGE64(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) diff --git a/vstruct/defs/macho/fat.py b/vstruct/defs/macho/fat.py index 5b5d03b..664a1da 100644 --- a/vstruct/defs/macho/fat.py +++ b/vstruct/defs/macho/fat.py @@ -2,12 +2,14 @@ import vstruct import vstruct.primitives as vs_prim + class fat_header(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self, bigend=True) self.magic = vs_prim.v_uint32() self.nfat_arch = vs_prim.v_uint32() + class fat_arch(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self, bigend=True) diff --git a/vstruct/defs/macho/loader.py b/vstruct/defs/macho/loader.py index 9b3b641..82716eb 100644 --- a/vstruct/defs/macho/loader.py +++ b/vstruct/defs/macho/loader.py @@ -40,6 +40,7 @@ def __init__(self): self.cmd = vs_prim.v_uint32() # type of load command self.cmdsize = vs_prim.v_uint32() # total size of command in bytes + class segment_command(vstruct.VStruct): def __init__(self): diff --git a/vstruct/defs/pe.py b/vstruct/defs/pe.py index b599ae2..f085949 100644 --- a/vstruct/defs/pe.py +++ b/vstruct/defs/pe.py @@ -2,18 +2,21 @@ import vstruct from vstruct.primitives import * + class IMAGE_BASE_RELOCATION(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.VirtualAddress = v_uint32() self.SizeOfBlock = v_uint32() + class IMAGE_DATA_DIRECTORY(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.VirtualAddress = v_uint32() self.Size = v_uint32() + class IMAGE_DOS_HEADER(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -37,6 +40,7 @@ def __init__(self): self.e_res2 = vstruct.VArray([v_uint16() for i in range(10)]) self.e_lfanew = v_uint32() + class IMAGE_EXPORT_DIRECTORY(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -52,6 +56,7 @@ def __init__(self): self.AddressOfNames = v_uint32() self.AddressOfOrdinals = v_uint32() + class IMAGE_FILE_HEADER(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -63,6 +68,7 @@ def __init__(self): self.SizeOfOptionalHeader = v_uint16() self.Ccharacteristics = v_uint16() + class IMAGE_IMPORT_DIRECTORY(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -72,6 +78,7 @@ def __init__(self): self.Name = v_uint32() self.FirstThunk = v_uint32() + class IMAGE_LOAD_CONFIG_DIRECTORY(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -96,6 +103,7 @@ def __init__(self): self.SEHandlerTable = v_uint32() self.SEHandlerCount = v_uint32() + class IMAGE_NT_HEADERS(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -103,6 +111,7 @@ def __init__(self): self.FileHeader = IMAGE_FILE_HEADER() self.OptionalHeader = IMAGE_OPTIONAL_HEADER() + class IMAGE_NT_HEADERS64(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -110,6 +119,7 @@ def __init__(self): self.FileHeader = IMAGE_FILE_HEADER() self.OptionalHeader = IMAGE_OPTIONAL_HEADER64() + class IMAGE_OPTIONAL_HEADER(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -145,6 +155,7 @@ def __init__(self): self.NumberOfRvaAndSizes = v_uint32() self.DataDirectory = vstruct.VArray([IMAGE_DATA_DIRECTORY() for i in range(16)]) + class IMAGE_OPTIONAL_HEADER64(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -179,6 +190,7 @@ def __init__(self): self.NumberOfRvaAndSizes = v_uint32() self.DataDirectory = vstruct.VArray([IMAGE_DATA_DIRECTORY() for i in range(16)]) + class IMAGE_RESOURCE_DIRECTORY(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -189,6 +201,7 @@ def __init__(self): self.NumberOfNamedEntries = v_uint16() self.NumberOfIdEntries = v_uint16() + class IMAGE_SECTION_HEADER(vstruct.VStruct): def __init__(self): diff --git a/vstruct/defs/win32.py b/vstruct/defs/win32.py index 64e5190..d1ad0ea 100644 --- a/vstruct/defs/win32.py +++ b/vstruct/defs/win32.py @@ -4,12 +4,14 @@ import vstruct from vstruct.primitives import * + class CLIENT_ID(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.UniqueProcess = v_ptr() self.UniqueThread = v_ptr() + class EXCEPTION_RECORD(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) diff --git a/vstruct/primitives.py b/vstruct/primitives.py index 8eceeb6..09718de 100644 --- a/vstruct/primitives.py +++ b/vstruct/primitives.py @@ -1,6 +1,13 @@ import struct +try: + blah = long(42) +except NameError: + long = int + pass + + class v_enum: pass class v_base(object): @@ -177,7 +184,7 @@ def __index__(self): return long(self) def __coerce__(self, other): try: return long(self),long(other) - except Exception, e: + except Exception as e: return NotImplemented # Print helpers @@ -330,14 +337,14 @@ def __init__(self, guidstr=None): self._vs_length = 16 self._vs_value = "\x00" * 16 self._vs_fmt = "16s" - self._guid_fields = (0,0,0,0,0,0,0,0,0,0,0) - if guidstr != None: + self._guid_fields = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + if guidstr is not None: self._parseGuidStr(guidstr) def _parseGuidStr(self, gstr): - gstr = gstr.replace("{","") - gstr = gstr.replace("}","") - gstr = gstr.replace("-","") + gstr = gstr.replace("{", "") + gstr = gstr.replace("}", "") + gstr = gstr.replace("-", "") bytes = gstr.decode("hex") # Totally cheating... ;) self._guid_fields = struct.unpack(">LHH8B", bytes) @@ -346,9 +353,9 @@ def vsSetValue(self, bytes): self._guid_fields = struct.unpack(" Date: Mon, 13 Apr 2020 21:10:46 -0500 Subject: [PATCH 3/4] Fixed and possibly found a few mor bugs, fixed the exception being thrown in travis due to older style except --- setup.py | 6 +- vstruct/__init__.py | 4 +- vstruct/defs/elf.py | 11 + vstruct/defs/macho/loader.py | 2 + vstruct/defs/win32.py | 12 + vstruct/defs/windows/__init__.py | 9 +- vstruct/defs/windows/win_5_1_i386/ntdll.py | 157 +++++---- vstruct/defs/windows/win_5_1_i386/ntoskrnl.py | 298 +++++++++--------- vstruct/defs/windows/win_5_1_i386/win32k.py | 3 +- vstruct/defs/windows/win_6_1_amd64/ntdll.py | 202 ++++++------ vstruct/defs/windows/win_6_1_wow64/ntdll.py | 222 ++++++------- vstruct/primitives.py | 22 +- 12 files changed, 496 insertions(+), 452 deletions(-) diff --git a/setup.py b/setup.py index 0b9cc08..ea3b99d 100644 --- a/setup.py +++ b/setup.py @@ -59,9 +59,9 @@ def readme(): # that you indicate whether you support Python 2, Python 3 or both. 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', - # 'Programming Language :: Python :: 3', - # 'Programming Language :: Python :: 3.2', - # 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.8', # 'Programming Language :: Python :: 3.4', ], install_requires = [ diff --git a/vstruct/__init__.py b/vstruct/__init__.py index 22f0321..1f48ccb 100644 --- a/vstruct/__init__.py +++ b/vstruct/__init__.py @@ -27,9 +27,9 @@ def __init__(self, bigend=False): self._vs_fmtbase = '>' def vsGetClassPath(self): - ''' + """ Return the entire class name (including module path). - ''' + """ return '%s.%s' % (self.__module__, self._vs_name) def vsParse(self, bytes_parse, offset=0): diff --git a/vstruct/defs/elf.py b/vstruct/defs/elf.py index 789c1e9..6c7f44b 100644 --- a/vstruct/defs/elf.py +++ b/vstruct/defs/elf.py @@ -29,6 +29,7 @@ def __init__(self): self.e_shnum = v_uint16() self.e_shstrndx = v_uint16() + class Elf32Section(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -43,6 +44,7 @@ def __init__(self): self.sh_addralign = v_uint32() self.sh_entsize = v_uint32() + class Elf32Pheader(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -55,17 +57,20 @@ def __init__(self): self.p_flags = v_uint32() self.p_align = v_uint32() + class Elf32Reloc(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.r_offset = v_ptr32() self.r_info = v_uint32() + class Elf32Reloca(Elf32Reloc): def __init__(self): Elf32Reloc.__init__(self) self.r_addend = v_uint32() + class Elf32Symbol(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -76,6 +81,7 @@ def __init__(self): self.st_other = v_uint8() self.st_shndx = v_uint16() + class Elf32Dynamic(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -107,6 +113,7 @@ def __init__(self): self.e_shnum = v_uint16() self.e_shstrndx = v_uint16() + class Elf64Section(Elf32Section): def __init__(self): vstruct.VStruct.__init__(self) @@ -121,6 +128,7 @@ def __init__(self): self.sh_addralign = v_uint64() self.sh_entsize = v_uint64() + class Elf64Pheader(Elf32Pheader): def __init__(self): vstruct.VStruct.__init__(self) @@ -140,6 +148,7 @@ def __init__(self): self.r_offset = v_ptr64() self.r_info = v_uint64() + class Elf64Reloca(Elf64Reloc): def __init__(self): #Elf64Reloc.__init__(self) @@ -148,6 +157,7 @@ def __init__(self): self.r_info = v_uint64() self.r_addend = v_uint64() + class Elf64Symbol(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -158,6 +168,7 @@ def __init__(self): self.st_value = v_uint64() self.st_size = v_uint64() + class Elf64Dynamic(Elf32Dynamic): pass diff --git a/vstruct/defs/macho/loader.py b/vstruct/defs/macho/loader.py index 82716eb..62cbf7e 100644 --- a/vstruct/defs/macho/loader.py +++ b/vstruct/defs/macho/loader.py @@ -6,6 +6,7 @@ cpu_subtype_t = vs_prim.v_uint32 lc_str = vs_prim.v_uint32 + class mach_header(vstruct.VStruct): def __init__(self): @@ -350,6 +351,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.itoc = vs_prim.v_uint32() # index into the table of contents + class prebind_cksum_command(vstruct.VStruct): def __init__(self): diff --git a/vstruct/defs/win32.py b/vstruct/defs/win32.py index d1ad0ea..60a0c9b 100644 --- a/vstruct/defs/win32.py +++ b/vstruct/defs/win32.py @@ -21,12 +21,14 @@ def __init__(self): self.ExceptionAddress = v_ptr() self.NumberParameters = v_uint32() + class EXCEPTION_REGISTRATION(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.prev = v_ptr() self.handler = v_ptr() + class HEAP(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -67,6 +69,7 @@ def __init__(self): self.FrontEndHeapType = v_uint8() self.LastSegmentIndex = v_uint8() + class HEAP_SEGMENT(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -86,6 +89,7 @@ def __init__(self): self.Reserved = v_uint16() self.LastEntryInSegment = v_ptr() + class HEAP_ENTRY(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -96,12 +100,14 @@ def __init__(self): self.Unused = v_uint8() self.TagIndex = v_uint8() + class ListEntry(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.Flink = v_ptr() self.Blink = v_ptr() + class NT_TIB(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -114,6 +120,7 @@ def __init__(self): self.ArbitraryUserPtr = v_ptr() self.Self = v_ptr() + class PEB(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -184,6 +191,7 @@ def __init__(self): self.SystemAssemblyStorageMap = v_ptr() self.MinimumStackCommit = v_uint32() + class SEH3_SCOPETABLE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -191,6 +199,7 @@ def __init__(self): self.FilterFunction = v_ptr() self.HandlerFunction = v_ptr() + class SEH4_SCOPETABLE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -202,6 +211,7 @@ def __init__(self): self.FilterFunction = v_ptr() self.HandlerFunction = v_ptr() + class TEB(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) @@ -221,11 +231,13 @@ def __init__(self): self.CurrentLocale = v_uint32() self.FpSoftwareStatusRegister = v_uint32() + class CLSID(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.uuid = GUID() + class IID(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) diff --git a/vstruct/defs/windows/__init__.py b/vstruct/defs/windows/__init__.py index 172f9a3..a231feb 100644 --- a/vstruct/defs/windows/__init__.py +++ b/vstruct/defs/windows/__init__.py @@ -6,6 +6,7 @@ import ctypes import platform + def isSysWow64(): k32 = ctypes.windll.kernel32 if not hasattr(k32, 'IsWow64Process'): @@ -16,6 +17,7 @@ def isSysWow64(): return False return bool(ret.value) + def getCurrentDef(normname): bname, wver, stuff, whichkern = platform.win32_ver() wvertup = wver.split('.') @@ -23,14 +25,15 @@ def getCurrentDef(normname): if isSysWow64(): arch = 'wow64' - modname = 'vstruct.defs.windows.win_%s_%s_%s.%s' % (wvertup[0], wvertup[1], arch, normname) + modname = 'vstruct.defs.windows.win_{!s}_{!s}_{!s}.{!s}'.format(wvertup[0], wvertup[1], arch, normname) try: mod = __import__(modname, {}, {}, 1) - except ImportError, e: + except ImportError as e: mod = None return mod + if __name__ == '__main__': - print getCurrentDef('ntdll') + print(getCurrentDef('ntdll')) diff --git a/vstruct/defs/windows/win_5_1_i386/ntdll.py b/vstruct/defs/windows/win_5_1_i386/ntdll.py index 0a0c027..48c42bb 100644 --- a/vstruct/defs/windows/win_5_1_i386/ntdll.py +++ b/vstruct/defs/windows/win_5_1_i386/ntdll.py @@ -360,11 +360,11 @@ def __init__(self): self.CpuID = v_uint8() self.CpuStep = v_uint16() self.ProcessorState = KPROCESSOR_STATE() - self.KernelReserved = v_bytes(size=64) # FIXME Unknown Array Type - self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type - self.PrcbPad0 = v_bytes(size=92) # FIXME Unknown Array Type - self.LockQueue = v_bytes(size=92) # FIXME Unknown Array Type - self.PrcbPad1 = v_bytes(size=8) # FIXME Unknown Array Type + self.KernelReserved = v_bytes(size=64) # FIXME Unknown Array Type + self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type + self.PrcbPad0 = v_bytes(size=92) # FIXME Unknown Array Type + self.LockQueue = v_bytes(size=92) # FIXME Unknown Array Type + self.PrcbPad1 = v_bytes(size=8) # FIXME Unknown Array Type self.NpxThread = v_ptr32() self.InterruptCount = v_uint32() self.KernelTime = v_uint32() @@ -376,11 +376,11 @@ def __init__(self): self.PageColor = v_uint32() self.SkipTick = v_uint32() self.MultiThreadSetBusy = v_uint8() - self.Spare2 = v_bytes(size=3) # FIXME Unknown Array Type + self.Spare2 = v_bytes(size=3) # FIXME Unknown Array Type self.ParentNode = v_ptr32() self.MultiThreadProcessorSet = v_uint32() self.MultiThreadSetMaster = v_ptr32() - self.ThreadStartCount = v_bytes(size=8) # FIXME Unknown Array Type + self.ThreadStartCount = v_bytes(size=8) # FIXME Unknown Array Type self.CcFastReadNoWait = v_uint32() self.CcFastReadWait = v_uint32() self.CcFastReadNotPossible = v_uint32() @@ -396,22 +396,22 @@ def __init__(self): self.KeIcacheFlushCount = v_uint32() self.KeSecondLevelTbFills = v_uint32() self.KeSystemCalls = v_uint32() - self.SpareCounter0 = v_bytes(size=4) # FIXME Unknown Array Type - self.PPLookasideList = v_bytes(size=4) # FIXME Unknown Array Type - self.PPNPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type - self.PPPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type + self.SpareCounter0 = v_bytes(size=4) # FIXME Unknown Array Type + self.PPLookasideList = v_bytes(size=4) # FIXME Unknown Array Type + self.PPNPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type + self.PPPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type self.PacketBarrier = v_uint32() self.ReverseStall = v_uint32() self.IpiFrame = v_ptr32() - self.PrcbPad2 = v_bytes(size=52) # FIXME Unknown Array Type - self.CurrentPacket = v_bytes(size=12) # FIXME Unknown Array Type + self.PrcbPad2 = v_bytes(size=52) # FIXME Unknown Array Type + self.CurrentPacket = v_bytes(size=12) # FIXME Unknown Array Type self.TargetSet = v_uint32() self.WorkerRoutine = v_ptr32() self.IpiFrozen = v_uint32() - self.PrcbPad3 = v_bytes(size=40) # FIXME Unknown Array Type + self.PrcbPad3 = v_bytes(size=40) # FIXME Unknown Array Type self.RequestSummary = v_uint32() self.SignalDone = v_ptr32() - self.PrcbPad4 = v_bytes(size=56) # FIXME Unknown Array Type + self.PrcbPad4 = v_bytes(size=56) # FIXME Unknown Array Type self.DpcListHead = LIST_ENTRY() self.DpcStack = v_ptr32() self.DpcCount = v_uint32() @@ -423,14 +423,14 @@ def __init__(self): self.MaximumDpcQueueDepth = v_uint32() self.MinimumDpcRate = v_uint32() self.QuantumEnd = v_uint32() - self.PrcbPad5 = v_bytes(size=16) # FIXME Unknown Array Type + self.PrcbPad5 = v_bytes(size=16) # FIXME Unknown Array Type self.DpcLock = v_uint32() - self.PrcbPad6 = v_bytes(size=28) # FIXME Unknown Array Type + self.PrcbPad6 = v_bytes(size=28) # FIXME Unknown Array Type self.CallDpc = KDPC() self.ChainedInterruptList = v_ptr32() self.LookasideIrpFloat = v_uint32() - self.SpareFields0 = v_bytes(size=24) # FIXME Unknown Array Type - self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type + self.SpareFields0 = v_bytes(size=24) # FIXME Unknown Array Type + self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type self.InitialApicId = v_uint8() self.LogicalProcessorsPerPhysicalProcessor = v_uint8() self._pad0910 = v_bytes(size=1) @@ -487,7 +487,7 @@ def __init__(self): self.ExceptionRecord = v_ptr32() self.ExceptionAddress = v_ptr32() self.NumberParameters = v_uint32() - self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type + self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type class SID(vstruct.VStruct): @@ -496,7 +496,7 @@ def __init__(self): self.Revision = v_uint8() self.SubAuthorityCount = v_uint8() self.IdentifierAuthority = SID_IDENTIFIER_AUTHORITY() - self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type + self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type class PS_JOB_TOKEN_FILTER(vstruct.VStruct): @@ -599,7 +599,7 @@ def __init__(self): class EX_PUSH_LOCK_CACHE_AWARE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Locks = v_bytes(size=128) # FIXME Unknown Array Type + self.Locks = v_bytes(size=128) # FIXME Unknown Array Type class MMWSL(vstruct.VStruct): @@ -807,7 +807,7 @@ def __init__(self): self.ErrorSelector = v_uint32() self.DataOffset = v_uint32() self.DataSelector = v_uint32() - self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type + self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type self.Cr0NpxState = v_uint32() @@ -937,7 +937,7 @@ def __init__(self): self.KernelStack = v_ptr32() self.DebugActive = v_uint8() self.State = v_uint8() - self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type + self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type self.Iopl = v_uint8() self.NpxState = v_uint8() self.Saturation = v_uint8() @@ -945,7 +945,7 @@ def __init__(self): self.ApcState = KAPC_STATE() self.ContextSwitches = v_uint32() self.IdleSwapBlock = v_uint8() - self.Spare0 = v_bytes(size=3) # FIXME Unknown Array Type + self.Spare0 = v_bytes(size=3) # FIXME Unknown Array Type self.WaitStatus = v_uint32() self.WaitIrql = v_uint8() self.WaitMode = v_uint8() @@ -981,7 +981,7 @@ def __init__(self): self.CallbackStack = v_ptr32() self.Win32Thread = v_ptr32() self.TrapFrame = v_ptr32() - self.ApcStatePointer = v_bytes(size=8) # FIXME Unknown Array Type + self.ApcStatePointer = v_bytes(size=8) # FIXME Unknown Array Type self.PreviousMode = v_uint8() self.EnableStackSwap = v_uint8() self.LargeStack = v_uint8() @@ -1041,7 +1041,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.StartTime = v_uint64() self.EndTime = v_uint64() - self.IdleHandlerReserved = v_bytes(size=16) # FIXME Unknown Array Type + self.IdleHandlerReserved = v_bytes(size=16) # FIXME Unknown Array Type class KWAIT_BLOCK(vstruct.VStruct): @@ -1060,7 +1060,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.Header = DISPATCHER_HEADER() self.ProfileListHead = LIST_ENTRY() - self.DirectoryTableBase = v_bytes(size=8) # FIXME Unknown Array Type + self.DirectoryTableBase = v_bytes(size=8) # FIXME Unknown Array Type self.LdtDescriptor = KGDTENTRY() self.Int21Descriptor = KIDTENTRY() self.IopmOffset = v_uint16() @@ -1120,7 +1120,7 @@ def __init__(self): self.EFlags = v_uint32() self.Esp = v_uint32() self.SegSs = v_uint32() - self.ExtendedRegisters = v_bytes(size=512) # FIXME Unknown Array Type + self.ExtendedRegisters = v_bytes(size=512) # FIXME Unknown Array Type class EX_FAST_REF(vstruct.VStruct): @@ -1137,7 +1137,7 @@ def __init__(self): self.Size = v_uint32() self.TagIndex = v_uint16() self.CreatorBackTraceIndex = v_uint16() - self.TagName = v_bytes(size=48) # FIXME Unknown Array Type + self.TagName = v_bytes(size=48) # FIXME Unknown Array Type class PAGEFAULT_HISTORY(vstruct.VStruct): @@ -1259,7 +1259,7 @@ def __init__(self): self.HashFunction = v_ptr32() self.NoOfTraces = v_uint32() self.NoOfHits = v_uint32() - self.HashCounter = v_bytes(size=64) # FIXME Unknown Array Type + self.HashCounter = v_bytes(size=64) # FIXME Unknown Array Type class GENERAL_LOOKASIDE(vstruct.VStruct): @@ -1280,7 +1280,7 @@ def __init__(self): self.ListEntry = LIST_ENTRY() self.LastTotalAllocates = v_uint32() self.LastAllocateMisses = v_uint32() - self.Future = v_bytes(size=8) # FIXME Unknown Array Type + self.Future = v_bytes(size=8) # FIXME Unknown Array Type class EX_PUSH_LOCK(vstruct.VStruct): @@ -1328,10 +1328,10 @@ def __init__(self): self.DataSelector = v_uint32() self.MXCsr = v_uint32() self.MXCsrMask = v_uint32() - self.RegisterArea = v_bytes(size=128) # FIXME Unknown Array Type - self.Reserved3 = v_bytes(size=128) # FIXME Unknown Array Type - self.Reserved4 = v_bytes(size=224) # FIXME Unknown Array Type - self.Align16Byte = v_bytes(size=8) # FIXME Unknown Array Type + self.RegisterArea = v_bytes(size=128) # FIXME Unknown Array Type + self.Reserved3 = v_bytes(size=128) # FIXME Unknown Array Type + self.Reserved4 = v_bytes(size=224) # FIXME Unknown Array Type + self.Align16Byte = v_bytes(size=8) # FIXME Unknown Array Type class unnamed(vstruct.VStruct): @@ -1496,7 +1496,7 @@ def __init__(self): self.DriverInit = v_ptr32() self.DriverStartIo = v_ptr32() self.DriverUnload = v_ptr32() - self.MajorFunction = v_bytes(size=112) # FIXME Unknown Array Type + self.MajorFunction = v_bytes(size=112) # FIXME Unknown Array Type class ACCESS_STATE(vstruct.VStruct): @@ -1586,7 +1586,7 @@ def __init__(self): class IMAGE_SECTION_HEADER(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Name = v_bytes(size=8) # FIXME Unknown Array Type + self.Name = v_bytes(size=8) # FIXME Unknown Array Type self.Misc = unnamed() self.VirtualAddress = v_uint32() self.SizeOfRawData = v_uint32() @@ -1619,7 +1619,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.Offset = v_uint32() self.HDC = v_uint32() - self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type + self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type class KPROCESSOR_STATE(vstruct.VStruct): @@ -1666,12 +1666,12 @@ def __init__(self): self.FastPebUnlockRoutine = v_ptr32() self.EnvironmentUpdateCount = v_uint32() self.KernelCallbackTable = v_ptr32() - self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type + self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type self.AtlThunkSListPtr32 = v_uint32() self.FreeList = v_ptr32() self.TlsExpansionCounter = v_uint32() self.TlsBitmap = v_ptr32() - self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type + self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type self.ReadOnlySharedMemoryBase = v_ptr32() self.ReadOnlySharedMemoryHeap = v_ptr32() self.ReadOnlyStaticServerData = v_ptr32() @@ -1702,10 +1702,10 @@ def __init__(self): self.ImageSubsystemMajorVersion = v_uint32() self.ImageSubsystemMinorVersion = v_uint32() self.ImageProcessAffinityMask = v_uint32() - self.GdiHandleBuffer = v_bytes(size=136) # FIXME Unknown Array Type + self.GdiHandleBuffer = v_bytes(size=136) # FIXME Unknown Array Type self.PostProcessInitRoutine = v_ptr32() self.TlsExpansionBitmap = v_ptr32() - self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type + self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type self.SessionId = v_uint32() self.AppCompatFlags = ULARGE_INTEGER() self.AppCompatFlagsUser = ULARGE_INTEGER() @@ -1744,7 +1744,7 @@ def __init__(self): class SID_IDENTIFIER_AUTHORITY(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Value = v_bytes(size=6) # FIXME Unknown Array Type + self.Value = v_bytes(size=6) # FIXME Unknown Array Type class SECTION_OBJECT_POINTERS(vstruct.VStruct): @@ -1799,24 +1799,24 @@ def __init__(self): self.CountOfOwnedCriticalSections = v_uint32() self.CsrClientThread = v_ptr32() self.Win32ThreadInfo = v_ptr32() - self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type - self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type + self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type + self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type self.WOW32Reserved = v_ptr32() self.CurrentLocale = v_uint32() self.FpSoftwareStatusRegister = v_uint32() - self.SystemReserved1 = v_bytes(size=216) # FIXME Unknown Array Type + self.SystemReserved1 = v_bytes(size=216) # FIXME Unknown Array Type self.ExceptionCode = v_uint32() self.ActivationContextStack = ACTIVATION_CONTEXT_STACK() - self.SpareBytes1 = v_bytes(size=24) # FIXME Unknown Array Type + self.SpareBytes1 = v_bytes(size=24) # FIXME Unknown Array Type self.GdiTebBatch = GDI_TEB_BATCH() self.RealClientId = CLIENT_ID() self.GdiCachedProcessHandle = v_ptr32() self.GdiClientPID = v_uint32() self.GdiClientTID = v_uint32() self.GdiThreadLocalInfo = v_ptr32() - self.Win32ClientInfo = v_bytes(size=248) # FIXME Unknown Array Type - self.glDispatchTable = v_bytes(size=932) # FIXME Unknown Array Type - self.glReserved1 = v_bytes(size=116) # FIXME Unknown Array Type + self.Win32ClientInfo = v_bytes(size=248) # FIXME Unknown Array Type + self.glDispatchTable = v_bytes(size=932) # FIXME Unknown Array Type + self.glReserved1 = v_bytes(size=116) # FIXME Unknown Array Type self.glReserved2 = v_ptr32() self.glSectionInfo = v_ptr32() self.glSection = v_ptr32() @@ -1825,16 +1825,16 @@ def __init__(self): self.glContext = v_ptr32() self.LastStatusValue = v_uint32() self.StaticUnicodeString = UNICODE_STRING() - self.StaticUnicodeBuffer = v_bytes(size=522) # FIXME Unknown Array Type + self.StaticUnicodeBuffer = v_bytes(size=522) # FIXME Unknown Array Type self._pad0e0c = v_bytes(size=2) self.DeallocationStack = v_ptr32() - self.TlsSlots = v_bytes(size=256) # FIXME Unknown Array Type + self.TlsSlots = v_bytes(size=256) # FIXME Unknown Array Type self.TlsLinks = LIST_ENTRY() self.Vdm = v_ptr32() self.ReservedForNtRpc = v_ptr32() - self.DbgSsReserved = v_bytes(size=8) # FIXME Unknown Array Type + self.DbgSsReserved = v_bytes(size=8) # FIXME Unknown Array Type self.HardErrorsAreDisabled = v_uint32() - self.Instrumentation = v_bytes(size=64) # FIXME Unknown Array Type + self.Instrumentation = v_bytes(size=64) # FIXME Unknown Array Type self.WinSockData = v_ptr32() self.GdiBatchCount = v_uint32() self.InDbgPrint = v_uint8() @@ -1855,7 +1855,7 @@ def __init__(self): self.CurrentTransactionHandle = v_ptr32() self.ActiveFrame = v_ptr32() self.SafeThunkCall = v_uint8() - self.BooleanSpare = v_bytes(size=3) # FIXME Unknown Array Type + self.BooleanSpare = v_bytes(size=3) # FIXME Unknown Array Type class KTRAP_FRAME(vstruct.VStruct): @@ -2014,7 +2014,7 @@ def __init__(self): self.ProcessLocksList = LIST_ENTRY() self.EntryCount = v_uint32() self.ContentionCount = v_uint32() - self.Spare = v_bytes(size=8) # FIXME Unknown Array Type + self.Spare = v_bytes(size=8) # FIXME Unknown Array Type class OBJECT_TYPE(vstruct.VStruct): @@ -2106,8 +2106,8 @@ def __init__(self): self.PackageIdleTime = v_uint32() self.DebugCount = v_uint32() self.LastSysTime = v_uint32() - self.TotalIdleStateTime = v_bytes(size=24) # FIXME Unknown Array Type - self.TotalIdleTransitions = v_bytes(size=12) # FIXME Unknown Array Type + self.TotalIdleStateTime = v_bytes(size=24) # FIXME Unknown Array Type + self.TotalIdleTransitions = v_bytes(size=12) # FIXME Unknown Array Type self._pad0090 = v_bytes(size=4) self.PreviousC3StateTime = v_uint64() self.KneeThrottleIndex = v_uint8() @@ -2271,7 +2271,7 @@ def __init__(self): self.ClusterShift = v_uint8() self.Reserved = v_uint8() self.NumberOfChunks = v_uint16() - self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type + self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type class PEB_FREE_BLOCK(vstruct.VStruct): @@ -2342,7 +2342,7 @@ def __init__(self): self.TraceCount = v_uint32() self.Index = v_uint16() self.Depth = v_uint16() - self.BackTrace = v_bytes(size=128) # FIXME Unknown Array Type + self.BackTrace = v_bytes(size=128) # FIXME Unknown Array Type class OBJECT_DUMP_CONTROL(vstruct.VStruct): @@ -2358,7 +2358,7 @@ def __init__(self): self.Data1 = v_uint32() self.Data2 = v_uint16() self.Data3 = v_uint16() - self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type + self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type class HANDLE_TRACE_DB_ENTRY(vstruct.VStruct): @@ -2367,13 +2367,13 @@ def __init__(self): self.ClientId = CLIENT_ID() self.Handle = v_ptr32() self.Type = v_uint32() - self.StackTrace = v_bytes(size=64) # FIXME Unknown Array Type + self.StackTrace = v_bytes(size=64) # FIXME Unknown Array Type class KAPC_STATE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.ApcListHead = v_bytes(size=64) # FIXME Unknown Array Type + self.ApcListHead = v_bytes(size=64) # FIXME Unknown Array Type self.Process = v_ptr32() self.KernelApcInProgress = v_uint8() self.KernelApcPending = v_uint8() @@ -2420,7 +2420,7 @@ def __init__(self): self.RealDevice = v_ptr32() self.SerialNumber = v_uint32() self.ReferenceCount = v_uint32() - self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type + self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type class IO_STACK_LOCATION(vstruct.VStruct): @@ -2468,7 +2468,7 @@ def __init__(self): self.ProcessorMask = v_uint32() self.Color = v_uint32() self.MmShiftedColor = v_uint32() - self.FreeCount = v_bytes(size=8) # FIXME Unknown Array Type + self.FreeCount = v_bytes(size=8) # FIXME Unknown Array Type self._pad0018 = v_bytes(size=4) self.DeadStackList = SLIST_HEADER() self.PfnDereferenceSListHead = SLIST_HEADER() @@ -2537,17 +2537,17 @@ def __init__(self): self.TimeZoneBias = KSYSTEM_TIME() self.ImageNumberLow = v_uint16() self.ImageNumberHigh = v_uint16() - self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type + self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type self.MaxStackTraceDepth = v_uint32() self.CryptoExponent = v_uint32() self.TimeZoneId = v_uint32() - self.Reserved2 = v_bytes(size=32) # FIXME Unknown Array Type + self.Reserved2 = v_bytes(size=32) # FIXME Unknown Array Type self.NtProductType = v_uint32() self.ProductTypeIsValid = v_uint8() self._pad026c = v_bytes(size=3) self.NtMajorVersion = v_uint32() self.NtMinorVersion = v_uint32() - self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type + self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type self.Reserved1 = v_uint32() self.Reserved3 = v_uint32() self.TimeSlip = v_uint32() @@ -2570,7 +2570,7 @@ def __init__(self): self.TestRetInstruction = v_uint64() self.SystemCall = v_uint32() self.SystemCallReturn = v_uint32() - self.SystemCallPad = v_bytes(size=24) # FIXME Unknown Array Type + self.SystemCallPad = v_bytes(size=24) # FIXME Unknown Array Type self.TickCount = KSYSTEM_TIME() self._pad0330 = v_bytes(size=4) self.Cookie = v_uint32() @@ -2586,7 +2586,7 @@ def __init__(self): self.ErrorSelector = v_uint32() self.DataOffset = v_uint32() self.DataSelector = v_uint32() - self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type + self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type class KSPECIAL_REGISTERS(vstruct.VStruct): @@ -2606,7 +2606,7 @@ def __init__(self): self.Idtr = DESCRIPTOR() self.Tr = v_uint16() self.Ldtr = v_uint16() - self.Reserved = v_bytes(size=24) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=24) # FIXME Unknown Array Type class FS_FILTER_PARAMETERS(vstruct.VStruct): @@ -2640,7 +2640,7 @@ def __init__(self): self.AlignRound = v_uint32() self.AlignMask = v_uint32() self.VirtualAllocdBlocks = LIST_ENTRY() - self.Segments = v_bytes(size=256) # FIXME Unknown Array Type + self.Segments = v_bytes(size=256) # FIXME Unknown Array Type self.u = unnamed() self.u2 = unnamed() self.AllocatorBackTraceIndex = v_uint16() @@ -2697,8 +2697,8 @@ def __init__(self): self.RundownProtect = EX_RUNDOWN_REF() self.UniqueProcessId = v_ptr32() self.ActiveProcessLinks = LIST_ENTRY() - self.QuotaUsage = v_bytes(size=12) # FIXME Unknown Array Type - self.QuotaPeak = v_bytes(size=12) # FIXME Unknown Array Type + self.QuotaUsage = v_bytes(size=12) # FIXME Unknown Array Type + self.QuotaPeak = v_bytes(size=12) # FIXME Unknown Array Type self.CommitCharge = v_uint32() self.PeakVirtualSize = v_uint32() self.VirtualSize = v_uint32() @@ -2734,7 +2734,7 @@ def __init__(self): self.PageDirectoryPte = HARDWARE_PTE_X86() self._pad0170 = v_bytes(size=4) self.Session = v_ptr32() - self.ImageFileName = v_bytes(size=16) # FIXME Unknown Array Type + self.ImageFileName = v_bytes(size=16) # FIXME Unknown Array Type self.JobLinks = LIST_ENTRY() self.LockedPagesList = v_ptr32() self.ThreadListHead = LIST_ENTRY() @@ -2860,7 +2860,7 @@ def __init__(self): self.InterfaceType = v_uint32() self.BusNumber = v_uint32() self.SlotNumber = v_uint32() - self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type self.AlternativeLists = v_uint32() self.List = v_uint32() @@ -2872,6 +2872,3 @@ def __init__(self): self.ShareDisposition = v_uint8() self.Flags = v_uint16() self.u = unnamed() - - - diff --git a/vstruct/defs/windows/win_5_1_i386/ntoskrnl.py b/vstruct/defs/windows/win_5_1_i386/ntoskrnl.py index d0d3618..c22bc3f 100644 --- a/vstruct/defs/windows/win_5_1_i386/ntoskrnl.py +++ b/vstruct/defs/windows/win_5_1_i386/ntoskrnl.py @@ -598,7 +598,7 @@ def __init__(self): self.Revision = v_uint8() self.SubAuthorityCount = v_uint8() self.IdentifierAuthority = SID_IDENTIFIER_AUTHORITY() - self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type + self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type class MMPTE_HARDWARE(vstruct.VStruct): @@ -628,7 +628,7 @@ def __init__(self): self.Esp0 = v_uint32() self.Ss0 = v_uint16() self.Reserved1 = v_uint16() - self.NotUsed1 = v_bytes(size=16) # FIXME Unknown Array Type + self.NotUsed1 = v_bytes(size=16) # FIXME Unknown Array Type self.CR3 = v_uint32() self.Eip = v_uint32() self.EFlags = v_uint32() @@ -657,7 +657,7 @@ def __init__(self): self.Flags = v_uint16() self.IoMapBase = v_uint16() self.IoMaps = v_uint16() - self.IntDirectionMap = v_bytes(size=32) # FIXME Unknown Array Type + self.IntDirectionMap = v_bytes(size=32) # FIXME Unknown Array Type class CURDIR(vstruct.VStruct): @@ -694,7 +694,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.Revision = v_uint32() self.DynamicThrottle = v_uint8() - self.Spare = v_bytes(size=3) # FIXME Unknown Array Type + self.Spare = v_bytes(size=3) # FIXME Unknown Array Type self.DisableCStates = v_uint32() self.PolicyCount = v_uint32() self.Policy = v_uint32() @@ -818,7 +818,7 @@ def __init__(self): self.ExceptionAddress = v_uint64() self.NumberParameters = v_uint32() self.unusedAlignment = v_uint32() - self.ExceptionInformation = v_bytes(size=120) # FIXME Unknown Array Type + self.ExceptionInformation = v_bytes(size=120) # FIXME Unknown Array Type class KPROCESS(vstruct.VStruct): @@ -826,7 +826,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.Header = DISPATCHER_HEADER() self.ProfileListHead = LIST_ENTRY() - self.DirectoryTableBase = v_bytes(size=8) # FIXME Unknown Array Type + self.DirectoryTableBase = v_bytes(size=8) # FIXME Unknown Array Type self.LdtDescriptor = KGDTENTRY() self.Int21Descriptor = KIDTENTRY() self.IopmOffset = v_uint16() @@ -905,7 +905,7 @@ def __init__(self): self.FreeMisses = v_uint32() self.LastTotalAllocates = v_uint32() self.LastAllocateMisses = v_uint32() - self.Counters = v_bytes(size=8) # FIXME Unknown Array Type + self.Counters = v_bytes(size=8) # FIXME Unknown Array Type class MMPTE_TRANSITION(vstruct.VStruct): @@ -944,7 +944,7 @@ def __init__(self): self.Mode = v_uint32() self.ServiceCount = v_uint32() self.DispatchCount = v_uint32() - self.DispatchCode = v_bytes(size=424) # FIXME Unknown Array Type + self.DispatchCode = v_bytes(size=424) # FIXME Unknown Array Type class OWNER_ENTRY(vstruct.VStruct): @@ -1024,7 +1024,7 @@ def __init__(self): self.PeakNonPagedBytes = v_uint32() self.BurstAllocationsFailedDeliberately = v_uint32() self.SessionTrims = v_uint32() - self.Reserved = v_bytes(size=8) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=8) # FIXME Unknown Array Type class MAILSLOT_CREATE_PARAMETERS(vstruct.VStruct): @@ -1106,7 +1106,7 @@ class SYSTEM_POWER_LEVEL(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.Enable = v_uint8() - self.Spare = v_bytes(size=3) # FIXME Unknown Array Type + self.Spare = v_bytes(size=3) # FIXME Unknown Array Type self.BatteryLevel = v_uint32() self.PowerPolicy = POWER_ACTION_POLICY() self.MinSystemState = v_uint32() @@ -1225,7 +1225,7 @@ class CM_INDEX_HINT_BLOCK(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.Count = v_uint32() - self.HashKey = v_bytes(size=4) # FIXME Unknown Array Type + self.HashKey = v_bytes(size=4) # FIXME Unknown Array Type class SEP_AUDIT_POLICY(vstruct.VStruct): @@ -1380,9 +1380,9 @@ def __init__(self): self.ThreadOwner = v_ptr32() self.ResourceList = LIST_ENTRY() self.HashChainList = LIST_ENTRY() - self.StackTrace = v_bytes(size=32) # FIXME Unknown Array Type - self.LastAcquireTrace = v_bytes(size=32) # FIXME Unknown Array Type - self.LastReleaseTrace = v_bytes(size=32) # FIXME Unknown Array Type + self.StackTrace = v_bytes(size=32) # FIXME Unknown Array Type + self.LastAcquireTrace = v_bytes(size=32) # FIXME Unknown Array Type + self.LastReleaseTrace = v_bytes(size=32) # FIXME Unknown Array Type class HEAP_PSEUDO_TAG_ENTRY(vstruct.VStruct): @@ -1426,7 +1426,7 @@ def __init__(self): self.PromoteLimit = v_uint32() self.DemotePercent = v_uint8() self.PromotePercent = v_uint8() - self.Spare = v_bytes(size=2) # FIXME Unknown Array Type + self.Spare = v_bytes(size=2) # FIXME Unknown Array Type self.AllowDemotion = v_uint32() @@ -1551,7 +1551,7 @@ def __init__(self): self.RealDevice = v_ptr32() self.SerialNumber = v_uint32() self.ReferenceCount = v_uint32() - self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type + self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type class SEGMENT(vstruct.VStruct): @@ -1605,17 +1605,17 @@ def __init__(self): self.TimeZoneBias = KSYSTEM_TIME() self.ImageNumberLow = v_uint16() self.ImageNumberHigh = v_uint16() - self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type + self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type self.MaxStackTraceDepth = v_uint32() self.CryptoExponent = v_uint32() self.TimeZoneId = v_uint32() - self.Reserved2 = v_bytes(size=32) # FIXME Unknown Array Type + self.Reserved2 = v_bytes(size=32) # FIXME Unknown Array Type self.NtProductType = v_uint32() self.ProductTypeIsValid = v_uint8() self._pad026c = v_bytes(size=3) self.NtMajorVersion = v_uint32() self.NtMinorVersion = v_uint32() - self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type + self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type self.Reserved1 = v_uint32() self.Reserved3 = v_uint32() self.TimeSlip = v_uint32() @@ -1638,7 +1638,7 @@ def __init__(self): self.TestRetInstruction = v_uint64() self.SystemCall = v_uint32() self.SystemCallReturn = v_uint32() - self.SystemCallPad = v_bytes(size=24) # FIXME Unknown Array Type + self.SystemCallPad = v_bytes(size=24) # FIXME Unknown Array Type self.TickCount = KSYSTEM_TIME() self._pad0330 = v_bytes(size=4) self.Cookie = v_uint32() @@ -1690,7 +1690,7 @@ def __init__(self): self.AlignRound = v_uint32() self.AlignMask = v_uint32() self.VirtualAllocdBlocks = LIST_ENTRY() - self.Segments = v_bytes(size=256) # FIXME Unknown Array Type + self.Segments = v_bytes(size=256) # FIXME Unknown Array Type self.u = unnamed() self.u2 = unnamed() self.AllocatorBackTraceIndex = v_uint16() @@ -1738,8 +1738,8 @@ def __init__(self): self.RundownProtect = EX_RUNDOWN_REF() self.UniqueProcessId = v_ptr32() self.ActiveProcessLinks = LIST_ENTRY() - self.QuotaUsage = v_bytes(size=12) # FIXME Unknown Array Type - self.QuotaPeak = v_bytes(size=12) # FIXME Unknown Array Type + self.QuotaUsage = v_bytes(size=12) # FIXME Unknown Array Type + self.QuotaPeak = v_bytes(size=12) # FIXME Unknown Array Type self.CommitCharge = v_uint32() self.PeakVirtualSize = v_uint32() self.VirtualSize = v_uint32() @@ -1775,7 +1775,7 @@ def __init__(self): self.PageDirectoryPte = HARDWARE_PTE() self._pad0170 = v_bytes(size=4) self.Session = v_ptr32() - self.ImageFileName = v_bytes(size=16) # FIXME Unknown Array Type + self.ImageFileName = v_bytes(size=16) # FIXME Unknown Array Type self.JobLinks = LIST_ENTRY() self.LockedPagesList = v_ptr32() self.ThreadListHead = LIST_ENTRY() @@ -1828,7 +1828,7 @@ def __init__(self): self.NotifyBlock = v_ptr32() self.ProcessID = v_ptr32() self.Callers = v_uint32() - self.CallerAddress = v_bytes(size=40) # FIXME Unknown Array Type + self.CallerAddress = v_bytes(size=40) # FIXME Unknown Array Type self.KeyBodyList = LIST_ENTRY() @@ -1965,7 +1965,7 @@ def __init__(self): self.MaxStateChange = v_uint8() self.MaxManipulate = v_uint8() self.Simulation = v_uint8() - self.Unused = v_bytes(size=2) # FIXME Unknown Array Type + self.Unused = v_bytes(size=2) # FIXME Unknown Array Type self.KernBase = v_uint64() self.PsLoadedModuleList = v_uint64() self.DebuggerDataList = v_uint64() @@ -2054,8 +2054,8 @@ def __init__(self): self.HighestPermittedHashAddress = v_ptr32() self.NumberOfImageWaiters = v_uint32() self.VadBitMapHint = v_uint32() - self.UsedPageTableEntries = v_bytes(size=1536) # FIXME Unknown Array Type - self.CommittedPageTables = v_bytes(size=96) # FIXME Unknown Array Type + self.UsedPageTableEntries = v_bytes(size=1536) # FIXME Unknown Array Type + self.CommittedPageTables = v_bytes(size=96) # FIXME Unknown Array Type class POP_THERMAL_ZONE(vstruct.VStruct): @@ -2143,7 +2143,7 @@ def __init__(self): self.Idtr = DESCRIPTOR() self.Tr = v_uint16() self.Ldtr = v_uint16() - self.Reserved = v_bytes(size=24) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=24) # FIXME Unknown Array Type class POWER_ACTION_POLICY(vstruct.VStruct): @@ -2200,7 +2200,7 @@ def __init__(self): self.ErrorSelector = v_uint32() self.DataOffset = v_uint32() self.DataSelector = v_uint32() - self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type + self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type self.Cr0NpxState = v_uint32() @@ -2260,7 +2260,7 @@ def __init__(self): self.ControlArea = v_ptr32() self.FileResource = v_ptr32() self.Mdl = MDL() - self.Page = v_bytes(size=4) # FIXME Unknown Array Type + self.Page = v_bytes(size=4) # FIXME Unknown Array Type class CACHED_CHILD_LIST(vstruct.VStruct): @@ -2282,7 +2282,7 @@ def __init__(self): self.KernelStack = v_ptr32() self.DebugActive = v_uint8() self.State = v_uint8() - self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type + self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type self.Iopl = v_uint8() self.NpxState = v_uint8() self.Saturation = v_uint8() @@ -2290,7 +2290,7 @@ def __init__(self): self.ApcState = KAPC_STATE() self.ContextSwitches = v_uint32() self.IdleSwapBlock = v_uint8() - self.Spare0 = v_bytes(size=3) # FIXME Unknown Array Type + self.Spare0 = v_bytes(size=3) # FIXME Unknown Array Type self.WaitStatus = v_uint32() self.WaitIrql = v_uint8() self.WaitMode = v_uint8() @@ -2326,7 +2326,7 @@ def __init__(self): self.CallbackStack = v_ptr32() self.Win32Thread = v_ptr32() self.TrapFrame = v_ptr32() - self.ApcStatePointer = v_bytes(size=8) # FIXME Unknown Array Type + self.ApcStatePointer = v_bytes(size=8) # FIXME Unknown Array Type self.PreviousMode = v_uint8() self.EnableStackSwap = v_uint8() self.LargeStack = v_uint8() @@ -2380,7 +2380,7 @@ def __init__(self): self.EFlags = v_uint32() self.Esp = v_uint32() self.SegSs = v_uint32() - self.ExtendedRegisters = v_bytes(size=512) # FIXME Unknown Array Type + self.ExtendedRegisters = v_bytes(size=512) # FIXME Unknown Array Type class DBGKD_GET_CONTEXT(vstruct.VStruct): @@ -2446,7 +2446,7 @@ def __init__(self): self.CriticalSection = RTL_CRITICAL_SECTION() self.RtlHandleTable = RTL_HANDLE_TABLE() self.NumberOfBuckets = v_uint32() - self.Buckets = v_bytes(size=4) # FIXME Unknown Array Type + self.Buckets = v_bytes(size=4) # FIXME Unknown Array Type class IMAGE_ROM_OPTIONAL_HEADER(vstruct.VStruct): @@ -2463,7 +2463,7 @@ def __init__(self): self.BaseOfData = v_uint32() self.BaseOfBss = v_uint32() self.GprMask = v_uint32() - self.CprMask = v_bytes(size=16) # FIXME Unknown Array Type + self.CprMask = v_bytes(size=16) # FIXME Unknown Array Type self.GpValue = v_uint32() @@ -2532,7 +2532,7 @@ def __init__(self): self.InterruptTime = v_uint64() self.FeatureFlags = v_uint32() self.HiberFlags = v_uint8() - self.spare = v_bytes(size=3) # FIXME Unknown Array Type + self.spare = v_bytes(size=3) # FIXME Unknown Array Type self.NoHiberPtes = v_uint32() self.HiberVa = v_uint32() self.HiberPte = LARGE_INTEGER() @@ -2673,8 +2673,8 @@ def __init__(self): class KiIoAccessMap(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.DirectionMap = v_bytes(size=32) # FIXME Unknown Array Type - self.IoMap = v_bytes(size=8196) # FIXME Unknown Array Type + self.DirectionMap = v_bytes(size=32) # FIXME Unknown Array Type + self.IoMap = v_bytes(size=8196) # FIXME Unknown Array Type class KAPC(vstruct.VStruct): @@ -2707,7 +2707,7 @@ def __init__(self): class SID_IDENTIFIER_AUTHORITY(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Value = v_bytes(size=6) # FIXME Unknown Array Type + self.Value = v_bytes(size=6) # FIXME Unknown Array Type class RTL_RANGE_LIST(vstruct.VStruct): @@ -2765,7 +2765,7 @@ def __init__(self): self.SectionSize = LARGE_INTEGER() self.ValidDataLength = LARGE_INTEGER() self.ValidDataGoal = LARGE_INTEGER() - self.InitialVacbs = v_bytes(size=16) # FIXME Unknown Array Type + self.InitialVacbs = v_bytes(size=16) # FIXME Unknown Array Type self.Vacbs = v_ptr32() self.FileObject = v_ptr32() self.ActiveVacb = v_ptr32() @@ -2853,7 +2853,7 @@ def __init__(self): self.ProcessLocksList = LIST_ENTRY() self.EntryCount = v_uint32() self.ContentionCount = v_uint32() - self.Spare = v_bytes(size=8) # FIXME Unknown Array Type + self.Spare = v_bytes(size=8) # FIXME Unknown Array Type class PNP_DEVICE_EVENT_ENTRY(vstruct.VStruct): @@ -2888,9 +2888,9 @@ def __init__(self): class VI_DEADLOCK_GLOBALS(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Nodes = v_bytes(size=8) # FIXME Unknown Array Type - self.Resources = v_bytes(size=8) # FIXME Unknown Array Type - self.Threads = v_bytes(size=8) # FIXME Unknown Array Type + self.Nodes = v_bytes(size=8) # FIXME Unknown Array Type + self.Resources = v_bytes(size=8) # FIXME Unknown Array Type + self.Threads = v_bytes(size=8) # FIXME Unknown Array Type self.TimeAcquire = v_uint64() self.TimeRelease = v_uint64() self.BytesAllocated = v_uint32() @@ -2915,7 +2915,7 @@ def __init__(self): self.FreeNodeCount = v_uint32() self.Instigator = v_ptr32() self.NumberOfParticipants = v_uint32() - self.Participant = v_bytes(size=128) # FIXME Unknown Array Type + self.Participant = v_bytes(size=128) # FIXME Unknown Array Type self.CacheReductionInProgress = v_uint32() @@ -3007,8 +3007,8 @@ def __init__(self): self.PackageIdleTime = v_uint32() self.DebugCount = v_uint32() self.LastSysTime = v_uint32() - self.TotalIdleStateTime = v_bytes(size=24) # FIXME Unknown Array Type - self.TotalIdleTransitions = v_bytes(size=12) # FIXME Unknown Array Type + self.TotalIdleStateTime = v_bytes(size=24) # FIXME Unknown Array Type + self.TotalIdleTransitions = v_bytes(size=12) # FIXME Unknown Array Type self._pad0090 = v_bytes(size=4) self.PreviousC3StateTime = v_uint64() self.KneeThrottleIndex = v_uint8() @@ -3112,7 +3112,7 @@ def __init__(self): self.ClusterShift = v_uint8() self.Reserved = v_uint8() self.NumberOfChunks = v_uint16() - self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type + self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type class PEB_FREE_BLOCK(vstruct.VStruct): @@ -3126,7 +3126,7 @@ class CMHIVE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.Hive = HHIVE() - self.FileHandles = v_bytes(size=12) # FIXME Unknown Array Type + self.FileHandles = v_bytes(size=12) # FIXME Unknown Array Type self.NotifyList = LIST_ENTRY() self.HiveList = LIST_ENTRY() self.HiveLock = v_ptr32() @@ -3227,7 +3227,7 @@ def __init__(self): class PCI_HEADER_TYPE_1(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.BaseAddresses = v_bytes(size=8) # FIXME Unknown Array Type + self.BaseAddresses = v_bytes(size=8) # FIXME Unknown Array Type self.PrimaryBus = v_uint8() self.SecondaryBus = v_uint8() self.SubordinateBus = v_uint8() @@ -3244,7 +3244,7 @@ def __init__(self): self.IOBaseUpper16 = v_uint16() self.IOLimitUpper16 = v_uint16() self.CapabilitiesPtr = v_uint8() - self.Reserved1 = v_bytes(size=3) # FIXME Unknown Array Type + self.Reserved1 = v_bytes(size=3) # FIXME Unknown Array Type self.ROMBaseAddress = v_uint32() self.InterruptLine = v_uint8() self.InterruptPin = v_uint8() @@ -3254,13 +3254,13 @@ def __init__(self): class PCI_HEADER_TYPE_0(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.BaseAddresses = v_bytes(size=24) # FIXME Unknown Array Type + self.BaseAddresses = v_bytes(size=24) # FIXME Unknown Array Type self.CIS = v_uint32() self.SubVendorID = v_uint16() self.SubSystemID = v_uint16() self.ROMBaseAddress = v_uint32() self.CapabilitiesPtr = v_uint8() - self.Reserved1 = v_bytes(size=3) # FIXME Unknown Array Type + self.Reserved1 = v_bytes(size=3) # FIXME Unknown Array Type self.Reserved2 = v_uint32() self.InterruptLine = v_uint8() self.InterruptPin = v_uint8() @@ -3297,7 +3297,7 @@ def __init__(self): self.ClientId = CLIENT_ID() self.Handle = v_ptr32() self.Type = v_uint32() - self.StackTrace = v_bytes(size=64) # FIXME Unknown Array Type + self.StackTrace = v_bytes(size=64) # FIXME Unknown Array Type class LPCP_NONPAGED_PORT_QUEUE(vstruct.VStruct): @@ -3311,7 +3311,7 @@ class DEVICE_RELATIONS(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.Count = v_uint32() - self.Objects = v_bytes(size=4) # FIXME Unknown Array Type + self.Objects = v_bytes(size=4) # FIXME Unknown Array Type class HEAP_TAG_ENTRY(vstruct.VStruct): @@ -3322,7 +3322,7 @@ def __init__(self): self.Size = v_uint32() self.TagIndex = v_uint16() self.CreatorBackTraceIndex = v_uint16() - self.TagName = v_bytes(size=48) # FIXME Unknown Array Type + self.TagName = v_bytes(size=48) # FIXME Unknown Array Type class MMPAGING_FILE(vstruct.VStruct): @@ -3336,7 +3336,7 @@ def __init__(self): self.PeakUsage = v_uint32() self.Hint = v_uint32() self.HighestPage = v_uint32() - self.Entry = v_bytes(size=8) # FIXME Unknown Array Type + self.Entry = v_bytes(size=8) # FIXME Unknown Array Type self.Bitmap = v_ptr32() self.File = v_ptr32() self.PageFileName = UNICODE_STRING() @@ -3366,7 +3366,7 @@ def __init__(self): self.ErrorSelector = v_uint32() self.DataOffset = v_uint32() self.DataSelector = v_uint32() - self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type + self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type class CMP_OFFSET_ARRAY(vstruct.VStruct): @@ -3387,7 +3387,7 @@ def __init__(self): self.Type = v_uint32() self.Flags = v_uint16() self.Spare = v_uint16() - self.Name = v_bytes(size=2) # FIXME Unknown Array Type + self.Name = v_bytes(size=2) # FIXME Unknown Array Type class MMVAD_FLAGS2(vstruct.VStruct): @@ -3484,7 +3484,7 @@ def __init__(self): class HMAP_DIRECTORY(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Directory = v_bytes(size=4096) # FIXME Unknown Array Type + self.Directory = v_bytes(size=4096) # FIXME Unknown Array Type class DBGKD_LOAD_SYMBOLS64(vstruct.VStruct): @@ -3535,7 +3535,7 @@ def __init__(self): self.Priority = v_uint32() self.Flags = v_uint32() self.Descriptor = v_ptr32() - self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type class EX_FAST_REF(vstruct.VStruct): @@ -3606,7 +3606,7 @@ def __init__(self): class EX_PUSH_LOCK_CACHE_AWARE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Locks = v_bytes(size=4) # FIXME Unknown Array Type + self.Locks = v_bytes(size=4) # FIXME Unknown Array Type class THERMAL_INFORMATION(vstruct.VStruct): @@ -3622,7 +3622,7 @@ def __init__(self): self.CriticalTripPoint = v_uint32() self.ActiveTripPointCount = v_uint8() self._pad0024 = v_bytes(size=3) - self.ActiveTripPoint = v_bytes(size=40) # FIXME Unknown Array Type + self.ActiveTripPoint = v_bytes(size=40) # FIXME Unknown Array Type class CLIENT_ID(vstruct.VStruct): @@ -3769,7 +3769,7 @@ def __init__(self): self.ImageList = LIST_ENTRY() self.GlobalPteEntry = v_ptr32() self.CopyOnWriteCount = v_uint32() - self.SessionPoolAllocationFailures = v_bytes(size=16) # FIXME Unknown Array Type + self.SessionPoolAllocationFailures = v_bytes(size=16) # FIXME Unknown Array Type self.AttachCount = v_uint32() self.AttachEvent = KEVENT() self.LastProcess = v_ptr32() @@ -3856,7 +3856,7 @@ def __init__(self): self.HeaderType = v_uint8() self.BIST = v_uint8() self.u = unnamed() - self.DeviceSpecific = v_bytes(size=192) # FIXME Unknown Array Type + self.DeviceSpecific = v_bytes(size=192) # FIXME Unknown Array Type class IO_SECURITY_CONTEXT(vstruct.VStruct): @@ -3888,7 +3888,7 @@ def __init__(self): self.IdleTimeout = v_uint32() self.IdleSensitivity = v_uint8() self.DynamicThrottle = v_uint8() - self.Spare2 = v_bytes(size=2) # FIXME Unknown Array Type + self.Spare2 = v_bytes(size=2) # FIXME Unknown Array Type self.MinSleep = v_uint32() self.MaxSleep = v_uint32() self.ReducedLatencySleep = v_uint32() @@ -3900,7 +3900,7 @@ def __init__(self): self.VideoTimeout = v_uint32() self.VideoDimDisplay = v_uint8() self._pad00c8 = v_bytes(size=3) - self.VideoReserved = v_bytes(size=12) # FIXME Unknown Array Type + self.VideoReserved = v_bytes(size=12) # FIXME Unknown Array Type self.SpindownTimeout = v_uint32() self.OptimizeForPower = v_uint8() self.FanThrottleTolerance = v_uint8() @@ -3992,7 +3992,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.StartTime = v_uint64() self.EndTime = v_uint64() - self.IdleHandlerReserved = v_bytes(size=16) # FIXME Unknown Array Type + self.IdleHandlerReserved = v_bytes(size=16) # FIXME Unknown Array Type class KWAIT_BLOCK(vstruct.VStruct): @@ -4066,7 +4066,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.MaximumNumberOfHandles = v_uint32() self.SizeOfHandleTableEntry = v_uint32() - self.Reserved = v_bytes(size=8) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=8) # FIXME Unknown Array Type self.FreeHandles = v_ptr32() self.CommittedHandles = v_ptr32() self.UnCommittedHandles = v_ptr32() @@ -4174,7 +4174,7 @@ def __init__(self): self.ListEntry = LIST_ENTRY() self.LastTotalAllocates = v_uint32() self.LastAllocateMisses = v_uint32() - self.Future = v_bytes(size=8) # FIXME Unknown Array Type + self.Future = v_bytes(size=8) # FIXME Unknown Array Type class ARBITER_ORDERING_LIST(vstruct.VStruct): @@ -4205,10 +4205,10 @@ def __init__(self): self.DataSelector = v_uint32() self.MXCsr = v_uint32() self.MXCsrMask = v_uint32() - self.RegisterArea = v_bytes(size=128) # FIXME Unknown Array Type - self.Reserved3 = v_bytes(size=128) # FIXME Unknown Array Type - self.Reserved4 = v_bytes(size=224) # FIXME Unknown Array Type - self.Align16Byte = v_bytes(size=8) # FIXME Unknown Array Type + self.RegisterArea = v_bytes(size=128) # FIXME Unknown Array Type + self.Reserved3 = v_bytes(size=128) # FIXME Unknown Array Type + self.Reserved4 = v_bytes(size=224) # FIXME Unknown Array Type + self.Align16Byte = v_bytes(size=8) # FIXME Unknown Array Type class ARBITER_LIST_ENTRY(vstruct.VStruct): @@ -4337,7 +4337,7 @@ def __init__(self): self.BusData = v_ptr32() self.DeviceControlExtensionSize = v_uint32() self.BusAddresses = v_ptr32() - self.Reserved = v_bytes(size=16) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=16) # FIXME Unknown Array Type self.GetBusData = v_ptr32() self.SetBusData = v_ptr32() self.AdjustResourceList = v_ptr32() @@ -4380,12 +4380,12 @@ def __init__(self): self.FastPebUnlockRoutine = v_ptr32() self.EnvironmentUpdateCount = v_uint32() self.KernelCallbackTable = v_ptr32() - self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type + self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type self.AtlThunkSListPtr32 = v_uint32() self.FreeList = v_ptr32() self.TlsExpansionCounter = v_uint32() self.TlsBitmap = v_ptr32() - self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type + self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type self.ReadOnlySharedMemoryBase = v_ptr32() self.ReadOnlySharedMemoryHeap = v_ptr32() self.ReadOnlyStaticServerData = v_ptr32() @@ -4416,10 +4416,10 @@ def __init__(self): self.ImageSubsystemMajorVersion = v_uint32() self.ImageSubsystemMinorVersion = v_uint32() self.ImageProcessAffinityMask = v_uint32() - self.GdiHandleBuffer = v_bytes(size=136) # FIXME Unknown Array Type + self.GdiHandleBuffer = v_bytes(size=136) # FIXME Unknown Array Type self.PostProcessInitRoutine = v_ptr32() self.TlsExpansionBitmap = v_ptr32() - self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type + self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type self.SessionId = v_uint32() self.AppCompatFlags = ULARGE_INTEGER() self.AppCompatFlagsUser = ULARGE_INTEGER() @@ -4472,10 +4472,10 @@ def __init__(self): self.RootCell = v_uint32() self.Length = v_uint32() self.Cluster = v_uint32() - self.FileName = v_bytes(size=64) # FIXME Unknown Array Type - self.Reserved1 = v_bytes(size=396) # FIXME Unknown Array Type + self.FileName = v_bytes(size=64) # FIXME Unknown Array Type + self.Reserved1 = v_bytes(size=396) # FIXME Unknown Array Type self.CheckSum = v_uint32() - self.Reserved2 = v_bytes(size=3576) # FIXME Unknown Array Type + self.Reserved2 = v_bytes(size=3576) # FIXME Unknown Array Type self.BootType = v_uint32() self.BootRecover = v_uint32() @@ -4530,7 +4530,7 @@ def __init__(self): self.Header = PCI_SECONDARY_EXTENSION() self.Interface = v_ptr32() self.BusFdoExtension = v_ptr32() - self.InstanceName = v_bytes(size=48) # FIXME Unknown Array Type + self.InstanceName = v_bytes(size=48) # FIXME Unknown Array Type self.CommonInstance = ARBITER_INSTANCE() @@ -4584,7 +4584,7 @@ class POOL_HACKER(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.Header = POOL_HEADER() - self.Contents = v_bytes(size=32) # FIXME Unknown Array Type + self.Contents = v_bytes(size=32) # FIXME Unknown Array Type class HANDLE_TABLE(vstruct.VStruct): @@ -4707,7 +4707,7 @@ def __init__(self): self.PromotePercent = v_uint8() self.DemotePercent = v_uint8() self.State = v_uint8() - self.Spare = v_bytes(size=3) # FIXME Unknown Array Type + self.Spare = v_bytes(size=3) # FIXME Unknown Array Type self.IdleFunction = v_ptr32() @@ -4785,7 +4785,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.Type = v_uint32() self.Flags = v_uint8() - self.Spare = v_bytes(size=3) # FIXME Unknown Array Type + self.Spare = v_bytes(size=3) # FIXME Unknown Array Type self.Battery = unnamed() @@ -4803,7 +4803,7 @@ def __init__(self): self.GlobalDosDevicesDirectory = v_ptr32() self.ReferenceCount = v_uint32() self.DriveMap = v_uint32() - self.DriveType = v_bytes(size=32) # FIXME Unknown Array Type + self.DriveType = v_bytes(size=32) # FIXME Unknown Array Type class CONTROL_AREA(vstruct.VStruct): @@ -4830,13 +4830,13 @@ def __init__(self): self.Data1 = v_uint32() self.Data2 = v_uint16() self.Data3 = v_uint16() - self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type + self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type class KAPC_STATE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.ApcListHead = v_bytes(size=8) # FIXME Unknown Array Type + self.ApcListHead = v_bytes(size=8) # FIXME Unknown Array Type self.Process = v_ptr32() self.KernelApcInProgress = v_uint8() self.KernelApcPending = v_uint8() @@ -4954,7 +4954,7 @@ def __init__(self): self.DriverInit = v_ptr32() self.DriverStartIo = v_ptr32() self.DriverUnload = v_ptr32() - self.MajorFunction = v_bytes(size=112) # FIXME Unknown Array Type + self.MajorFunction = v_bytes(size=112) # FIXME Unknown Array Type class SECURITY_DESCRIPTOR_RELATIVE(vstruct.VStruct): @@ -4975,9 +4975,9 @@ def __init__(self): self.Length = v_uint32() self.Reserved = v_uint32() self.MemoryBlock = v_ptr32() - self.CommonBuffer = v_bytes(size=8) # FIXME Unknown Array Type + self.CommonBuffer = v_bytes(size=8) # FIXME Unknown Array Type self._pad0018 = v_bytes(size=4) - self.PhysicalAddress = v_bytes(size=8) # FIXME Unknown Array Type + self.PhysicalAddress = v_bytes(size=8) # FIXME Unknown Array Type self.StallRoutine = v_ptr32() self.OpenRoutine = v_ptr32() self.WriteRoutine = v_ptr32() @@ -5024,7 +5024,7 @@ def __init__(self): class TOKEN_SOURCE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.SourceName = v_bytes(size=8) # FIXME Unknown Array Type + self.SourceName = v_bytes(size=8) # FIXME Unknown Array Type self.SourceIdentifier = LUID() @@ -5075,11 +5075,11 @@ def __init__(self): self.CpuID = v_uint8() self.CpuStep = v_uint16() self.ProcessorState = KPROCESSOR_STATE() - self.KernelReserved = v_bytes(size=64) # FIXME Unknown Array Type - self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type - self.PrcbPad0 = v_bytes(size=92) # FIXME Unknown Array Type - self.LockQueue = v_bytes(size=92) # FIXME Unknown Array Type - self.PrcbPad1 = v_bytes(size=8) # FIXME Unknown Array Type + self.KernelReserved = v_bytes(size=64) # FIXME Unknown Array Type + self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type + self.PrcbPad0 = v_bytes(size=92) # FIXME Unknown Array Type + self.LockQueue = v_bytes(size=92) # FIXME Unknown Array Type + self.PrcbPad1 = v_bytes(size=8) # FIXME Unknown Array Type self.NpxThread = v_ptr32() self.InterruptCount = v_uint32() self.KernelTime = v_uint32() @@ -5091,11 +5091,11 @@ def __init__(self): self.PageColor = v_uint32() self.SkipTick = v_uint32() self.MultiThreadSetBusy = v_uint8() - self.Spare2 = v_bytes(size=3) # FIXME Unknown Array Type + self.Spare2 = v_bytes(size=3) # FIXME Unknown Array Type self.ParentNode = v_ptr32() self.MultiThreadProcessorSet = v_uint32() self.MultiThreadSetMaster = v_ptr32() - self.ThreadStartCount = v_bytes(size=8) # FIXME Unknown Array Type + self.ThreadStartCount = v_bytes(size=8) # FIXME Unknown Array Type self.CcFastReadNoWait = v_uint32() self.CcFastReadWait = v_uint32() self.CcFastReadNotPossible = v_uint32() @@ -5111,22 +5111,22 @@ def __init__(self): self.KeIcacheFlushCount = v_uint32() self.KeSecondLevelTbFills = v_uint32() self.KeSystemCalls = v_uint32() - self.SpareCounter0 = v_bytes(size=4) # FIXME Unknown Array Type - self.PPLookasideList = v_bytes(size=4) # FIXME Unknown Array Type - self.PPNPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type - self.PPPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type + self.SpareCounter0 = v_bytes(size=4) # FIXME Unknown Array Type + self.PPLookasideList = v_bytes(size=4) # FIXME Unknown Array Type + self.PPNPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type + self.PPPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type self.PacketBarrier = v_uint32() self.ReverseStall = v_uint32() self.IpiFrame = v_ptr32() - self.PrcbPad2 = v_bytes(size=52) # FIXME Unknown Array Type - self.CurrentPacket = v_bytes(size=12) # FIXME Unknown Array Type + self.PrcbPad2 = v_bytes(size=52) # FIXME Unknown Array Type + self.CurrentPacket = v_bytes(size=12) # FIXME Unknown Array Type self.TargetSet = v_uint32() self.WorkerRoutine = v_ptr32() self.IpiFrozen = v_uint32() - self.PrcbPad3 = v_bytes(size=40) # FIXME Unknown Array Type + self.PrcbPad3 = v_bytes(size=40) # FIXME Unknown Array Type self.RequestSummary = v_uint32() self.SignalDone = v_ptr32() - self.PrcbPad4 = v_bytes(size=56) # FIXME Unknown Array Type + self.PrcbPad4 = v_bytes(size=56) # FIXME Unknown Array Type self.DpcListHead = LIST_ENTRY() self.DpcStack = v_ptr32() self.DpcCount = v_uint32() @@ -5138,14 +5138,14 @@ def __init__(self): self.MaximumDpcQueueDepth = v_uint32() self.MinimumDpcRate = v_uint32() self.QuantumEnd = v_uint32() - self.PrcbPad5 = v_bytes(size=16) # FIXME Unknown Array Type + self.PrcbPad5 = v_bytes(size=16) # FIXME Unknown Array Type self.DpcLock = v_uint32() - self.PrcbPad6 = v_bytes(size=28) # FIXME Unknown Array Type + self.PrcbPad6 = v_bytes(size=28) # FIXME Unknown Array Type self.CallDpc = KDPC() self.ChainedInterruptList = v_ptr32() self.LookasideIrpFloat = v_uint32() - self.SpareFields0 = v_bytes(size=24) # FIXME Unknown Array Type - self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type + self.SpareFields0 = v_bytes(size=24) # FIXME Unknown Array Type + self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type self.InitialApicId = v_uint8() self.LogicalProcessorsPerPhysicalProcessor = v_uint8() self._pad0910 = v_bytes(size=1) @@ -5201,7 +5201,7 @@ def __init__(self): self.ExceptionRecord = v_ptr32() self.ExceptionAddress = v_ptr32() self.NumberParameters = v_uint32() - self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type + self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type class MMPTE(vstruct.VStruct): @@ -5220,8 +5220,8 @@ def __init__(self): self.Root = v_ptr32() self.ThreadEntry = v_ptr32() self.Active = v_uint32() - self.StackTrace = v_bytes(size=32) # FIXME Unknown Array Type - self.ParentStackTrace = v_bytes(size=32) # FIXME Unknown Array Type + self.StackTrace = v_bytes(size=32) # FIXME Unknown Array Type + self.ParentStackTrace = v_bytes(size=32) # FIXME Unknown Array Type class KPCR(vstruct.VStruct): @@ -5248,13 +5248,13 @@ def __init__(self): self.Spare0 = v_uint8() self.SecondLevelCacheAssociativity = v_uint8() self.VdmAlert = v_uint32() - self.KernelReserved = v_bytes(size=56) # FIXME Unknown Array Type + self.KernelReserved = v_bytes(size=56) # FIXME Unknown Array Type self.SecondLevelCacheSize = v_uint32() - self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type + self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type self.InterruptMode = v_uint32() self.Spare1 = v_uint8() self._pad00dc = v_bytes(size=3) - self.KernelReserved2 = v_bytes(size=68) # FIXME Unknown Array Type + self.KernelReserved2 = v_bytes(size=68) # FIXME Unknown Array Type self.PrcbData = KPRCB() @@ -5275,7 +5275,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.Signature = v_uint16() self.Count = v_uint16() - self.List = v_bytes(size=4) # FIXME Unknown Array Type + self.List = v_bytes(size=4) # FIXME Unknown Array Type class IMAGE_DEBUG_DIRECTORY(vstruct.VStruct): @@ -5405,7 +5405,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.Offset = v_uint32() self.HDC = v_uint32() - self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type + self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type class WMI_CLIENT_CONTEXT(vstruct.VStruct): @@ -5442,7 +5442,7 @@ def __init__(self): class OBJECT_DIRECTORY(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.HashBuckets = v_bytes(size=148) # FIXME Unknown Array Type + self.HashBuckets = v_bytes(size=148) # FIXME Unknown Array Type self.Lock = EX_PUSH_LOCK() self.DeviceMap = v_ptr32() self.SessionId = v_uint32() @@ -5594,7 +5594,7 @@ def __init__(self): self.Spare1 = v_uint8() self.LoaderFlags = v_uint32() self.ImageFileSize = v_uint32() - self.Reserved = v_bytes(size=4) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=4) # FIXME Unknown Array Type class HEAP_SUBSEGMENT(vstruct.VStruct): @@ -5653,7 +5653,7 @@ def __init__(self): self.ReferenceCount = v_uint16() self.Flags = v_uint8() self.NameLength = v_uint8() - self.Name = v_bytes(size=2) # FIXME Unknown Array Type + self.Name = v_bytes(size=2) # FIXME Unknown Array Type class CHILD_LIST(vstruct.VStruct): @@ -5749,7 +5749,7 @@ def __init__(self): self.FileOffset2 = LARGE_INTEGER() self.BeyondLastByte2 = LARGE_INTEGER() self.ReadAheadOffset = LARGE_INTEGER() - self.ReadAheadLength = v_bytes(size=8) # FIXME Unknown Array Type + self.ReadAheadLength = v_bytes(size=8) # FIXME Unknown Array Type self.ReadAheadSpinLock = v_uint32() self.PrivateLinks = LIST_ENTRY() @@ -5764,7 +5764,7 @@ def __init__(self): class IMAGE_SECTION_HEADER(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Name = v_bytes(size=8) # FIXME Unknown Array Type + self.Name = v_bytes(size=8) # FIXME Unknown Array Type self.Misc = unnamed() self.VirtualAddress = v_uint32() self.SizeOfRawData = v_uint32() @@ -5828,8 +5828,8 @@ def __init__(self): self.LastWriteTime = LARGE_INTEGER() self.Spare = v_uint32() self.Parent = v_uint32() - self.SubKeyCounts = v_bytes(size=8) # FIXME Unknown Array Type - self.SubKeyLists = v_bytes(size=8) # FIXME Unknown Array Type + self.SubKeyCounts = v_bytes(size=8) # FIXME Unknown Array Type + self.SubKeyLists = v_bytes(size=8) # FIXME Unknown Array Type self.ValueList = CHILD_LIST() self.Security = v_uint32() self.Class = v_uint32() @@ -5840,7 +5840,7 @@ def __init__(self): self.WorkVar = v_uint32() self.NameLength = v_uint16() self.ClassLength = v_uint16() - self.Name = v_bytes(size=2) # FIXME Unknown Array Type + self.Name = v_bytes(size=2) # FIXME Unknown Array Type class SE_AUDIT_PROCESS_CREATION_INFO(vstruct.VStruct): @@ -5890,24 +5890,24 @@ def __init__(self): self.CountOfOwnedCriticalSections = v_uint32() self.CsrClientThread = v_ptr32() self.Win32ThreadInfo = v_ptr32() - self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type - self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type + self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type + self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type self.WOW32Reserved = v_ptr32() self.CurrentLocale = v_uint32() self.FpSoftwareStatusRegister = v_uint32() - self.SystemReserved1 = v_bytes(size=216) # FIXME Unknown Array Type + self.SystemReserved1 = v_bytes(size=216) # FIXME Unknown Array Type self.ExceptionCode = v_uint32() self.ActivationContextStack = ACTIVATION_CONTEXT_STACK() - self.SpareBytes1 = v_bytes(size=24) # FIXME Unknown Array Type + self.SpareBytes1 = v_bytes(size=24) # FIXME Unknown Array Type self.GdiTebBatch = GDI_TEB_BATCH() self.RealClientId = CLIENT_ID() self.GdiCachedProcessHandle = v_ptr32() self.GdiClientPID = v_uint32() self.GdiClientTID = v_uint32() self.GdiThreadLocalInfo = v_ptr32() - self.Win32ClientInfo = v_bytes(size=248) # FIXME Unknown Array Type - self.glDispatchTable = v_bytes(size=932) # FIXME Unknown Array Type - self.glReserved1 = v_bytes(size=116) # FIXME Unknown Array Type + self.Win32ClientInfo = v_bytes(size=248) # FIXME Unknown Array Type + self.glDispatchTable = v_bytes(size=932) # FIXME Unknown Array Type + self.glReserved1 = v_bytes(size=116) # FIXME Unknown Array Type self.glReserved2 = v_ptr32() self.glSectionInfo = v_ptr32() self.glSection = v_ptr32() @@ -5919,13 +5919,13 @@ def __init__(self): self.StaticUnicodeBuffer = v_bytes(size=522) # FIXME Unknown Array Type self._pad0e0c = v_bytes(size=2) self.DeallocationStack = v_ptr32() - self.TlsSlots = v_bytes(size=256) # FIXME Unknown Array Type + self.TlsSlots = v_bytes(size=256) # FIXME Unknown Array Type self.TlsLinks = LIST_ENTRY() self.Vdm = v_ptr32() self.ReservedForNtRpc = v_ptr32() - self.DbgSsReserved = v_bytes(size=8) # FIXME Unknown Array Type + self.DbgSsReserved = v_bytes(size=8) # FIXME Unknown Array Type self.HardErrorsAreDisabled = v_uint32() - self.Instrumentation = v_bytes(size=64) # FIXME Unknown Array Type + self.Instrumentation = v_bytes(size=64) # FIXME Unknown Array Type self.WinSockData = v_ptr32() self.GdiBatchCount = v_uint32() self.InDbgPrint = v_uint8() @@ -5946,7 +5946,7 @@ def __init__(self): self.CurrentTransactionHandle = v_ptr32() self.ActiveFrame = v_ptr32() self.SafeThunkCall = v_uint8() - self.BooleanSpare = v_bytes(size=3) # FIXME Unknown Array Type + self.BooleanSpare = v_bytes(size=3) # FIXME Unknown Array Type class EX_RUNDOWN_REF(vstruct.VStruct): @@ -6003,10 +6003,10 @@ def __init__(self): self.e_cs = v_uint16() self.e_lfarlc = v_uint16() self.e_ovno = v_uint16() - self.e_res = v_bytes(size=8) # FIXME Unknown Array Type + self.e_res = v_bytes(size=8) # FIXME Unknown Array Type self.e_oemid = v_uint16() self.e_oeminfo = v_uint16() - self.e_res2 = v_bytes(size=20) # FIXME Unknown Array Type + self.e_res2 = v_bytes(size=20) # FIXME Unknown Array Type self.e_lfanew = v_uint32() @@ -6048,7 +6048,7 @@ def __init__(self): self.ExceptionRecord = v_uint32() self.ExceptionAddress = v_uint32() self.NumberParameters = v_uint32() - self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type + self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type class DBGKD_READ_MEMORY32(vstruct.VStruct): @@ -6172,7 +6172,7 @@ def __init__(self): self.ConvKey = v_uint32() self.NextHash = v_ptr32() self.NameLength = v_uint16() - self.Name = v_bytes(size=2) # FIXME Unknown Array Type + self.Name = v_bytes(size=2) # FIXME Unknown Array Type class EX_PUSH_LOCK_WAIT_BLOCK(vstruct.VStruct): @@ -6353,7 +6353,7 @@ def __init__(self): self.ProcessorMask = v_uint32() self.Color = v_uint32() self.MmShiftedColor = v_uint32() - self.FreeCount = v_bytes(size=8) # FIXME Unknown Array Type + self.FreeCount = v_bytes(size=8) # FIXME Unknown Array Type self._pad0018 = v_bytes(size=4) self.DeadStackList = SLIST_HEADER() self.PfnDereferenceSListHead = SLIST_HEADER() @@ -6382,9 +6382,9 @@ def __init__(self): self.ProcessorThrottle = v_uint8() self.ProcessorMinThrottle = v_uint8() self.ProcessorMaxThrottle = v_uint8() - self.spare2 = v_bytes(size=4) # FIXME Unknown Array Type + self.spare2 = v_bytes(size=4) # FIXME Unknown Array Type self.DiskSpinDown = v_uint8() - self.spare3 = v_bytes(size=8) # FIXME Unknown Array Type + self.spare3 = v_bytes(size=8) # FIXME Unknown Array Type self.SystemBatteriesPresent = v_uint8() self.BatteriesAreShortTerm = v_uint8() self.BatteryScale = v_uint8() @@ -6454,7 +6454,7 @@ def __init__(self): self.InterfaceType = v_uint32() self.BusNumber = v_uint32() self.SlotNumber = v_uint32() - self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type self.AlternativeLists = v_uint32() self.List = v_uint32() diff --git a/vstruct/defs/windows/win_5_1_i386/win32k.py b/vstruct/defs/windows/win_5_1_i386/win32k.py index ced38bc..30213dc 100644 --- a/vstruct/defs/windows/win_5_1_i386/win32k.py +++ b/vstruct/defs/windows/win_5_1_i386/win32k.py @@ -355,7 +355,8 @@ def __init__(self): self.ReleaseForCcFlush = v_ptr32() -class ACCESS_STATE::__unnamed(vstruct.VStruct): +class ACCESS_STATE::__unnamed(vstruct.VStruct): # FIXME and others? Type annotation syntax may be wrong? + # FIXME see https://dev.to/dstarner/using-pythons-type-annotations-4cfe def __init__(self): vstruct.VStruct.__init__(self) self.InitialPrivilegeSet = INITIAL_PRIVILEGE_SET() diff --git a/vstruct/defs/windows/win_6_1_amd64/ntdll.py b/vstruct/defs/windows/win_6_1_amd64/ntdll.py index a352a81..57945ef 100644 --- a/vstruct/defs/windows/win_6_1_amd64/ntdll.py +++ b/vstruct/defs/windows/win_6_1_amd64/ntdll.py @@ -646,7 +646,7 @@ def __init__(self): self.Revision = v_uint8() self.SubAuthorityCount = v_uint8() self.IdentifierAuthority = SID_IDENTIFIER_AUTHORITY() - self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type + self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type class WHEA_ERROR_PACKET_V2(vstruct.VStruct): @@ -675,7 +675,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.Mask = v_uint64() self.Group = v_uint16() - self.Reserved = v_bytes(size=6) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=6) # FIXME Unknown Array Type class UMS_CONTROL_BLOCK(vstruct.VStruct): @@ -699,14 +699,14 @@ def __init__(self): class KREQUEST_PACKET(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.CurrentPacket = v_bytes(size=24) # FIXME Unknown Array Type + self.CurrentPacket = v_bytes(size=24) # FIXME Unknown Array Type self.WorkerRoutine = v_ptr64() class PERFINFO_GROUPMASK(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Masks = v_bytes(size=32) # FIXME Unknown Array Type + self.Masks = v_bytes(size=32) # FIXME Unknown Array Type class HARDWARE_PTE(vstruct.VStruct): @@ -827,7 +827,7 @@ def __init__(self): self.NextBlock = v_ptr64() self.ExpectedEncodedEntry = HEAP_ENTRY() self.ExpectedDecodedEntry = HEAP_ENTRY() - self.StackTrace = v_bytes(size=256) # FIXME Unknown Array Type + self.StackTrace = v_bytes(size=256) # FIXME Unknown Array Type class RTL_BALANCED_LINKS(vstruct.VStruct): @@ -837,7 +837,7 @@ def __init__(self): self.LeftChild = v_ptr64() self.RightChild = v_ptr64() self.Balance = v_uint8() - self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type class _unnamed_9396(vstruct.VStruct): @@ -863,8 +863,8 @@ def __init__(self): self.QuantumReset = v_uint8() self.Visited = v_uint8() self.Unused3 = v_uint8() - self.ThreadSeed = v_bytes(size=16) # FIXME Unknown Array Type - self.IdealNode = v_bytes(size=8) # FIXME Unknown Array Type + self.ThreadSeed = v_bytes(size=16) # FIXME Unknown Array Type + self.IdealNode = v_bytes(size=8) # FIXME Unknown Array Type self.IdealGlobalNode = v_uint16() self.Flags = KEXECUTE_OPTIONS() self.Unused1 = v_uint8() @@ -896,7 +896,7 @@ def __init__(self): self.Size = v_uint64() self.TagIndex = v_uint16() self.CreatorBackTraceIndex = v_uint16() - self.TagName = v_bytes(size=48) # FIXME Unknown Array Type + self.TagName = v_bytes(size=48) # FIXME Unknown Array Type class WHEA_ERROR_RECORD_SECTION_DESCRIPTOR_FLAGS(vstruct.VStruct): @@ -1047,7 +1047,7 @@ def __init__(self): self.HashFunction = v_ptr64() self.NoOfTraces = v_uint64() self.NoOfHits = v_uint64() - self.HashCounter = v_bytes(size=64) # FIXME Unknown Array Type + self.HashCounter = v_bytes(size=64) # FIXME Unknown Array Type class OWNER_ENTRY(vstruct.VStruct): @@ -1085,7 +1085,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.Hint = v_ptr64() self.ActiveSubsegment = v_ptr64() - self.CachedItems = v_bytes(size=128) # FIXME Unknown Array Type + self.CachedItems = v_bytes(size=128) # FIXME Unknown Array Type self.SListHeader = SLIST_HEADER() self.Counters = HEAP_BUCKET_COUNTERS() self.LocalData = v_ptr64() @@ -1223,8 +1223,8 @@ def __init__(self): self.ResetCount = v_uint32() self._pad0010 = v_bytes(size=4) self.StartTime = v_uint64() - self.BucketLimits = v_bytes(size=128) # FIXME Unknown Array Type - self.State = v_bytes(size=128) # FIXME Unknown Array Type + self.BucketLimits = v_bytes(size=128) # FIXME Unknown Array Type + self.State = v_bytes(size=128) # FIXME Unknown Array Type class _unnamed_9636(vstruct.VStruct): @@ -1242,7 +1242,7 @@ def __init__(self): self.Offset = v_uint32() self._pad0008 = v_bytes(size=4) self.HDC = v_uint64() - self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type + self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type class THREAD_PERFORMANCE_DATA(vstruct.VStruct): @@ -1345,7 +1345,7 @@ def __init__(self): self.SegCs = v_uint16() self.Fill0 = v_uint8() self.Logging = v_uint8() - self.Fill1 = v_bytes(size=4) # FIXME Unknown Array Type + self.Fill1 = v_bytes(size=4) # FIXME Unknown Array Type self.EFlags = v_uint32() self.Fill2 = v_uint32() self.Rsp = v_uint64() @@ -1429,7 +1429,7 @@ def __init__(self): self.SectionType = GUID() self.FRUId = GUID() self.SectionSeverity = v_uint32() - self.FRUText = v_bytes(size=20) # FIXME Unknown Array Type + self.FRUText = v_bytes(size=20) # FIXME Unknown Array Type class OBJECT_TYPE_INITIALIZER(vstruct.VStruct): @@ -1558,7 +1558,7 @@ def __init__(self): self.RealDevice = v_ptr64() self.SerialNumber = v_uint32() self.ReferenceCount = v_uint32() - self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type + self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type class PP_LOOKASIDE_LIST(vstruct.VStruct): @@ -1593,23 +1593,23 @@ def __init__(self): self.TimeZoneBias = KSYSTEM_TIME() self.ImageNumberLow = v_uint16() self.ImageNumberHigh = v_uint16() - self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type + self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type self.MaxStackTraceDepth = v_uint32() self.CryptoExponent = v_uint32() self.TimeZoneId = v_uint32() self.LargePageMinimum = v_uint32() - self.Reserved2 = v_bytes(size=28) # FIXME Unknown Array Type + self.Reserved2 = v_bytes(size=28) # FIXME Unknown Array Type self.NtProductType = v_uint32() self.ProductTypeIsValid = v_uint8() self._pad026c = v_bytes(size=3) self.NtMajorVersion = v_uint32() self.NtMinorVersion = v_uint32() - self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type + self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type self.Reserved1 = v_uint32() self.Reserved3 = v_uint32() self.TimeSlip = v_uint32() self.AlternativeArchitecture = v_uint32() - self.AltArchitecturePad = v_bytes(size=4) # FIXME Unknown Array Type + self.AltArchitecturePad = v_bytes(size=4) # FIXME Unknown Array Type self.SystemExpirationDate = LARGE_INTEGER() self.SuiteMask = v_uint32() self.KdDebuggerEnabled = v_uint8() @@ -1622,20 +1622,20 @@ def __init__(self): self.NumberOfPhysicalPages = v_uint32() self.SafeBootMode = v_uint8() self.TscQpcData = v_uint8() - self.TscQpcPad = v_bytes(size=2) # FIXME Unknown Array Type + self.TscQpcPad = v_bytes(size=2) # FIXME Unknown Array Type self.SharedDataFlags = v_uint32() - self.DataFlagsPad = v_bytes(size=4) # FIXME Unknown Array Type + self.DataFlagsPad = v_bytes(size=4) # FIXME Unknown Array Type self.TestRetInstruction = v_uint64() self.SystemCall = v_uint32() self.SystemCallReturn = v_uint32() - self.SystemCallPad = v_bytes(size=24) # FIXME Unknown Array Type + self.SystemCallPad = v_bytes(size=24) # FIXME Unknown Array Type self.TickCount = KSYSTEM_TIME() - self.TickCountPad = v_bytes(size=4) # FIXME Unknown Array Type + self.TickCountPad = v_bytes(size=4) # FIXME Unknown Array Type self.Cookie = v_uint32() - self.CookiePad = v_bytes(size=4) # FIXME Unknown Array Type + self.CookiePad = v_bytes(size=4) # FIXME Unknown Array Type self.ConsoleSessionForegroundProcessId = v_uint64() - self.Wow64SharedInformation = v_bytes(size=64) # FIXME Unknown Array Type - self.UserModeGlobalLogger = v_bytes(size=32) # FIXME Unknown Array Type + self.Wow64SharedInformation = v_bytes(size=64) # FIXME Unknown Array Type + self.UserModeGlobalLogger = v_bytes(size=32) # FIXME Unknown Array Type self.ImageFileExecutionOptions = v_uint32() self.LangGenerationCount = v_uint32() self.Reserved5 = v_uint64() @@ -1648,7 +1648,7 @@ def __init__(self): self.AppCompatFlag = v_uint32() self.SystemDllNativeRelocation = v_uint64() self.SystemDllWowRelocation = v_uint32() - self.XStatePad = v_bytes(size=4) # FIXME Unknown Array Type + self.XStatePad = v_bytes(size=4) # FIXME Unknown Array Type self.XState = XSTATE_CONFIGURATION() @@ -1773,8 +1773,8 @@ def __init__(self): self.RundownProtect = EX_RUNDOWN_REF() self.UniqueProcessId = v_ptr64() self.ActiveProcessLinks = LIST_ENTRY() - self.ProcessQuotaUsage = v_bytes(size=16) # FIXME Unknown Array Type - self.ProcessQuotaPeak = v_bytes(size=16) # FIXME Unknown Array Type + self.ProcessQuotaUsage = v_bytes(size=16) # FIXME Unknown Array Type + self.ProcessQuotaPeak = v_bytes(size=16) # FIXME Unknown Array Type self.CommitCharge = v_uint64() self.QuotaBlock = v_ptr64() self.CpuQuotaBlock = v_ptr64() @@ -1811,7 +1811,7 @@ def __init__(self): self.FreeTebHint = v_ptr64() self.PageDirectoryPte = HARDWARE_PTE() self.Session = v_ptr64() - self.ImageFileName = v_bytes(size=15) # FIXME Unknown Array Type + self.ImageFileName = v_bytes(size=15) # FIXME Unknown Array Type self.PriorityClass = v_uint8() self.JobLinks = LIST_ENTRY() self.LockedPagesList = v_ptr64() @@ -1920,8 +1920,8 @@ def __init__(self): class KTIMER_TABLE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.TimerExpiry = v_bytes(size=512) # FIXME Unknown Array Type - self.TimerEntries = v_bytes(size=512) # FIXME Unknown Array Type + self.TimerExpiry = v_bytes(size=512) # FIXME Unknown Array Type + self.TimerEntries = v_bytes(size=512) # FIXME Unknown Array Type class FAST_IO_DISPATCH(vstruct.VStruct): @@ -2119,7 +2119,7 @@ class _unnamed_8013(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.InPath = v_uint8() - self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type self._pad0008 = v_bytes(size=4) self.Type = v_uint32() @@ -2152,7 +2152,7 @@ def __init__(self): self.ThreadLock = v_uint64() self.WaitRegister = KWAIT_STATUS_REGISTER() self.Running = v_uint8() - self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type + self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type self.KernelStackResident = v_uint32() self.ApcState = KAPC_STATE() self.DeferredProcessor = v_uint32() @@ -2186,7 +2186,7 @@ def __init__(self): self.Affinity = GROUP_AFFINITY() self.IdealProcessor = v_uint32() self.UserIdealProcessor = v_uint32() - self.ApcStatePointer = v_bytes(size=16) # FIXME Unknown Array Type + self.ApcStatePointer = v_bytes(size=16) # FIXME Unknown Array Type self.SavedApcState = KAPC_STATE() self.Win32Thread = v_ptr64() self.StackBase = v_ptr64() @@ -2209,7 +2209,7 @@ class _unnamed_8934(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.BankNumber = v_uint8() - self.Reserved2 = v_bytes(size=7) # FIXME Unknown Array Type + self.Reserved2 = v_bytes(size=7) # FIXME Unknown Array Type self.Status = MCI_STATS() self.Address = MCI_ADDR() self.Misc = v_uint64() @@ -2506,7 +2506,7 @@ def __init__(self): class SID_IDENTIFIER_AUTHORITY(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Value = v_bytes(size=6) # FIXME Unknown Array Type + self.Value = v_bytes(size=6) # FIXME Unknown Array Type class _unnamed_9235(vstruct.VStruct): @@ -2686,7 +2686,7 @@ def __init__(self): self.ClusterShift = v_uint8() self.Reserved = v_uint8() self.NumberOfChunks = v_uint16() - self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type + self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type class KSTACK_AREA(vstruct.VStruct): @@ -2784,7 +2784,7 @@ def __init__(self): self.IndexHigh = v_uint16() self.Index = v_uint16() self.Depth = v_uint16() - self.BackTrace = v_bytes(size=256) # FIXME Unknown Array Type + self.BackTrace = v_bytes(size=256) # FIXME Unknown Array Type class OBJECT_DUMP_CONTROL(vstruct.VStruct): @@ -2801,7 +2801,7 @@ def __init__(self): self.Handle = v_ptr64() self.Type = v_uint32() self._pad0020 = v_bytes(size=4) - self.StackTrace = v_bytes(size=128) # FIXME Unknown Array Type + self.StackTrace = v_bytes(size=128) # FIXME Unknown Array Type class GENERAL_LOOKASIDE_POOL(vstruct.VStruct): @@ -2822,7 +2822,7 @@ def __init__(self): self.ListEntry = LIST_ENTRY() self.LastTotalAllocates = v_uint32() self.LastAllocateMisses = v_uint32() - self.Future = v_bytes(size=8) # FIXME Unknown Array Type + self.Future = v_bytes(size=8) # FIXME Unknown Array Type class RTL_SRWLOCK(vstruct.VStruct): @@ -2861,7 +2861,7 @@ def __init__(self): class KDESCRIPTOR(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Pad = v_bytes(size=6) # FIXME Unknown Array Type + self.Pad = v_bytes(size=6) # FIXME Unknown Array Type self.Limit = v_uint16() self.Base = v_ptr64() @@ -2999,7 +2999,7 @@ def __init__(self): class EX_PUSH_LOCK_CACHE_AWARE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Locks = v_bytes(size=256) # FIXME Unknown Array Type + self.Locks = v_bytes(size=256) # FIXME Unknown Array Type class RTL_TRACE_BLOCK(vstruct.VStruct): @@ -3168,7 +3168,7 @@ def __init__(self): class _unnamed_9653(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Data = v_bytes(size=12) # FIXME Unknown Array Type + self.Data = v_bytes(size=12) # FIXME Unknown Array Type class KWAIT_BLOCK(vstruct.VStruct): @@ -3320,7 +3320,7 @@ def __init__(self): self.ListEntry = LIST_ENTRY() self.LastTotalAllocates = v_uint32() self.LastAllocateMisses = v_uint32() - self.Future = v_bytes(size=8) # FIXME Unknown Array Type + self.Future = v_bytes(size=8) # FIXME Unknown Array Type class _unnamed_8929(vstruct.VStruct): @@ -3458,13 +3458,13 @@ def __init__(self): self.CrossProcessFlags = v_uint32() self._pad0058 = v_bytes(size=4) self.KernelCallbackTable = v_ptr64() - self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type + self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type self.AtlThunkSListPtr32 = v_uint32() self.ApiSetMap = v_ptr64() self.TlsExpansionCounter = v_uint32() self._pad0078 = v_bytes(size=4) self.TlsBitmap = v_ptr64() - self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type + self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type self.ReadOnlySharedMemoryBase = v_ptr64() self.HotpatchInformation = v_ptr64() self.ReadOnlyStaticServerData = v_ptr64() @@ -3496,10 +3496,10 @@ def __init__(self): self.ImageSubsystemMinorVersion = v_uint32() self._pad0138 = v_bytes(size=4) self.ActiveProcessAffinityMask = v_uint64() - self.GdiHandleBuffer = v_bytes(size=240) # FIXME Unknown Array Type + self.GdiHandleBuffer = v_bytes(size=240) # FIXME Unknown Array Type self.PostProcessInitRoutine = v_ptr64() self.TlsExpansionBitmap = v_ptr64() - self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type + self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type self.SessionId = v_uint32() self._pad02c8 = v_bytes(size=4) self.AppCompatFlags = ULARGE_INTEGER() @@ -3515,7 +3515,7 @@ def __init__(self): self.FlsCallback = v_ptr64() self.FlsListHead = LIST_ENTRY() self.FlsBitmap = v_ptr64() - self.FlsBitmapBits = v_bytes(size=16) # FIXME Unknown Array Type + self.FlsBitmapBits = v_bytes(size=16) # FIXME Unknown Array Type self.FlsHighIndex = v_uint32() self._pad0358 = v_bytes(size=4) self.WerRegistrationData = v_ptr64() @@ -3539,7 +3539,7 @@ def __init__(self): class STACK_TRACE_DATABASE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Reserved = v_bytes(size=104) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=104) # FIXME Unknown Array Type self.Reserved2 = v_ptr64() self.PeakHashCollisionListLength = v_uint64() self.LowerMemoryStart = v_ptr64() @@ -3733,7 +3733,7 @@ def __init__(self): self.Data1 = v_uint32() self.Data2 = v_uint16() self.Data3 = v_uint16() - self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type + self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type class HEAP_UCR_DESCRIPTOR(vstruct.VStruct): @@ -3756,7 +3756,7 @@ def __init__(self): self.u = _unnamed_8922() self.ExtCnt = v_uint32() self.Reserved3 = v_uint32() - self.ExtReg = v_bytes(size=192) # FIXME Unknown Array Type + self.ExtReg = v_bytes(size=192) # FIXME Unknown Array Type class PSP_CPU_QUOTA_APC(vstruct.VStruct): @@ -3767,7 +3767,7 @@ def __init__(self): class KAPC_STATE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.ApcListHead = v_bytes(size=192) # FIXME Unknown Array Type + self.ApcListHead = v_bytes(size=192) # FIXME Unknown Array Type self.Process = v_ptr64() self.KernelApcInProgress = v_uint8() self.KernelApcPending = v_uint8() @@ -3906,7 +3906,7 @@ def __init__(self): self.DriverInit = v_ptr64() self.DriverStartIo = v_ptr64() self.DriverUnload = v_ptr64() - self.MajorFunction = v_bytes(size=224) # FIXME Unknown Array Type + self.MajorFunction = v_bytes(size=224) # FIXME Unknown Array Type class _unnamed_6629(vstruct.VStruct): @@ -3974,7 +3974,7 @@ class TP_NBQ_GUARD(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.GuardLinks = LIST_ENTRY() - self.Guards = v_bytes(size=16) # FIXME Unknown Array Type + self.Guards = v_bytes(size=16) # FIXME Unknown Array Type class flags(vstruct.VStruct): @@ -4022,7 +4022,7 @@ def __init__(self): self.ExceptionAddress = v_ptr64() self.NumberParameters = v_uint32() self._pad0020 = v_bytes(size=4) - self.ExceptionInformation = v_bytes(size=120) # FIXME Unknown Array Type + self.ExceptionInformation = v_bytes(size=120) # FIXME Unknown Array Type class _unnamed_10210(vstruct.VStruct): @@ -4053,24 +4053,24 @@ def __init__(self): vstruct.VStruct.__init__(self) self.NtTib = NT_TIB() self.IdtBase = v_ptr64() - self.Unused = v_bytes(size=16) # FIXME Unknown Array Type + self.Unused = v_bytes(size=16) # FIXME Unknown Array Type self.Irql = v_uint8() self.SecondLevelCacheAssociativity = v_uint8() self.ObsoleteNumber = v_uint8() self.Fill0 = v_uint8() - self.Unused0 = v_bytes(size=12) # FIXME Unknown Array Type + self.Unused0 = v_bytes(size=12) # FIXME Unknown Array Type self.MajorVersion = v_uint16() self.MinorVersion = v_uint16() self.StallScaleFactor = v_uint32() - self.Unused1 = v_bytes(size=24) # FIXME Unknown Array Type + self.Unused1 = v_bytes(size=24) # FIXME Unknown Array Type self.KernelReserved = v_bytes(size=60) # FIXME Unknown Array Type self.SecondLevelCacheSize = v_uint32() - self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type + self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type self.Unused2 = v_uint32() self._pad0108 = v_bytes(size=4) self.KdVersionBlock = v_ptr64() self.Unused3 = v_ptr64() - self.PcrAlign1 = v_bytes(size=96) # FIXME Unknown Array Type + self.PcrAlign1 = v_bytes(size=96) # FIXME Unknown Array Type self._pad0180 = v_bytes(size=8) self.Prcb = KPRCB() @@ -4342,7 +4342,7 @@ def __init__(self): class ACCESS_REASONS(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Data = v_bytes(size=128) # FIXME Unknown Array Type + self.Data = v_bytes(size=128) # FIXME Unknown Array Type class TP_TASK_CALLBACKS(vstruct.VStruct): @@ -4493,7 +4493,7 @@ def __init__(self): self.RecordId = v_uint64() self.Flags = WHEA_ERROR_RECORD_HEADER_FLAGS() self.PersistenceInfo = WHEA_PERSISTENCE_INFO() - self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type class EVENT_DESCRIPTOR(vstruct.VStruct): @@ -4521,7 +4521,7 @@ def __init__(self): self.ExitGate = v_ptr64() self.AccessLog = v_ptr64() self.WorkingSetExpansionLinks = LIST_ENTRY() - self.AgeDistribution = v_bytes(size=28) # FIXME Unknown Array Type + self.AgeDistribution = v_bytes(size=28) # FIXME Unknown Array Type self.MinimumWorkingSetSize = v_uint32() self.WorkingSetSize = v_uint32() self.WorkingSetPrivateSize = v_uint32() @@ -4536,7 +4536,7 @@ def __init__(self): self.LastTrimStamp = v_uint16() self.PageFaultCount = v_uint32() self.RepurposeCount = v_uint32() - self.Spare = v_bytes(size=8) # FIXME Unknown Array Type + self.Spare = v_bytes(size=8) # FIXME Unknown Array Type self.Flags = MMSUPPORT_FLAGS() @@ -4657,17 +4657,17 @@ def __init__(self): self.CountOfOwnedCriticalSections = v_uint32() self.CsrClientThread = v_ptr64() self.Win32ThreadInfo = v_ptr64() - self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type - self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type + self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type + self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type self._pad0100 = v_bytes(size=4) self.WOW32Reserved = v_ptr64() self.CurrentLocale = v_uint32() self.FpSoftwareStatusRegister = v_uint32() - self.SystemReserved1 = v_bytes(size=432) # FIXME Unknown Array Type + self.SystemReserved1 = v_bytes(size=432) # FIXME Unknown Array Type self.ExceptionCode = v_uint32() self._pad02c8 = v_bytes(size=4) self.ActivationContextStackPointer = v_ptr64() - self.SpareBytes = v_bytes(size=24) # FIXME Unknown Array Type + self.SpareBytes = v_bytes(size=24) # FIXME Unknown Array Type self.TxFsContext = v_uint32() self._pad02f0 = v_bytes(size=4) self.GdiTebBatch = GDI_TEB_BATCH() @@ -4676,9 +4676,9 @@ def __init__(self): self.GdiClientPID = v_uint32() self.GdiClientTID = v_uint32() self.GdiThreadLocalInfo = v_ptr64() - self.Win32ClientInfo = v_bytes(size=496) # FIXME Unknown Array Type - self.glDispatchTable = v_bytes(size=1864) # FIXME Unknown Array Type - self.glReserved1 = v_bytes(size=232) # FIXME Unknown Array Type + self.Win32ClientInfo = v_bytes(size=496) # FIXME Unknown Array Type + self.glDispatchTable = v_bytes(size=1864) # FIXME Unknown Array Type + self.glReserved1 = v_bytes(size=232) # FIXME Unknown Array Type self.glReserved2 = v_ptr64() self.glSectionInfo = v_ptr64() self.glSection = v_ptr64() @@ -4688,17 +4688,17 @@ def __init__(self): self.LastStatusValue = v_uint32() self._pad1258 = v_bytes(size=4) self.StaticUnicodeString = UNICODE_STRING() - self.StaticUnicodeBuffer = v_bytes(size=522) # FIXME Unknown Array Type + self.StaticUnicodeBuffer = v_bytes(size=522) # FIXME Unknown Array Type self._pad1478 = v_bytes(size=6) self.DeallocationStack = v_ptr64() - self.TlsSlots = v_bytes(size=512) # FIXME Unknown Array Type + self.TlsSlots = v_bytes(size=512) # FIXME Unknown Array Type self.TlsLinks = LIST_ENTRY() self.Vdm = v_ptr64() self.ReservedForNtRpc = v_ptr64() - self.DbgSsReserved = v_bytes(size=16) # FIXME Unknown Array Type + self.DbgSsReserved = v_bytes(size=16) # FIXME Unknown Array Type self.HardErrorMode = v_uint32() self._pad16b8 = v_bytes(size=4) - self.Instrumentation = v_bytes(size=88) # FIXME Unknown Array Type + self.Instrumentation = v_bytes(size=88) # FIXME Unknown Array Type self.ActivityId = GUID() self.SubProcessTag = v_ptr64() self.EtwLocalData = v_ptr64() @@ -4765,7 +4765,7 @@ def __init__(self): self.MxCsr_Mask = v_uint32() self.FloatRegisters = v_uint32() self.XmmRegisters = v_uint32() - self.Reserved4 = v_bytes(size=96) # FIXME Unknown Array Type + self.Reserved4 = v_bytes(size=96) # FIXME Unknown Array Type class PO_DIAG_STACK_RECORD(vstruct.VStruct): @@ -4773,7 +4773,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.StackDepth = v_uint32() self._pad0008 = v_bytes(size=4) - self.Stack = v_bytes(size=8) # FIXME Unknown Array Type + self.Stack = v_bytes(size=8) # FIXME Unknown Array Type class IMAGE_DOS_HEADER(vstruct.VStruct): @@ -4793,10 +4793,10 @@ def __init__(self): self.e_cs = v_uint16() self.e_lfarlc = v_uint16() self.e_ovno = v_uint16() - self.e_res = v_bytes(size=8) # FIXME Unknown Array Type + self.e_res = v_bytes(size=8) # FIXME Unknown Array Type self.e_oemid = v_uint16() self.e_oeminfo = v_uint16() - self.e_res2 = v_bytes(size=20) # FIXME Unknown Array Type + self.e_res2 = v_bytes(size=20) # FIXME Unknown Array Type self.e_lfanew = v_uint32() @@ -4878,7 +4878,7 @@ def __init__(self): self.NextThread = v_ptr64() self.IdleThread = v_ptr64() self.NestingLevel = v_uint8() - self.PrcbPad00 = v_bytes(size=3) # FIXME Unknown Array Type + self.PrcbPad00 = v_bytes(size=3) # FIXME Unknown Array Type self.Number = v_uint32() self.RspBase = v_uint64() self.PrcbLock = v_uint64() @@ -4888,7 +4888,7 @@ def __init__(self): self.CpuID = v_uint8() self.CpuStep = v_uint16() self.MHz = v_uint32() - self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type + self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type self.MinorVersion = v_uint16() self.MajorVersion = v_uint16() self.BuildType = v_uint8() @@ -4955,7 +4955,7 @@ def __init__(self): self.MasterOffset = v_uint32() self.LastTick = v_uint32() self.UnusedPad = v_uint32() - self.PrcbPad50 = v_bytes(size=16) # FIXME Unknown Array Type + self.PrcbPad50 = v_bytes(size=16) # FIXME Unknown Array Type self.TimerTable = KTIMER_TABLE() self.DpcGate = KGATE() self.PrcbPad52 = v_ptr64() @@ -4974,8 +4974,8 @@ def __init__(self): self.ReadySummary = v_uint32() self.QueueIndex = v_uint32() self.TimerExpirationDpc = KDPC() - self.PrcbPad72 = v_bytes(size=32) # FIXME Unknown Array Type - self.DispatcherReadyListHead = v_bytes(size=32) # FIXME Unknown Array Type + self.PrcbPad72 = v_bytes(size=32) # FIXME Unknown Array Type + self.DispatcherReadyListHead = v_bytes(size=32) # FIXME Unknown Array Type self.InterruptCount = v_uint32() self.KernelTime = v_uint32() self.UserTime = v_uint32() @@ -4983,7 +4983,7 @@ def __init__(self): self.InterruptTime = v_uint32() self.AdjustDpcThreshold = v_uint32() self.DebuggerSavedIRQL = v_uint8() - self.PrcbPad80 = v_bytes(size=7) # FIXME Unknown Array Type + self.PrcbPad80 = v_bytes(size=7) # FIXME Unknown Array Type self.DpcTimeCount = v_uint32() self.DpcTimeLimit = v_uint32() self.PeriodicCount = v_uint32() @@ -4992,7 +4992,7 @@ def __init__(self): self.KeExceptionDispatchCount = v_uint32() self.ParentNode = v_ptr64() self.StartCycles = v_uint64() - self.PrcbPad82 = v_bytes(size=24) # FIXME Unknown Array Type + self.PrcbPad82 = v_bytes(size=24) # FIXME Unknown Array Type self.MmSpinLockOrdering = v_uint32() self.PageColor = v_uint32() self.NodeColor = v_uint32() @@ -5029,10 +5029,10 @@ def __init__(self): self.MmCacheTransitionCount = v_uint32() self.MmCacheReadCount = v_uint32() self.MmCacheIoCount = v_uint32() - self.PrcbPad91 = v_bytes(size=4) # FIXME Unknown Array Type + self.PrcbPad91 = v_bytes(size=4) # FIXME Unknown Array Type self.RuntimeAccumulation = v_uint64() self.PowerState = PROCESSOR_POWER_STATE() - self.PrcbPad92 = v_bytes(size=16) # FIXME Unknown Array Type + self.PrcbPad92 = v_bytes(size=16) # FIXME Unknown Array Type self.KeAlignmentFixupCount = v_uint32() self._pad4918 = v_bytes(size=4) self.DpcWatchdogDpc = KDPC() @@ -5051,11 +5051,11 @@ def __init__(self): self.VirtualApicAssist = v_ptr64() self.StatisticsPage = v_ptr64() self.RateControl = v_ptr64() - self.CacheProcessorMask = v_bytes(size=40) # FIXME Unknown Array Type + self.CacheProcessorMask = v_bytes(size=40) # FIXME Unknown Array Type self.PackageProcessorSet = KAFFINITY_EX() self.CoreProcessorSet = v_uint64() self.PebsIndexAddress = v_ptr64() - self.PrcbPad93 = v_bytes(size=96) # FIXME Unknown Array Type + self.PrcbPad93 = v_bytes(size=96) # FIXME Unknown Array Type self.SpinLockAcquireCount = v_uint32() self.SpinLockContentionCount = v_uint32() self.SpinLockSpinCount = v_uint32() @@ -5102,8 +5102,8 @@ def __init__(self): self.ExBoostSharedOwners = v_uint32() self.ExEtwSynchTrackingNotificationsCount = v_uint32() self.ExEtwSynchTrackingNotificationsAccountedCount = v_uint32() - self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type - self.PrcbPad10 = v_bytes(size=3) # FIXME Unknown Array Type + self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type + self.PrcbPad10 = v_bytes(size=3) # FIXME Unknown Array Type self.FeatureBits = v_uint32() self._pad4bd0 = v_bytes(size=4) self.UpdateSignature = LARGE_INTEGER() @@ -5143,7 +5143,7 @@ def __init__(self): self.Count = v_uint16() self.Size = v_uint16() self.Reserved = v_uint32() - self.Bitmap = v_bytes(size=32) # FIXME Unknown Array Type + self.Bitmap = v_bytes(size=32) # FIXME Unknown Array Type class DEVICE_OBJECT(vstruct.VStruct): @@ -5200,7 +5200,7 @@ def __init__(self): self.Rsp0 = v_uint64() self.Rsp1 = v_uint64() self.Rsp2 = v_uint64() - self.Ist = v_bytes(size=64) # FIXME Unknown Array Type + self.Ist = v_bytes(size=64) # FIXME Unknown Array Type self.Reserved1 = v_uint64() self.Reserved2 = v_uint16() self.IoMapBase = v_uint16() @@ -5267,7 +5267,7 @@ def __init__(self): self.Seed = v_uint32() self.MmShiftedColor = v_uint32() self._pad0068 = v_bytes(size=4) - self.FreeCount = v_bytes(size=16) # FIXME Unknown Array Type + self.FreeCount = v_bytes(size=16) # FIXME Unknown Array Type self.Right = v_uint32() self.Left = v_uint32() self.CachedKernelStacks = CACHED_KSTACK_LIST() @@ -5288,7 +5288,7 @@ class XSAVE_AREA_HEADER(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.Mask = v_uint64() - self.Reserved = v_bytes(size=56) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=56) # FIXME Unknown Array Type class MM_DRIVER_VERIFIER_DATA(vstruct.VStruct): @@ -5382,7 +5382,7 @@ def __init__(self): self.InterfaceType = v_uint32() self.BusNumber = v_uint32() self.SlotNumber = v_uint32() - self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type self.AlternativeLists = v_uint32() self.List = v_uint32() diff --git a/vstruct/defs/windows/win_6_1_wow64/ntdll.py b/vstruct/defs/windows/win_6_1_wow64/ntdll.py index 33ce552..cf5d354 100644 --- a/vstruct/defs/windows/win_6_1_wow64/ntdll.py +++ b/vstruct/defs/windows/win_6_1_wow64/ntdll.py @@ -624,7 +624,7 @@ class _unnamed_9079(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.BankNumber = v_uint8() - self.Reserved2 = v_bytes(size=7) # FIXME Unknown Array Type + self.Reserved2 = v_bytes(size=7) # FIXME Unknown Array Type self.Status = MCI_STATS() self.Address = MCI_ADDR() self.Misc = v_uint64() @@ -651,7 +651,7 @@ def __init__(self): self.Revision = v_uint8() self.SubAuthorityCount = v_uint8() self.IdentifierAuthority = SID_IDENTIFIER_AUTHORITY() - self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type + self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type class WHEA_ERROR_PACKET_V2(vstruct.VStruct): @@ -687,7 +687,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.Mask = v_uint32() self.Group = v_uint16() - self.Reserved = v_bytes(size=6) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=6) # FIXME Unknown Array Type class KTSS(vstruct.VStruct): @@ -698,7 +698,7 @@ def __init__(self): self.Esp0 = v_uint32() self.Ss0 = v_uint16() self.Reserved1 = v_uint16() - self.NotUsed1 = v_bytes(size=16) # FIXME Unknown Array Type + self.NotUsed1 = v_bytes(size=16) # FIXME Unknown Array Type self.CR3 = v_uint32() self.Eip = v_uint32() self.EFlags = v_uint32() @@ -727,7 +727,7 @@ def __init__(self): self.Flags = v_uint16() self.IoMapBase = v_uint16() self.IoMaps = v_uint16() - self.IntDirectionMap = v_bytes(size=32) # FIXME Unknown Array Type + self.IntDirectionMap = v_bytes(size=32) # FIXME Unknown Array Type class CURDIR(vstruct.VStruct): @@ -740,7 +740,7 @@ def __init__(self): class PERFINFO_GROUPMASK(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Masks = v_bytes(size=32) # FIXME Unknown Array Type + self.Masks = v_bytes(size=32) # FIXME Unknown Array Type class HANDLE_TABLE_ENTRY_INFO(vstruct.VStruct): @@ -775,7 +775,7 @@ def __init__(self): self.SectionType = GUID() self.FRUId = GUID() self.SectionSeverity = v_uint32() - self.FRUText = v_bytes(size=20) # FIXME Unknown Array Type + self.FRUText = v_bytes(size=20) # FIXME Unknown Array Type class PS_CPU_QUOTA_BLOCK(vstruct.VStruct): @@ -818,7 +818,7 @@ def __init__(self): class _unnamed_9787(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Data = v_bytes(size=12) # FIXME Unknown Array Type + self.Data = v_bytes(size=12) # FIXME Unknown Array Type class _unnamed_9789(vstruct.VStruct): @@ -879,8 +879,8 @@ def __init__(self): self.QuantumReset = v_uint8() self.Visited = v_uint8() self.Unused3 = v_uint8() - self.ThreadSeed = v_bytes(size=16) # FIXME Unknown Array Type - self.IdealNode = v_bytes(size=8) # FIXME Unknown Array Type + self.ThreadSeed = v_bytes(size=16) # FIXME Unknown Array Type + self.IdealNode = v_bytes(size=8) # FIXME Unknown Array Type self.IdealGlobalNode = v_uint16() self.Flags = KEXECUTE_OPTIONS() self.Unused1 = v_uint8() @@ -1052,7 +1052,7 @@ def __init__(self): self.HashFunction = v_ptr32() self.NoOfTraces = v_uint32() self.NoOfHits = v_uint32() - self.HashCounter = v_bytes(size=64) # FIXME Unknown Array Type + self.HashCounter = v_bytes(size=64) # FIXME Unknown Array Type class OWNER_ENTRY(vstruct.VStruct): @@ -1086,7 +1086,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.Hint = v_ptr32() self.ActiveSubsegment = v_ptr32() - self.CachedItems = v_bytes(size=64) # FIXME Unknown Array Type + self.CachedItems = v_bytes(size=64) # FIXME Unknown Array Type self.SListHeader = SLIST_HEADER() self.Counters = HEAP_BUCKET_COUNTERS() self.LocalData = v_ptr32() @@ -1202,8 +1202,8 @@ def __init__(self): self.ResetCount = v_uint32() self._pad0010 = v_bytes(size=4) self.StartTime = v_uint64() - self.BucketLimits = v_bytes(size=128) # FIXME Unknown Array Type - self.State = v_bytes(size=128) # FIXME Unknown Array Type + self.BucketLimits = v_bytes(size=128) # FIXME Unknown Array Type + self.State = v_bytes(size=128) # FIXME Unknown Array Type class GDI_TEB_BATCH(vstruct.VStruct): @@ -1211,7 +1211,7 @@ def __init__(self): vstruct.VStruct.__init__(self) self.Offset = v_uint32() self.HDC = v_uint32() - self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type + self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type class THREAD_PERFORMANCE_DATA(vstruct.VStruct): @@ -1468,7 +1468,7 @@ def __init__(self): self.RealDevice = v_ptr32() self.SerialNumber = v_uint32() self.ReferenceCount = v_uint32() - self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type + self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type class PP_LOOKASIDE_LIST(vstruct.VStruct): @@ -1503,23 +1503,23 @@ def __init__(self): self.TimeZoneBias = KSYSTEM_TIME() self.ImageNumberLow = v_uint16() self.ImageNumberHigh = v_uint16() - self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type + self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type self.MaxStackTraceDepth = v_uint32() self.CryptoExponent = v_uint32() self.TimeZoneId = v_uint32() self.LargePageMinimum = v_uint32() - self.Reserved2 = v_bytes(size=28) # FIXME Unknown Array Type + self.Reserved2 = v_bytes(size=28) # FIXME Unknown Array Type self.NtProductType = v_uint32() self.ProductTypeIsValid = v_uint8() self._pad026c = v_bytes(size=3) self.NtMajorVersion = v_uint32() self.NtMinorVersion = v_uint32() - self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type + self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type self.Reserved1 = v_uint32() self.Reserved3 = v_uint32() self.TimeSlip = v_uint32() self.AlternativeArchitecture = v_uint32() - self.AltArchitecturePad = v_bytes(size=4) # FIXME Unknown Array Type + self.AltArchitecturePad = v_bytes(size=4) # FIXME Unknown Array Type self.SystemExpirationDate = LARGE_INTEGER() self.SuiteMask = v_uint32() self.KdDebuggerEnabled = v_uint8() @@ -1532,9 +1532,9 @@ def __init__(self): self.NumberOfPhysicalPages = v_uint32() self.SafeBootMode = v_uint8() self.TscQpcData = v_uint8() - self.TscQpcPad = v_bytes(size=2) # FIXME Unknown Array Type + self.TscQpcPad = v_bytes(size=2) # FIXME Unknown Array Type self.SharedDataFlags = v_uint32() - self.DataFlagsPad = v_bytes(size=4) # FIXME Unknown Array Type + self.DataFlagsPad = v_bytes(size=4) # FIXME Unknown Array Type self.TestRetInstruction = v_uint64() self.SystemCall = v_uint32() self.SystemCallReturn = v_uint32() @@ -1558,7 +1558,7 @@ def __init__(self): self.AppCompatFlag = v_uint32() self.SystemDllNativeRelocation = v_uint64() self.SystemDllWowRelocation = v_uint32() - self.XStatePad = v_bytes(size=4) # FIXME Unknown Array Type + self.XStatePad = v_bytes(size=4) # FIXME Unknown Array Type self.XState = XSTATE_CONFIGURATION() @@ -1667,8 +1667,8 @@ def __init__(self): self.RundownProtect = EX_RUNDOWN_REF() self.UniqueProcessId = v_ptr32() self.ActiveProcessLinks = LIST_ENTRY() - self.ProcessQuotaUsage = v_bytes(size=8) # FIXME Unknown Array Type - self.ProcessQuotaPeak = v_bytes(size=8) # FIXME Unknown Array Type + self.ProcessQuotaUsage = v_bytes(size=8) # FIXME Unknown Array Type + self.ProcessQuotaPeak = v_bytes(size=8) # FIXME Unknown Array Type self.CommitCharge = v_uint32() self.QuotaBlock = v_ptr32() self.CpuQuotaBlock = v_ptr32() @@ -1707,7 +1707,7 @@ def __init__(self): self.PageDirectoryPte = HARDWARE_PTE_X86() self._pad0198 = v_bytes(size=4) self.Session = v_ptr32() - self.ImageFileName = v_bytes(size=15) # FIXME Unknown Array Type + self.ImageFileName = v_bytes(size=15) # FIXME Unknown Array Type self.PriorityClass = v_uint8() self.JobLinks = LIST_ENTRY() self.LockedPagesList = v_ptr32() @@ -1815,8 +1815,8 @@ def __init__(self): class KTIMER_TABLE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.TimerExpiry = v_bytes(size=64) # FIXME Unknown Array Type - self.TimerEntries = v_bytes(size=64) # FIXME Unknown Array Type + self.TimerExpiry = v_bytes(size=64) # FIXME Unknown Array Type + self.TimerEntries = v_bytes(size=64) # FIXME Unknown Array Type class FAST_IO_DISPATCH(vstruct.VStruct): @@ -1856,7 +1856,7 @@ class _unnamed_8164(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.InPath = v_uint8() - self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type self.Type = v_uint32() @@ -1916,7 +1916,7 @@ def __init__(self): self.Idtr = DESCRIPTOR() self.Tr = v_uint16() self.Ldtr = v_uint16() - self.Reserved = v_bytes(size=24) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=24) # FIXME Unknown Array Type class RTL_CRITICAL_SECTION(vstruct.VStruct): @@ -1964,7 +1964,7 @@ def __init__(self): self.ErrorSelector = v_uint32() self.DataOffset = v_uint32() self.DataSelector = v_uint32() - self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type + self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type self.Cr0NpxState = v_uint32() @@ -2051,7 +2051,7 @@ def __init__(self): self.ThreadLock = v_uint32() self.WaitRegister = KWAIT_STATUS_REGISTER() self.Running = v_uint8() - self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type + self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type self.KernelStackResident = v_uint32() self.ApcState = KAPC_STATE() self.NextProcessor = v_uint32() @@ -2094,7 +2094,7 @@ def __init__(self): self.Affinity = GROUP_AFFINITY() self.IdealProcessor = v_uint32() self.UserIdealProcessor = v_uint32() - self.ApcStatePointer = v_bytes(size=8) # FIXME Unknown Array Type + self.ApcStatePointer = v_bytes(size=8) # FIXME Unknown Array Type self.SavedApcState = KAPC_STATE() self.SuspendCount = v_uint8() self.Spare1 = v_uint8() @@ -2140,7 +2140,7 @@ def __init__(self): self.EFlags = v_uint32() self.Esp = v_uint32() self.SegSs = v_uint32() - self.ExtendedRegisters = v_bytes(size=512) # FIXME Unknown Array Type + self.ExtendedRegisters = v_bytes(size=512) # FIXME Unknown Array Type class MCI_STATS(vstruct.VStruct): @@ -2354,8 +2354,8 @@ def __init__(self): class KiIoAccessMap(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.DirectionMap = v_bytes(size=32) # FIXME Unknown Array Type - self.IoMap = v_bytes(size=8196) # FIXME Unknown Array Type + self.DirectionMap = v_bytes(size=32) # FIXME Unknown Array Type + self.IoMap = v_bytes(size=8196) # FIXME Unknown Array Type class _unnamed_8209(vstruct.VStruct): @@ -2403,7 +2403,7 @@ def __init__(self): class SID_IDENTIFIER_AUTHORITY(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Value = v_bytes(size=6) # FIXME Unknown Array Type + self.Value = v_bytes(size=6) # FIXME Unknown Array Type class XSTATE_FEATURE(vstruct.VStruct): @@ -2576,7 +2576,7 @@ def __init__(self): self.ClusterShift = v_uint8() self.Reserved = v_uint8() self.NumberOfChunks = v_uint16() - self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type + self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type class WHEA_ERROR_RECORD(vstruct.VStruct): @@ -2632,7 +2632,7 @@ def __init__(self): self.IndexHigh = v_uint16() self.Index = v_uint16() self.Depth = v_uint16() - self.BackTrace = v_bytes(size=128) # FIXME Unknown Array Type + self.BackTrace = v_bytes(size=128) # FIXME Unknown Array Type class OBJECT_DUMP_CONTROL(vstruct.VStruct): @@ -2648,7 +2648,7 @@ def __init__(self): self.ClientId = CLIENT_ID() self.Handle = v_ptr32() self.Type = v_uint32() - self.StackTrace = v_bytes(size=64) # FIXME Unknown Array Type + self.StackTrace = v_bytes(size=64) # FIXME Unknown Array Type class GENERAL_LOOKASIDE_POOL(vstruct.VStruct): @@ -2669,7 +2669,7 @@ def __init__(self): self.ListEntry = LIST_ENTRY() self.LastTotalAllocates = v_uint32() self.LastAllocateMisses = v_uint32() - self.Future = v_bytes(size=8) # FIXME Unknown Array Type + self.Future = v_bytes(size=8) # FIXME Unknown Array Type class HARDWARE_PTE_X86(vstruct.VStruct): @@ -2692,7 +2692,7 @@ def __init__(self): self.Size = v_uint32() self.TagIndex = v_uint16() self.CreatorBackTraceIndex = v_uint16() - self.TagName = v_bytes(size=48) # FIXME Unknown Array Type + self.TagName = v_bytes(size=48) # FIXME Unknown Array Type class STRING(vstruct.VStruct): @@ -2779,7 +2779,7 @@ def __init__(self): self.NextBlock = v_ptr32() self.ExpectedEncodedEntry = HEAP_ENTRY() self.ExpectedDecodedEntry = HEAP_ENTRY() - self.StackTrace = v_bytes(size=128) # FIXME Unknown Array Type + self.StackTrace = v_bytes(size=128) # FIXME Unknown Array Type class _unnamed_9370(vstruct.VStruct): @@ -2895,7 +2895,7 @@ def __init__(self): class EX_PUSH_LOCK_CACHE_AWARE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Locks = v_bytes(size=128) # FIXME Unknown Array Type + self.Locks = v_bytes(size=128) # FIXME Unknown Array Type class RTL_TRACE_BLOCK(vstruct.VStruct): @@ -3194,7 +3194,7 @@ def __init__(self): self.ListEntry = LIST_ENTRY() self.LastTotalAllocates = v_uint32() self.LastAllocateMisses = v_uint32() - self.Future = v_bytes(size=8) # FIXME Unknown Array Type + self.Future = v_bytes(size=8) # FIXME Unknown Array Type class _unnamed_7775(vstruct.VStruct): @@ -3320,13 +3320,13 @@ def __init__(self): class ACCESS_REASONS(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Data = v_bytes(size=128) # FIXME Unknown Array Type + self.Data = v_bytes(size=128) # FIXME Unknown Array Type class STACK_TRACE_DATABASE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.Reserved = v_bytes(size=56) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=56) # FIXME Unknown Array Type self.Reserved2 = v_ptr32() self.PeakHashCollisionListLength = v_uint32() self.LowerMemoryStart = v_ptr32() @@ -3508,7 +3508,7 @@ def __init__(self): self.Data1 = v_uint32() self.Data2 = v_uint16() self.Data3 = v_uint16() - self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type + self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type class HEAP_UCR_DESCRIPTOR(vstruct.VStruct): @@ -3531,7 +3531,7 @@ def __init__(self): self.u = _unnamed_9067() self.ExtCnt = v_uint32() self.Reserved3 = v_uint32() - self.ExtReg = v_bytes(size=192) # FIXME Unknown Array Type + self.ExtReg = v_bytes(size=192) # FIXME Unknown Array Type class PSP_CPU_QUOTA_APC(vstruct.VStruct): @@ -3542,7 +3542,7 @@ def __init__(self): class KAPC_STATE(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) - self.ApcListHead = v_bytes(size=192) # FIXME Unknown Array Type + self.ApcListHead = v_bytes(size=192) # FIXME Unknown Array Type self.Process = v_ptr32() self.KernelApcInProgress = v_uint8() self.KernelApcPending = v_uint8() @@ -3655,7 +3655,7 @@ def __init__(self): self.DriverInit = v_ptr32() self.DriverStartIo = v_ptr32() self.DriverUnload = v_ptr32() - self.MajorFunction = v_bytes(size=112) # FIXME Unknown Array Type + self.MajorFunction = v_bytes(size=112) # FIXME Unknown Array Type class FILE_GET_QUOTA_INFORMATION(vstruct.VStruct): @@ -3694,7 +3694,7 @@ class TP_NBQ_GUARD(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.GuardLinks = LIST_ENTRY() - self.Guards = v_bytes(size=8) # FIXME Unknown Array Type + self.Guards = v_bytes(size=8) # FIXME Unknown Array Type class flags(vstruct.VStruct): @@ -3738,7 +3738,7 @@ def __init__(self): self.ExceptionRecord = v_ptr32() self.ExceptionAddress = v_ptr32() self.NumberParameters = v_uint32() - self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type + self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type class PROCESSOR_NUMBER(vstruct.VStruct): @@ -3786,13 +3786,13 @@ def __init__(self): self.Spare0 = v_uint8() self.SecondLevelCacheAssociativity = v_uint8() self.VdmAlert = v_uint32() - self.KernelReserved = v_bytes(size=56) # FIXME Unknown Array Type + self.KernelReserved = v_bytes(size=56) # FIXME Unknown Array Type self.SecondLevelCacheSize = v_uint32() - self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type + self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type self.InterruptMode = v_uint32() self.Spare1 = v_uint8() self._pad00dc = v_bytes(size=3) - self.KernelReserved2 = v_bytes(size=68) # FIXME Unknown Array Type + self.KernelReserved2 = v_bytes(size=68) # FIXME Unknown Array Type self.PrcbData = KPRCB() @@ -4129,12 +4129,12 @@ def __init__(self): self.IFEOKey = v_ptr32() self.CrossProcessFlags = v_uint32() self.KernelCallbackTable = v_ptr32() - self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type + self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type self.AtlThunkSListPtr32 = v_uint32() self.ApiSetMap = v_ptr32() self.TlsExpansionCounter = v_uint32() self.TlsBitmap = v_ptr32() - self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type + self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type self.ReadOnlySharedMemoryBase = v_ptr32() self.HotpatchInformation = v_ptr32() self.ReadOnlyStaticServerData = v_ptr32() @@ -4165,10 +4165,10 @@ def __init__(self): self.ImageSubsystemMajorVersion = v_uint32() self.ImageSubsystemMinorVersion = v_uint32() self.ActiveProcessAffinityMask = v_uint32() - self.GdiHandleBuffer = v_bytes(size=136) # FIXME Unknown Array Type + self.GdiHandleBuffer = v_bytes(size=136) # FIXME Unknown Array Type self.PostProcessInitRoutine = v_ptr32() self.TlsExpansionBitmap = v_ptr32() - self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type + self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type self.SessionId = v_uint32() self.AppCompatFlags = ULARGE_INTEGER() self.AppCompatFlagsUser = ULARGE_INTEGER() @@ -4183,7 +4183,7 @@ def __init__(self): self.FlsCallback = v_ptr32() self.FlsListHead = LIST_ENTRY() self.FlsBitmap = v_ptr32() - self.FlsBitmapBits = v_bytes(size=16) # FIXME Unknown Array Type + self.FlsBitmapBits = v_bytes(size=16) # FIXME Unknown Array Type self.FlsHighIndex = v_uint32() self.WerRegistrationData = v_ptr32() self.WerShipAssertPtr = v_ptr32() @@ -4206,7 +4206,7 @@ def __init__(self): self.LeftChild = v_ptr32() self.RightChild = v_ptr32() self.Balance = v_uint8() - self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type class _unnamed_9722(vstruct.VStruct): @@ -4323,7 +4323,7 @@ def __init__(self): self.RecordId = v_uint64() self.Flags = WHEA_ERROR_RECORD_HEADER_FLAGS() self.PersistenceInfo = WHEA_PERSISTENCE_INFO() - self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type class EVENT_DESCRIPTOR(vstruct.VStruct): @@ -4365,7 +4365,7 @@ def __init__(self): self.ExitGate = v_ptr32() self.AccessLog = v_ptr32() self.WorkingSetExpansionLinks = LIST_ENTRY() - self.AgeDistribution = v_bytes(size=28) # FIXME Unknown Array Type + self.AgeDistribution = v_bytes(size=28) # FIXME Unknown Array Type self.MinimumWorkingSetSize = v_uint32() self.WorkingSetSize = v_uint32() self.WorkingSetPrivateSize = v_uint32() @@ -4380,7 +4380,7 @@ def __init__(self): self.LastTrimStamp = v_uint16() self.PageFaultCount = v_uint32() self.RepurposeCount = v_uint32() - self.Spare = v_bytes(size=4) # FIXME Unknown Array Type + self.Spare = v_bytes(size=4) # FIXME Unknown Array Type self.Flags = MMSUPPORT_FLAGS() @@ -4489,15 +4489,15 @@ def __init__(self): self.CountOfOwnedCriticalSections = v_uint32() self.CsrClientThread = v_ptr32() self.Win32ThreadInfo = v_ptr32() - self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type - self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type + self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type + self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type self.WOW32Reserved = v_ptr32() self.CurrentLocale = v_uint32() self.FpSoftwareStatusRegister = v_uint32() - self.SystemReserved1 = v_bytes(size=216) # FIXME Unknown Array Type + self.SystemReserved1 = v_bytes(size=216) # FIXME Unknown Array Type self.ExceptionCode = v_uint32() self.ActivationContextStackPointer = v_ptr32() - self.SpareBytes = v_bytes(size=36) # FIXME Unknown Array Type + self.SpareBytes = v_bytes(size=36) # FIXME Unknown Array Type self.TxFsContext = v_uint32() self.GdiTebBatch = GDI_TEB_BATCH() self.RealClientId = CLIENT_ID() @@ -4505,9 +4505,9 @@ def __init__(self): self.GdiClientPID = v_uint32() self.GdiClientTID = v_uint32() self.GdiThreadLocalInfo = v_ptr32() - self.Win32ClientInfo = v_bytes(size=248) # FIXME Unknown Array Type - self.glDispatchTable = v_bytes(size=932) # FIXME Unknown Array Type - self.glReserved1 = v_bytes(size=116) # FIXME Unknown Array Type + self.Win32ClientInfo = v_bytes(size=248) # FIXME Unknown Array Type + self.glDispatchTable = v_bytes(size=932) # FIXME Unknown Array Type + self.glReserved1 = v_bytes(size=116) # FIXME Unknown Array Type self.glReserved2 = v_ptr32() self.glSectionInfo = v_ptr32() self.glSection = v_ptr32() @@ -4516,16 +4516,16 @@ def __init__(self): self.glContext = v_ptr32() self.LastStatusValue = v_uint32() self.StaticUnicodeString = UNICODE_STRING() - self.StaticUnicodeBuffer = v_bytes(size=522) # FIXME Unknown Array Type + self.StaticUnicodeBuffer = v_bytes(size=522) # FIXME Unknown Array Type self._pad0e0c = v_bytes(size=2) self.DeallocationStack = v_ptr32() - self.TlsSlots = v_bytes(size=256) # FIXME Unknown Array Type + self.TlsSlots = v_bytes(size=256) # FIXME Unknown Array Type self.TlsLinks = LIST_ENTRY() self.Vdm = v_ptr32() self.ReservedForNtRpc = v_ptr32() - self.DbgSsReserved = v_bytes(size=8) # FIXME Unknown Array Type + self.DbgSsReserved = v_bytes(size=8) # FIXME Unknown Array Type self.HardErrorMode = v_uint32() - self.Instrumentation = v_bytes(size=36) # FIXME Unknown Array Type + self.Instrumentation = v_bytes(size=36) # FIXME Unknown Array Type self.ActivityId = GUID() self.SubProcessTag = v_ptr32() self.EtwLocalData = v_ptr32() @@ -4587,8 +4587,8 @@ def __init__(self): self.MxCsr_Mask = v_uint32() self.FloatRegisters = v_uint32() self.XmmRegisters = v_uint32() - self.Reserved4 = v_bytes(size=192) # FIXME Unknown Array Type - self.StackControl = v_bytes(size=28) # FIXME Unknown Array Type + self.Reserved4 = v_bytes(size=192) # FIXME Unknown Array Type + self.StackControl = v_bytes(size=28) # FIXME Unknown Array Type self.Cr0NpxState = v_uint32() @@ -4596,7 +4596,7 @@ class PO_DIAG_STACK_RECORD(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.StackDepth = v_uint32() - self.Stack = v_bytes(size=4) # FIXME Unknown Array Type + self.Stack = v_bytes(size=4) # FIXME Unknown Array Type class IMAGE_DOS_HEADER(vstruct.VStruct): @@ -4616,10 +4616,10 @@ def __init__(self): self.e_cs = v_uint16() self.e_lfarlc = v_uint16() self.e_ovno = v_uint16() - self.e_res = v_bytes(size=8) # FIXME Unknown Array Type + self.e_res = v_bytes(size=8) # FIXME Unknown Array Type self.e_oemid = v_uint16() self.e_oeminfo = v_uint16() - self.e_res2 = v_bytes(size=20) # FIXME Unknown Array Type + self.e_res2 = v_bytes(size=20) # FIXME Unknown Array Type self.e_lfanew = v_uint32() @@ -4694,20 +4694,20 @@ def __init__(self): self.CpuID = v_uint8() self.CpuStep = v_uint16() self.ProcessorState = KPROCESSOR_STATE() - self.KernelReserved = v_bytes(size=64) # FIXME Unknown Array Type - self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type + self.KernelReserved = v_bytes(size=64) # FIXME Unknown Array Type + self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type self.CFlushSize = v_uint32() self.CoresPerPhysicalProcessor = v_uint8() self.LogicalProcessorsPerCore = v_uint8() - self.PrcbPad0 = v_bytes(size=2) # FIXME Unknown Array Type + self.PrcbPad0 = v_bytes(size=2) # FIXME Unknown Array Type self.MHz = v_uint32() self.CpuVendor = v_uint8() self.GroupIndex = v_uint8() self.Group = v_uint16() self.GroupSetMember = v_uint32() self.Number = v_uint32() - self.PrcbPad1 = v_bytes(size=72) # FIXME Unknown Array Type - self.LockQueue = v_bytes(size=72) # FIXME Unknown Array Type + self.PrcbPad1 = v_bytes(size=72) # FIXME Unknown Array Type + self.LockQueue = v_bytes(size=72) # FIXME Unknown Array Type self.NpxThread = v_ptr32() self.InterruptCount = v_uint32() self.KernelTime = v_uint32() @@ -4719,12 +4719,12 @@ def __init__(self): self.PageColor = v_uint32() self.DebuggerSavedIRQL = v_uint8() self.NodeColor = v_uint8() - self.PrcbPad20 = v_bytes(size=2) # FIXME Unknown Array Type + self.PrcbPad20 = v_bytes(size=2) # FIXME Unknown Array Type self.NodeShiftedColor = v_uint32() self.ParentNode = v_ptr32() self.SecondaryColorMask = v_uint32() self.DpcTimeLimit = v_uint32() - self.PrcbPad21 = v_bytes(size=8) # FIXME Unknown Array Type + self.PrcbPad21 = v_bytes(size=8) # FIXME Unknown Array Type self.CcFastReadNoWait = v_uint32() self.CcFastReadWait = v_uint32() self.CcFastReadNotPossible = v_uint32() @@ -4768,23 +4768,23 @@ def __init__(self): self.KeExceptionDispatchCount = v_uint32() self.KeSystemCalls = v_uint32() self.AvailableTime = v_uint32() - self.PrcbPad22 = v_bytes(size=8) # FIXME Unknown Array Type - self.PPLookasideList = v_bytes(size=8) # FIXME Unknown Array Type - self.PPNPagedLookasideList = v_bytes(size=8) # FIXME Unknown Array Type - self.PPPagedLookasideList = v_bytes(size=8) # FIXME Unknown Array Type + self.PrcbPad22 = v_bytes(size=8) # FIXME Unknown Array Type + self.PPLookasideList = v_bytes(size=8) # FIXME Unknown Array Type + self.PPNPagedLookasideList = v_bytes(size=8) # FIXME Unknown Array Type + self.PPPagedLookasideList = v_bytes(size=8) # FIXME Unknown Array Type self.PacketBarrier = v_uint32() self.ReverseStall = v_uint32() self.IpiFrame = v_ptr32() - self.PrcbPad3 = v_bytes(size=52) # FIXME Unknown Array Type - self.CurrentPacket = v_bytes(size=12) # FIXME Unknown Array Type + self.PrcbPad3 = v_bytes(size=52) # FIXME Unknown Array Type + self.CurrentPacket = v_bytes(size=12) # FIXME Unknown Array Type self.TargetSet = v_uint32() self.WorkerRoutine = v_ptr32() self.IpiFrozen = v_uint32() - self.PrcbPad4 = v_bytes(size=40) # FIXME Unknown Array Type + self.PrcbPad4 = v_bytes(size=40) # FIXME Unknown Array Type self.RequestSummary = v_uint32() self.SignalDone = v_ptr32() - self.PrcbPad50 = v_bytes(size=56) # FIXME Unknown Array Type - self.DpcData = v_bytes(size=56) # FIXME Unknown Array Type + self.PrcbPad50 = v_bytes(size=56) # FIXME Unknown Array Type + self.DpcData = v_bytes(size=56) # FIXME Unknown Array Type self.DpcStack = v_ptr32() self.MaximumDpcQueueDepth = v_uint32() self.DpcRequestRate = v_uint32() @@ -4800,7 +4800,7 @@ def __init__(self): self.TimerHand = v_uint32() self.LastTick = v_uint32() self.MasterOffset = v_uint32() - self.PrcbPad41 = v_bytes(size=8) # FIXME Unknown Array Type + self.PrcbPad41 = v_bytes(size=8) # FIXME Unknown Array Type self.PeriodicCount = v_uint32() self.PeriodicBias = v_uint32() self._pad1958 = v_bytes(size=4) @@ -4810,13 +4810,13 @@ def __init__(self): self.ClockKeepAlive = v_uint32() self.ClockCheckSlot = v_uint8() self.ClockPollCycle = v_uint8() - self.PrcbPad6 = v_bytes(size=2) # FIXME Unknown Array Type + self.PrcbPad6 = v_bytes(size=2) # FIXME Unknown Array Type self.DpcWatchdogPeriod = v_uint32() self.DpcWatchdogCount = v_uint32() self.ThreadWatchdogPeriod = v_uint32() self.ThreadWatchdogCount = v_uint32() self.KeSpinLockOrdering = v_uint32() - self.PrcbPad70 = v_bytes(size=4) # FIXME Unknown Array Type + self.PrcbPad70 = v_bytes(size=4) # FIXME Unknown Array Type self.WaitListHead = LIST_ENTRY() self.WaitLock = v_uint32() self.ReadySummary = v_uint32() @@ -4826,8 +4826,8 @@ def __init__(self): self.CycleTime = v_uint64() self.HighCycleTime = v_uint32() self.PrcbPad71 = v_uint32() - self.PrcbPad72 = v_bytes(size=16) # FIXME Unknown Array Type - self.DispatcherReadyListHead = v_bytes(size=16) # FIXME Unknown Array Type + self.PrcbPad72 = v_bytes(size=16) # FIXME Unknown Array Type + self.DispatcherReadyListHead = v_bytes(size=16) # FIXME Unknown Array Type self.ChainedInterruptList = v_ptr32() self.LookasideIrpFloat = v_uint32() self.MmPageFaultCount = v_uint32() @@ -4846,11 +4846,11 @@ def __init__(self): self.CachedCommit = v_uint32() self.CachedResidentAvailable = v_uint32() self.HyperPte = v_ptr32() - self.PrcbPad8 = v_bytes(size=4) # FIXME Unknown Array Type - self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type + self.PrcbPad8 = v_bytes(size=4) # FIXME Unknown Array Type + self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type self.InitialApicId = v_uint8() self.LogicalProcessorsPerPhysicalProcessor = v_uint8() - self.PrcbPad9 = v_bytes(size=5) # FIXME Unknown Array Type + self.PrcbPad9 = v_bytes(size=5) # FIXME Unknown Array Type self.FeatureBits = v_uint32() self._pad3388 = v_bytes(size=4) self.UpdateSignature = LARGE_INTEGER() @@ -4869,9 +4869,9 @@ def __init__(self): self.RateControl = v_ptr32() self.Cache = v_ptr32() self.CacheCount = v_uint32() - self.CacheProcessorMask = v_bytes(size=20) # FIXME Unknown Array Type + self.CacheProcessorMask = v_bytes(size=20) # FIXME Unknown Array Type self.PackageProcessorSet = KAFFINITY_EX() - self.PrcbPad91 = v_bytes(size=56) # FIXME Unknown Array Type + self.PrcbPad91 = v_bytes(size=56) # FIXME Unknown Array Type self.CoreProcessorSet = v_uint32() self.TimerExpirationDpc = KDPC() self.SpinLockAcquireCount = v_uint32() @@ -4945,7 +4945,7 @@ def __init__(self): self.Count = v_uint16() self.Size = v_uint16() self.Reserved = v_uint32() - self.Bitmap = v_bytes(size=16) # FIXME Unknown Array Type + self.Bitmap = v_bytes(size=16) # FIXME Unknown Array Type class DEVICE_OBJECT(vstruct.VStruct): @@ -5046,7 +5046,7 @@ def __init__(self): self.NodePad0 = v_uint8() self.Seed = v_uint32() self.MmShiftedColor = v_uint32() - self.FreeCount = v_bytes(size=8) # FIXME Unknown Array Type + self.FreeCount = v_bytes(size=8) # FIXME Unknown Array Type self.CachedKernelStacks = CACHED_KSTACK_LIST() self.ParkLock = v_uint32() self.NodePad1 = v_uint32() @@ -5066,7 +5066,7 @@ class XSAVE_AREA_HEADER(vstruct.VStruct): def __init__(self): vstruct.VStruct.__init__(self) self.Mask = v_uint64() - self.Reserved = v_bytes(size=56) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=56) # FIXME Unknown Array Type class PSP_CPU_SHARE_CAPTURED_WEIGHT_DATA(vstruct.VStruct): @@ -5124,7 +5124,7 @@ def __init__(self): self.InterfaceType = v_uint32() self.BusNumber = v_uint32() self.SlotNumber = v_uint32() - self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type + self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type self.AlternativeLists = v_uint32() self.List = v_uint32() diff --git a/vstruct/primitives.py b/vstruct/primitives.py index 09718de..3751c16 100644 --- a/vstruct/primitives.py +++ b/vstruct/primitives.py @@ -10,6 +10,7 @@ class v_enum: pass + class v_base(object): def __init__(self): self._vs_meta = {} @@ -26,6 +27,7 @@ def vsGetFormat(self): return NotImplemented def vsIsPrim(self): return NotImplemented def vsGetTypeName(self): return NotImplemented + class v_prim(v_base): def __init__(self): @@ -191,40 +193,50 @@ def __coerce__(self, other): def __hex__(self): return hex(long(self)) def __oct__(self): return oct(long(self)) + class v_uint8(v_number): _vs_builder = True _vs_fmt = "B" + class v_uint16(v_number): _vs_builder = True _vs_fmt = "H" + class v_uint32(v_number): _vs_builder = True _vs_fmt = "L" + class v_uint64(v_number): _vs_builder = True _vs_fmt = "Q" + class v_int8(v_number): _vs_builder = True _vs_fmt = "b" + class v_int16(v_number): _vs_builder = True _vs_fmt = "h" + class v_int32(v_number): _vs_builder = True _vs_fmt = "l" + class v_int64(v_number): _vs_builder = True _vs_fmt = "q" + pointersize = struct.calcsize("P") + class v_size_t(v_number): _vs_builder = True if pointersize == 4: @@ -233,19 +245,23 @@ class v_size_t(v_number): _vs_fmt = "Q" def __repr__(self): - return "0x%.8x" % self._vs_value + return "{:x}".format(self._vs_value[0:7]) + class v_ptr(v_size_t): pass + class v_ptr32(v_ptr): _vs_builder = True _vs_fmt = "L" + class v_ptr64(v_ptr): _vs_builder = True _vs_fmt = "Q" + class v_bytes(v_prim): _vs_builder = True @@ -263,6 +279,7 @@ def vsGetFormat(self): def __repr__(self): return self._vs_value.encode('hex') + class v_str(v_prim): ''' A string placeholder class which will automagically return @@ -291,6 +308,7 @@ def vsGetFormat(self): def __len__(self): return len(self._vs_value) + class v_wstr(v_str): ''' Unicode variant of the above string class @@ -357,5 +375,5 @@ def vsGetValue(self): def __repr__(self): base = "{%.8x-%.4x-%.4x-%.2x%.2x-%.2x%.2x%.2x%.2x%.2x%.2x}" - return base % (self._guid_fields) + return base % (self._guid_fields) From 24cc0dce41b7518207ff4102cd47d556abd24482 Mon Sep 17 00:00:00 2001 From: PlantDaddy Date: Mon, 13 Apr 2020 21:28:04 -0500 Subject: [PATCH 4/4] Switched the windows defs from using envi to platform to get platform architecture in a crossplatform way, which will (hopefully) fix the travis build failures for python 3.5 --- vstruct/defs/windows/__init__.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/vstruct/defs/windows/__init__.py b/vstruct/defs/windows/__init__.py index a231feb..4eac982 100644 --- a/vstruct/defs/windows/__init__.py +++ b/vstruct/defs/windows/__init__.py @@ -1,8 +1,7 @@ -''' +""" The pre-made windows structure defs (extracted from pdb syms) -''' +""" -import envi import ctypes import platform @@ -21,7 +20,7 @@ def isSysWow64(): def getCurrentDef(normname): bname, wver, stuff, whichkern = platform.win32_ver() wvertup = wver.split('.') - arch = envi.getCurrentArch() + arch = platform.architecture()[0] if isSysWow64(): arch = 'wow64'