gen-sf-preloader-img.py 859 B

1234567891011121314151617181920212223242526272829303132333435
  1. #!/usr/bin/env python
  2. import os
  3. import struct
  4. import sys
  5. def read(path):
  6. with open(path, "rb") as f:
  7. return f.read()
  8. def write(path, data):
  9. with open(path, "wb") as f:
  10. f.write(data)
  11. def padding(data, size, pattern = '\0'):
  12. return data + pattern * (size - len(data))
  13. def align(data, size, pattern = '\0'):
  14. return padding(data, (len(data) + (size - 1)) & ~(size - 1), pattern)
  15. def gen_preloader(data):
  16. data = align(data, 512, '\xff')
  17. header = (padding(struct.pack("<12sII", "SF_BOOT", 1, 512), 512, '\xff') +
  18. padding(struct.pack("<8sIIIIIIII", "BRLYT", 1, 2048, 2048 + len(data),
  19. 0x42424242, 0x00010007, 2048, 2048 + len(data), 1) + '\0' * 140, 512, '\xff') +
  20. '\0' * 1024)
  21. return header + data
  22. def main(argv):
  23. input = argv[1]
  24. output = argv[2]
  25. write(output, gen_preloader(read(input)))
  26. if __name__ == "__main__":
  27. main(sys.argv)