seclib2obj_convertor.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #!/usr/bin/env python
  2. # -*- coding: UTF-8 -*-
  3. import argparse
  4. import os
  5. import subprocess
  6. import shutil
  7. import tempfile
  8. def PrintError_RaiseException_StopBuild(err) :
  9. print("[Error] " + err)
  10. raise Exception("[Error] " + err)
  11. def main():
  12. parser = argparse.ArgumentParser(description='Security library object parser')
  13. parser.add_argument('--obj_list_file', '-b',
  14. required=True,
  15. help='Provide the file path of the object')
  16. parser.add_argument('--preloader_root_folder', '-r',
  17. required=True,
  18. help='Provide the root folder path of preloader')
  19. parser.add_argument('--preloader_seclib_obj_out_dir', '-p',
  20. required=True,
  21. help='Provide the platform source folder path of preloader')
  22. parser.add_argument('--seclib_path', '-s',
  23. required=True,
  24. help='Provide the security library path of preloader')
  25. parser.add_argument('--preloader_out', '-t',
  26. required=True,
  27. help='Provide the preloader out folder path')
  28. args = parser.parse_args()
  29. if not os.path.isfile(args.obj_list_file) :
  30. PrintError_RaiseException_StopBuild("Seclib object list file not found: " + args.obj_list_file)
  31. if not os.path.isfile(args.seclib_path) :
  32. PrintError_RaiseException_StopBuild("Seclib file not found: " + args.seclib_path)
  33. if not os.path.isdir(args.preloader_root_folder) :
  34. PrintError_RaiseException_StopBuild("Preloader root folder not found: " + args.preloader_root_folder)
  35. if not os.path.isdir(args.preloader_seclib_obj_out_dir) :
  36. PrintError_RaiseException_StopBuild("Preloader seclib tmp out folder not found: " + args.preloader_seclib_obj_out_dir)
  37. lib_obj_file = open(args.obj_list_file, 'r')
  38. cwd = os.getcwd()
  39. ar_dir = tempfile.mkdtemp("_", "_", args.preloader_out)
  40. os.chdir(ar_dir)
  41. for line in lib_obj_file:
  42. obj_item = line.replace("\n", "")
  43. cmd = "ar -x " + args.seclib_path + " " + obj_item
  44. subprocess.call(cmd, shell=True)
  45. shutil.move(os.path.join(ar_dir, obj_item), os.path.join(args.preloader_seclib_obj_out_dir, obj_item))
  46. os.chdir(cwd)
  47. shutil.rmtree(ar_dir)
  48. if __name__ == '__main__':
  49. main()