heavily restructured libpayload, more integrated with c8_remote now

This commit is contained in:
2020-02-11 09:56:37 -05:00
parent 983ad0ad29
commit bd4c9b8196
28 changed files with 317 additions and 332 deletions

View File

@@ -0,0 +1,44 @@
import sys
import os
if __name__ == '__main__':
if len(sys.argv) < 3:
print('Usage: headerize.py [lib names ...] [header dir]')
exit(1)
lib_names = []
hdr_dir = os.path.abspath(sys.argv[-1])
for libarg in sys.argv[1:-1]:
if os.path.isdir(libarg):
lib_folder = os.path.abspath(libarg)
for lib_fname in os.listdir(lib_folder):
lib_names.append(lib_folder + '/' + lib_fname)
else:
lib_names.append(os.path.abspath(libarg))
header_lines = ['#ifndef CHECKM8_TOOL_LIBPAYLOAD_H\n',
'#define CHECKM8_TOOL_LIBPAYLOAD_H\n',
'\n']
name_lines = []
size_lines = []
for n in lib_names:
with open(n, 'r') as f:
line = f.readline() # looks like "const unsigned char PAYLOAD_NAME[PAYLOAD_SIZE] = "
name = line.split(' ')[3].split('[')[0]
size = line.split(' ')[3].split('[')[1][:-1]
name_lines.append('extern const unsigned char %s[%s_SZ];\n' % (name, name.upper()))
size_lines.append('#define %s_SZ %s\n' % (name.upper(), size))
header_lines.extend(size_lines)
header_lines.append('\n')
header_lines.extend(name_lines)
header_lines.append('\n')
header_lines.append('#endif //CHECKM8_TOOL_LIBPAYLOAD_H\n')
with open(hdr_dir + '/libpayload.h', 'w+') as f:
f.writelines(header_lines)

View File

@@ -0,0 +1,54 @@
import sys
import os
from collections import defaultdict
from operator import eq
if __name__ == '__main__':
if len(sys.argv) < 3:
print('Usage: librarize.py [bin names ...] [lib dir]')
exit(1)
bin_names = []
lib_dir = os.path.abspath(sys.argv[-1])
for binarg in sys.argv[1:-1]:
if os.path.isdir(binarg):
bin_folder = os.path.abspath(binarg)
for bin_fname in os.listdir(bin_folder):
bin_names.append(bin_folder + '/' + bin_fname)
else:
bin_names.append(os.path.abspath(binarg))
source_lines = defaultdict(list)
for n in bin_names:
payload_name = os.path.basename(n).split('.')[0]
with open(n, 'rb') as fbin:
fbytes = fbin.read()
source_lines[payload_name].append('const unsigned char %s[%i] =\n' % (payload_name, len(fbytes)))
source_lines[payload_name].append('\t{')
for i, b in enumerate(fbytes):
if i % 16 == 0:
source_lines[payload_name][-1] += '\n'
source_lines[payload_name].append('\t\t')
source_lines[payload_name][-1] += '0x%02x, ' % b
if i == len(fbytes) - 1:
source_lines[payload_name][-1] += '\n'
source_lines[payload_name].append('\t};\n')
for sname, lines in source_lines.items():
sfname = lib_dir + '/' + sname + '.c'
if os.path.exists(sfname):
with open(sfname, 'r') as f:
old_lines = f.readlines()
if all(map(eq, lines, old_lines)):
continue
with open(sfname, 'w+') as f:
f.writelines(lines)