#
# Project: retdec-python
# Copyright: (c) 2015-2017 by Petr Zemek <s3rvac@gmail.com> and contributors
# License: MIT, see the LICENSE file for more details
#
"""A tool for analysis of binary files. It uses the library."""
import argparse
import sys
from retdec.fileinfo import Fileinfo
from retdec.tools import _add_arguments_shared_by_all_tools
[docs]def parse_args(argv):
"""Parses the given list of arguments."""
parser = argparse.ArgumentParser(
description=(
'Analyzes the given binary file through the retdec.com '
'decompilation service by using their public REST API.\n'
'\n'
'The output from the analysis is printed to the standard output.'
),
formatter_class=argparse.RawDescriptionHelpFormatter
)
_add_arguments_shared_by_all_tools(parser)
parser.add_argument(
'input_file',
metavar='FILE',
help='File to analyze.'
)
parser.add_argument(
'-f', '--output-format',
dest='output_format',
metavar='FORMAT',
choices=['plain', 'json'],
default='plain',
help='Format of the output from the analysis. '
'Choices: %(choices)s. Default: %(default)s.'
)
parser.add_argument(
'-v', '--verbose',
dest='verbose',
action='store_true',
help='Print all available information about the file.'
)
return parser.parse_args(argv[1:])
[docs]def main(argv=None):
"""Runs the tool.
:param list argv: Tool arguments.
If `argv` is ``None``, ``sys.argv`` is used.
"""
args = parse_args(argv if argv is not None else sys.argv)
fileinfo = Fileinfo(
api_url=args.api_url,
api_key=args.api_key
)
analysis = fileinfo.start_analysis(
input_file=args.input_file,
output_format=args.output_format,
verbose=args.verbose
)
analysis.wait_until_finished()
sys.stdout.write(analysis.get_output())
return 0
if __name__ == '__main__':
sys.exit(main())