1 package org.kit.furia;
2
3 import java.io.File;
4 import java.util.Arrays;
5
6 import org.ajmm.obsearch.asserts.OBAsserts;
7 import org.ajmm.obsearch.example.HelpException;
8 import org.apache.commons.cli.CommandLine;
9 import org.apache.commons.cli.CommandLineParser;
10 import org.apache.commons.cli.GnuParser;
11 import org.apache.commons.cli.HelpFormatter;
12 import org.apache.commons.cli.Option;
13 import org.apache.commons.cli.OptionBuilder;
14 import org.apache.commons.cli.Options;
15 import org.apache.commons.cli.ParseException;
16 import org.apache.log4j.LogManager;
17 import org.apache.log4j.Logger;
18 import org.apache.log4j.PropertyConfigurator;
19 import org.kit.furia.fragment.FragmentBuilderClient;
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 public class BytecodeFrag extends AbstractFuriaChanCommandLine{
59
60 private static final Logger logger = Logger.getLogger("BytecodeFrag");
61
62 public static void main(String args[]){
63 int returnValue = 0;
64 try {
65
66 initLogger();
67
68 final CommandLine cline = getCommandLine(initCommandLine(),
69 BytecodeFrag.class, args);
70
71 boolean directoryOfDirectoriesMode = false;
72 if(cline.hasOption("dm")){
73 logger.info("Directory of directories mode");
74 directoryOfDirectoriesMode = true;
75 }
76
77 long timeout = 30 * 60 * 1000;
78 if(cline.hasOption("timeout")){
79 timeout = Integer.parseInt( cline.getOptionValue("timeout"));
80 }
81 File input = new File(cline.getOptionValue("input"));
82 OBAsserts.chkFileExists(input);
83 File output = new File(cline.getOptionValue("output"));
84 String engine = cline.getOptionValue("engine");
85 FragmentBuilderClient c = new FragmentBuilderClient(directoryOfDirectoriesMode,
86 input, Runtime.getRuntime().availableProcessors(), output, false, timeout, engine);
87
88 }catch (final ParseException exp) {
89 logger.fatal("Argument parsing failed args: "
90 + Arrays.toString(args), exp);
91 returnValue = 84;
92 } catch (final HelpException exp) {
93
94 logger.debug("Should have shown the help msg");
95 } catch (final Exception e) {
96 logger.fatal("Exception caught", e);
97 returnValue = 83;
98 }
99
100 LogManager.shutdown();
101 System.exit(returnValue);
102
103 }
104
105
106
107
108
109
110 public static Options initCommandLine() {
111
112 final Option dm= new Option("dm", "Directory mode: If given this option, then the program will process a directory of directories of class files");
113 dm.setRequired(false);
114
115 final Option in = OptionBuilder.withArgName("dir").hasArg().isRequired(
116 true).withDescription("Input directory (directory of directories if dm mode is given)").create("input");
117
118 final Option output = OptionBuilder.withArgName("dir").hasArg().isRequired(
119 true).withDescription("Output directory where the fragments will be stored.").create("output");
120
121 final Option timeout = OptionBuilder.withArgName("seconds").hasArg().isRequired(
122 false).withDescription("Timeout in seconds to give to the processing of each application").create("timeout");
123
124 final Option engine = OptionBuilder.withArgName("seconds").hasArg().isRequired(
125 true).withDescription("Fragment engine to employ: soot or asm").create("engine");
126
127 Options options = new Options();
128 options.addOption(in);
129 options.addOption(dm);
130 options.addOption(output);
131 options.addOption(timeout);
132 options.addOption(engine);
133 return options;
134 }
135
136
137 }