1 19 20 package ca.mcgill.sable.soot.launching; 21 22 23 import java.io.PrintStream ; 24 import java.util.*; 25 import java.lang.reflect.*; 26 27 import org.eclipse.swt.widgets.Display; 28 import soot.*; 29 import soot.toolkits.graph.interaction.*; 30 import ca.mcgill.sable.soot.interaction.*; 31 32 33 public class SootThread extends Thread { 34 35 private Display display; 36 private String mainClass; 37 private ArrayList cfgList; 38 private IInteractionListener listener; 39 private SootRunner parent; 40 41 44 public SootThread(Display display, String mainClass, SootRunner parent) { 45 super(); 46 setDisplay(display); 47 48 setMainClass(mainClass); 49 50 InteractionController controller = new InteractionController(); 51 controller.setDisplay(getDisplay()); 52 controller.setSootThread(this); 53 setListener(controller); 54 setParent(parent); 55 this.setName("soot thread"); 56 57 } 58 59 60 61 private String [] cmd; 62 private PrintStream sootOut; 63 64 65 public void run() { 66 final String [] cmdFinal = getCmd(); 67 final PrintStream sootOutFinal = getSootOut(); 68 try { 69 70 soot.G.v().reset(); 71 soot.G.v().out = sootOutFinal; 72 73 InteractionHandler.v().setInteractionListener(getListener()); 74 75 Class toRun = Class.forName(getMainClass()); 76 Method [] meths = toRun.getDeclaredMethods(); 77 Object [] args = new Object [1]; 78 args[0] = cmdFinal; 79 for (int i = 0; i < meths.length; i++){ 80 if (meths[i].getName().equals("main")){ 81 Class [] fields = meths[i].getParameterTypes(); 82 if (fields.length == 1){ 83 meths[i].invoke(toRun, args); 84 } 85 } 86 } 87 setCfgList(soot.Scene.v().getPkgList()); 88 getParent().setCfgList(getCfgList()); 89 90 } 91 catch (Exception e) { 92 System.out.println("Soot exception: "+e); 93 e.printStackTrace(sootOutFinal); 94 System.out.println(e.getCause()); 95 } 96 } 97 101 public String [] getCmd() { 102 return cmd; 103 } 104 105 109 public PrintStream getSootOut() { 110 return sootOut; 111 } 112 113 117 public void setCmd(String [] cmd) { 118 this.cmd = cmd; 119 } 120 121 125 public void setSootOut(PrintStream sootOut) { 126 this.sootOut = sootOut; 127 } 128 129 133 public Display getDisplay() { 134 return display; 135 } 136 137 141 public void setDisplay(Display display) { 142 this.display = display; 143 } 144 145 148 public String getMainClass() { 149 return mainClass; 150 } 151 152 155 public void setMainClass(String string) { 156 mainClass = string; 157 } 158 159 162 public ArrayList getCfgList() { 163 return cfgList; 164 } 165 166 169 public void setCfgList(ArrayList list) { 170 cfgList = list; 171 } 172 173 176 public IInteractionListener getListener() { 177 return listener; 178 } 179 180 183 public void setListener(IInteractionListener listener) { 184 this.listener = listener; 185 } 186 187 190 public SootRunner getParent() { 191 return parent; 192 } 193 194 197 public void setParent(SootRunner runner) { 198 parent = runner; 199 } 200 201 } 202 | Popular Tags |