1 19 20 26 27 package soot.jimple.toolkits.pointer.nativemethods; 28 29 import soot.*; 30 import soot.jimple.toolkits.pointer.representations.*; 31 import soot.jimple.toolkits.pointer.util.*; 32 33 public class JavaLangClassNative extends NativeMethodClass { 34 public JavaLangClassNative( NativeHelper helper ) { super(helper); } 35 36 41 public void simulateMethod(SootMethod method, 42 ReferenceVariable thisVar, 43 ReferenceVariable returnVar, 44 ReferenceVariable params[]){ 45 46 String subSignature = method.getSubSignature(); 47 48 if (subSignature.equals("java.lang.Class forName0(java.lang.String,boolean,java.lang.ClassLoader)")) { 49 java_lang_Class_forName0(method, thisVar, returnVar, params); 50 return; 51 52 } else if (subSignature.equals("java.lang.Object newInstance0()")) { 53 java_lang_Class_newInstance0(method, thisVar, returnVar, params); 54 return; 55 56 } else if (subSignature.equals("java.lang.String getName()")) { 57 java_lang_Class_getName(method, thisVar, returnVar, params); 58 return; 59 60 } else if (subSignature.equals("java.lang.ClassLoader getClassLoader0()")){ 61 java_lang_Class_getClassLoader0(method, thisVar, returnVar, params); 62 return; 63 64 } else if (subSignature.equals("java.lang.Class getSuperclass()")) { 65 java_lang_Class_getSuperclass(method, thisVar, returnVar, params); 66 return; 67 68 } else if (subSignature.equals("java.lang.Class[] getInterfaces()")){ 69 java_lang_Class_getInterfaces(method, thisVar, returnVar, params); 70 return; 71 72 } else if (subSignature.equals("java.lang.Class getComponentType()")){ 73 java_lang_Class_getComponentType(method, thisVar, returnVar, params); 74 return; 75 76 } else if (subSignature.equals("java.lang.Object[] getSigners()")){ 77 java_lang_Class_getSigners(method, thisVar, returnVar, params); 78 return; 79 80 } else if (subSignature.equals("void setSigners(java.lang.Object[])")) { 81 java_lang_Class_setSigners(method, thisVar, returnVar, params); 82 return; 83 84 } else if (subSignature.equals("java.lang.Class getDeclaringClass()")){ 85 java_lang_Class_getDeclaringClass(method, thisVar, returnVar, params); 86 return; 87 88 } else if (subSignature.equals("void setProtectionDomain0(java.security.ProtectionDomain)")){ 89 java_lang_Class_setProtectionDomain0(method, thisVar, returnVar, params); 90 return; 91 92 } else if (subSignature.equals("java.security.ProtectionDomain getProtectionDomain0()")) { 93 java_lang_Class_getProtectionDomain0(method, thisVar, returnVar, params); 94 return; 95 96 } else if (subSignature.equals("java.lang.Class getPrimitiveClass(java.lang.String)")) { 97 java_lang_Class_getPrimitiveClass(method, thisVar, returnVar, params); 98 return; 99 100 } else if (subSignature.equals("java.lang.reflect.Field[] getFields0(int)")){ 101 java_lang_Class_getFields0(method, thisVar, returnVar, params); 102 return; 103 104 } else if (subSignature.equals("java.lang.reflect.Method[] getMethods0(int)")){ 105 java_lang_Class_getMethods0(method, thisVar, returnVar, params); 106 return; 107 108 } else if (subSignature.equals("java.lang.reflect.Constructor[] getConstructors0(int)")) { 109 java_lang_Class_getConstructors0(method, thisVar, returnVar, params); 110 return; 111 112 } else if (subSignature.equals("java.lang.reflect.Field getField0(java.lang.String,int)")) { 113 java_lang_Class_getField0(method, thisVar, returnVar, params); 114 return; 115 116 } else if (subSignature.equals("java.lang.reflect.Method getMethod0(java.lang.String,java.lang.Class[],int)")) { 117 java_lang_Class_getMethod0(method, thisVar, returnVar, params); 118 return; 119 120 } else if (subSignature.equals("java.lang.reflect.Constructor getConstructor0(java.lang.Class[],int)")) { 121 java_lang_Class_getConstructor0(method, thisVar, returnVar, params); 122 return; 123 124 } else if (subSignature.equals("java.lang.Class[] getDeclaredClasses0()")){ 125 java_lang_Class_getDeclaredClasses0(method, thisVar, returnVar, params); 126 return; 127 128 } else { 129 defaultMethod(method, thisVar, returnVar, params); 130 return; 131 132 } 133 } 134 135 136 144 145 176 public void java_lang_Class_forName0(SootMethod method, 177 ReferenceVariable thisVar, 178 ReferenceVariable returnVar, 179 ReferenceVariable params[]){ 180 helper.assignObjectTo(returnVar, Environment.v().getClassObject()); 181 } 182 183 190 public void java_lang_Class_newInstance0(SootMethod method, 191 ReferenceVariable thisVar, 192 ReferenceVariable returnVar, 193 ReferenceVariable params[]){ 194 ReferenceVariable instanceVar = helper.newInstanceOf(thisVar); 195 helper.assign(returnVar, instanceVar); 196 } 197 198 203 public void java_lang_Class_getName(SootMethod method, 204 ReferenceVariable thisVar, 205 ReferenceVariable returnVar, 206 ReferenceVariable params[]) { 207 helper.assignObjectTo(returnVar, Environment.v().getStringObject()); 208 } 209 210 220 public 221 void java_lang_Class_getClassLoader0(SootMethod method, 222 ReferenceVariable thisVar, 223 ReferenceVariable returnVar, 224 ReferenceVariable params[]) { 225 helper.assignObjectTo(returnVar, Environment.v().getClassLoaderObject()); 226 } 227 228 233 public 234 void java_lang_Class_getSuperclass(SootMethod method, 235 ReferenceVariable thisVar, 236 ReferenceVariable returnVar, 237 ReferenceVariable params[]) { 238 helper.assignObjectTo(returnVar, Environment.v().getClassObject()); 239 } 240 241 247 public 248 void java_lang_Class_getInterfaces(SootMethod method, 249 ReferenceVariable thisVar, 250 ReferenceVariable returnVar, 251 ReferenceVariable params[]) { 252 253 helper.assignObjectTo(returnVar, Environment.v().getClassObject()); 254 } 255 256 263 public 264 void java_lang_Class_getComponentType(SootMethod method, 265 ReferenceVariable thisVar, 266 ReferenceVariable returnVar, 267 ReferenceVariable params[]) { 268 helper.assignObjectTo(returnVar, Environment.v().getClassObject()); 269 } 270 271 279 public 280 void java_lang_Class_setSigners(SootMethod method, 281 ReferenceVariable thisVar, 282 ReferenceVariable returnVar, 283 ReferenceVariable params[]) { 284 ReferenceVariable tempFld = 285 helper.tempField("<java.lang.Class signers>"); 286 helper.assign(tempFld, params[0]); 287 } 288 289 296 public 297 void java_lang_Class_getSigners(SootMethod method, 298 ReferenceVariable thisVar, 299 ReferenceVariable returnVar, 300 ReferenceVariable params[]) { 301 ReferenceVariable tempFld = 302 helper.tempField("<java.lang.Class signers>"); 303 helper.assign(returnVar, tempFld); 304 } 305 306 319 public 320 void java_lang_Class_getDeclaringClass(SootMethod method, 321 ReferenceVariable thisVar, 322 ReferenceVariable returnVar, 323 ReferenceVariable params[]) { 324 helper.assignObjectTo(returnVar, Environment.v().getClassObject()); 325 } 326 327 335 public 336 void java_lang_Class_setProtectionDomain0(SootMethod method, 337 ReferenceVariable thisVar, 338 ReferenceVariable returnVar, 339 ReferenceVariable params[]) { 340 ReferenceVariable protdmn = 341 helper.tempField("<java.lang.Class ProtDmn>"); 342 helper.assign(protdmn, params[0]); 343 } 344 345 348 public 349 void java_lang_Class_getProtectionDomain0(SootMethod method, 350 ReferenceVariable thisVar, 351 ReferenceVariable returnVar, 352 ReferenceVariable params[]) { 353 ReferenceVariable protdmn = 354 helper.tempField("<java.lang.Class ProtDmn>"); 355 helper.assign(returnVar, protdmn); 356 } 357 358 364 public 365 void java_lang_Class_getPrimitiveClass(SootMethod method, 366 ReferenceVariable thisVar, 367 ReferenceVariable returnVar, 368 ReferenceVariable params[]) { 369 helper.assignObjectTo(returnVar, Environment.v().getClassObject()); 370 } 371 372 379 public 380 void java_lang_Class_getFields0(SootMethod method, 381 ReferenceVariable thisVar, 382 ReferenceVariable returnVar, 383 ReferenceVariable params[]) { 384 helper.assignObjectTo(returnVar, Environment.v().getLeastArrayObject()); 385 } 386 387 396 public 397 void java_lang_Class_getMethods0(SootMethod method, 398 ReferenceVariable thisVar, 399 ReferenceVariable returnVar, 400 ReferenceVariable params[]) { 401 helper.assignObjectTo(returnVar, Environment.v().getLeastArrayObject()); 402 } 403 404 413 public 414 void java_lang_Class_getConstructors0(SootMethod method, 415 ReferenceVariable thisVar, 416 ReferenceVariable returnVar, 417 ReferenceVariable params[]) { 418 helper.assignObjectTo(returnVar, Environment.v().getLeastArrayObject()); 419 } 420 421 434 public 435 void java_lang_Class_getField0(SootMethod method, 436 ReferenceVariable thisVar, 437 ReferenceVariable returnVar, 438 ReferenceVariable params[]){ 439 helper.assignObjectTo(returnVar, Environment.v().getFieldObject()); 440 } 441 442 453 public 454 void java_lang_Class_getMethod0(SootMethod method, 455 ReferenceVariable thisVar, 456 ReferenceVariable returnVar, 457 ReferenceVariable params[]){ 458 helper.assignObjectTo(returnVar, Environment.v().getMethodObject()); 459 } 460 461 467 public 468 void java_lang_Class_getConstructor0(SootMethod method, 469 ReferenceVariable thisVar, 470 ReferenceVariable returnVar, 471 ReferenceVariable params[]){ 472 helper.assignObjectTo(returnVar, Environment.v().getConstructorObject()); 473 } 474 475 482 public 483 void java_lang_Class_getDeclaredClasses0(SootMethod method, 484 ReferenceVariable thisVar, 485 ReferenceVariable returnVar, 486 ReferenceVariable params[]) { 487 helper.assignObjectTo(returnVar, Environment.v().getLeastArrayObject()); 488 } 489 490 501 502 } 503 | Popular Tags |