Add dbg_dump_to_raw.py

This commit is contained in:
RunasSudo 2016-05-29 18:59:27 +09:30
parent 036f6554c5
commit 5d3076606e
Signed by: RunasSudo
GPG Key ID: 7234E476BF21C61A
2 changed files with 35 additions and 0 deletions

View File

@ -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

31
tools/dump_to_raw.py Executable file
View File

@ -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 <http://www.gnu.org/licenses/>.
import pickle
import struct
import sys
if len(sys.argv) < 3:
print('Usage: {} <input> <output>'.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))