diff --git a/README.md b/README.md index a3fd7cd..29d6345 100644 --- a/README.md +++ b/README.md @@ -21,3 +21,7 @@ Similarly, debug commands may be passed as command-line arguments to `synacor.py For example, to load the `dumps/init` state to skip the self-test and decryption, run: ./synacor.py dbg_load dumps/init + +Dump files are stored in Python [pickle](https://docs.python.org/3/library/pickle.html) format, so if you want to inspect the memory in a hex editor, for example, it will be necessary to extract a raw memory dump: + + ./tools/dump_to_raw.py dumps/init dumps/init.raw diff --git a/tools/dump_to_raw.py b/tools/dump_to_raw.py new file mode 100755 index 0000000..f818a8b --- /dev/null +++ b/tools/dump_to_raw.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +# synacor.py - An implementation of the Synacor Challenge +# Copyright © 2016 RunasSudo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import pickle +import struct +import sys + +if len(sys.argv) < 3: + print('Usage: {} '.format(sys.argv[0])) +else: + with open(sys.argv[1], 'rb') as f: + model = pickle.load(f) + + SYN_MEM = model['SYN_MEM'] + + with open(sys.argv[2], 'wb') as f: + f.write(struct.pack('<32768H', *SYN_MEM))