qilin.core.natives.NativeMethodDriver Maven / Gradle / Ivy
/* Qilin - a Java Pointer Analysis Framework
* Copyright (C) 2021-2030 Qilin developers
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3.0 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Lesser Public License for more details.
*
* You should have received a copy of the GNU General Lesser Public
* License along with this program. If not, see
* .
*/
package qilin.core.natives;
import qilin.core.PTAScene;
import sootup.core.model.SootMethod;
import sootup.core.views.View;
public class NativeMethodDriver {
protected final PTAScene ptaScene;
protected final View view;
public NativeMethodDriver(PTAScene ptaScene) {
this.ptaScene = ptaScene;
this.view = ptaScene.getView();
}
public void buildNative(SootMethod method) {
if (!ptaScene.nativeBuilt.add(method)) {
return;
}
String sig = method.getSignature().toString();
switch (sig) {
case "":
case "":
new JavaLangObjectCloneNative(view, method).simulate();
break;
case "":
new JavaLangSystemSetIn0Native(view, method).simulate();
break;
case "":
new JavaLangSystemSetOut0Native(view, method).simulate();
break;
case "":
new JavaLangSystemSetErr0Native(view, method).simulate();
break;
// case "":
// new JavaLangSystemArraycopyNative(method).simulate();
// break;
case "":
case "":
new JavaIoFileSystemGetFileSystemNative(view, method).simulate();
break;
case "":
case "":
new JavaIoFileSystemListNative(view, method).simulate();
break;
case "":
new JavaLangRefFinalizerInvokeFinalizeMethodNative(view, method).simulate();
break;
case "":
case "":
new JavaSecurityAccessControllerDoPrivilegedNative(view, method).simulate();
break;
case "":
case "":
new JavaSecurityAccessControllerDoPrivileged_ExceptionNative(view, method).simulate();
break;
case "":
new JavaLangThreadCurrentThread(view, method, ptaScene.getFieldCurrentThread()).simulate();
break;
case "":
new JavaLangThreadStart0Native(view, method, ptaScene.getFieldCurrentThread()).simulate();
break;
case "":
// new JavaLangReflectArrayGet(method).simulate();
break;
case "":
// new JavaLangReflectArraySet(method).simulate();
break;
default:
// System.out.println("Warning: unhandled native method " + sig);
break;
}
}
}