import com.ibm.wala.classLoader.Language;
import com.ibm.wala.ipa.callgraph.*;
import com.ibm.wala.ipa.callgraph.impl.DefaultEntrypoint;
import com.ibm.wala.ipa.callgraph.impl.Util;
import com.ibm.wala.ipa.callgraph.propagation.PointerAnalysis;
import com.ibm.wala.ipa.cha.ClassHierarchy;
import com.ibm.wala.ipa.cha.ClassHierarchyFactory;
import com.ibm.wala.shrikeCT.InvalidClassFileException;
import com.ibm.wala.types.Descriptor;
import com.ibm.wala.types.MethodReference;
import com.ibm.wala.types.TypeName;
import com.ibm.wala.types.TypeReference;
import com.ibm.wala.util.CancelException;
import com.ibm.wala.util.WalaException;
import com.ibm.wala.util.config.AnalysisScopeReader;
import com.ibm.wala.util.debug.Assertions;
import com.ibm.wala.util.io.FileProvider;
import com.ibm.wala.util.strings.Atom;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Iterator;
import top.anemone.walaDemo.callGraph.CallGraphTestUtil;
@SuppressWarnings("Duplicates")
public class CFGWithoutDependency {
private static final Logger LOG = LoggerFactory.getLogger(CFGWithoutDependency.class);
public static void main(String[] args) throws CancelException, WalaException, IOException, InvalidClassFileException {
String appJar="example_jar/java-sec-code-1.0.0.jar.original.jar";
LOG.info("Create an analysis scope representing the appJar as a J2SE application");
AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar,
(new FileProvider()).getFile(CallGraphTestUtil.REGRESSION_EXCLUSIONS));
ClassHierarchy cha = ClassHierarchyFactory.makeWithPhantom(scope);
LOG.info("Set entrypoints");
String[] srcCls = {"Lorg/joychou/security/LoginSuccessHandler"};
String[] srcFuncs= {"onAuthenticationSuccess"};
String[] srcRefs = {"((Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Lorg/springframework/security/core/Authentication;)V"};
Iterable<Entrypoint> entrypoints = ()-> new Iterator<Entrypoint>() {
private int index = 0;
@Override
public void remove() { Assertions.UNREACHABLE(); }
@Override
public boolean hasNext() { return index < srcCls.length; }
@Override
public Entrypoint next() {
TypeReference T =
TypeReference.findOrCreate(scope.getApplicationLoader(),
TypeName.string2TypeName(srcCls[index]));
MethodReference mainRef =
MethodReference.findOrCreate(T,
Atom.findOrCreateAsciiAtom(srcFuncs[index]),
Descriptor.findOrCreateUTF8(srcRefs[index]));
index++;
return new DefaultEntrypoint(mainRef, cha);
}
};
AnalysisOptions options = new AnalysisOptions(scope, entrypoints);
LOG.info("Build the call graph");
com.ibm.wala.ipa.callgraph.CallGraphBuilder cgb = Util.makeVanillaZeroOneCFABuilder(Language.JAVA, options, new AnalysisCacheImpl(), cha, scope, null, null);
CallGraph cg = cgb.makeCallGraph(options, null);
PointerAnalysis pa = cgb.getPointerAnalysis();
// ...
}
}
Exception in thread "main" java.lang.IllegalStateException: Could not create a entrypoint callsites: 1. [Moderate] class com.ibm.wala.ipa.cha.ClassHierarchy$ClassExclusion : <Primordial,Ljava/applet/Applet$AccessibleApplet> null
2. [Moderate] class com.ibm.wala.ipa.cha.ClassHierarchy$ClassExclusion : <Primordial,Ljavax/accessibility/AccessibleContext> null
3. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljava/beans/PropertyChangeListener
4. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljava/rmi/Remote
5. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljava/text/AttributedCharacterIterator
6. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljava/text/CharacterIterator
7. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/Accessible
8. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/AccessibleAction
9. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/AccessibleComponent
10. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/AccessibleEditableText
11. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/AccessibleExtendedComponent
12. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/AccessibleExtendedTable
13. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/AccessibleExtendedText
14. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/AccessibleHypertext
15. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/AccessibleIcon
16. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/AccessibleKeyBinding
17. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/AccessibleSelection
18. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/AccessibleTable
19. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/AccessibleTableModelChange
20. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/AccessibleText
21. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/accessibility/AccessibleValue
22. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/crypto/SecretKey
23. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/servlet/Filter
24. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Ljavax/sound/sampled/LineListener
25. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lorg/springframework/security/web/access/AccessDeniedHandler
26. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lorg/springframework/security/web/authentication/AuthenticationFailureHandler
27. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lorg/springframework/security/web/authentication/AuthenticationSuccessHandler
28. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lorg/springframework/security/web/util/matcher/RequestMatcher
29. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$AWTEventAccessor
30. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$CheckboxMenuItemAccessor
31. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$ClientPropertyKeyAccessor
32. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$ComponentAccessor
33. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$ContainerAccessor
34. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$CursorAccessor
35. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$DefaultKeyboardFocusManagerAccessor
36. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$EventQueueAccessor
37. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$FileDialogAccessor
38. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$FrameAccessor
39. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$InputEventAccessor
40. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$InvocationEventAccessor
41. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$KeyEventAccessor
42. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$KeyboardFocusManagerAccessor
43. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$MenuAccessor
44. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$MenuBarAccessor
45. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$MenuComponentAccessor
46. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$MenuItemAccessor
47. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$MouseEventAccessor
48. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$PopupMenuAccessor
49. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$ScrollPaneAdjustableAccessor
50. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$SequencedEventAccessor
51. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$SystemTrayAccessor
52. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$ToolkitAccessor
53. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$TrayIconAccessor
54. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/AWTAccessor$WindowAccessor
55. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/DisplayChangedListener
56. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/ModalExclude
57. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/RequestFocusController
58. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/SubRegionShowable
59. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/awt/image/SunWritableRaster$DataStealer
60. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/java2d/DisposerRecord
61. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/java2d/cmm/ProfileActivator
62. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/JavaIOAccess
63. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/JavaIOFileDescriptorAccess
64. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/JavaLangAccess
65. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/JavaLangRefAccess
66. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/JavaNetAccess
67. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/JavaNetHttpCookieAccess
68. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/JavaNioAccess
69. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/JavaNioAccess$BufferPool
70. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/JavaOISAccess
71. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/JavaSecurityAccess
72. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/JavaSecurityProtectionDomainAccess
73. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/JavaSecurityProtectionDomainAccess$ProtectionDomainCache
74. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/JavaUtilJarAccess
75. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/JavaUtilZipFileAccess
76. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/ObjectInputFilter$FilterInfo
77. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/misc/SignalHandler
78. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/net/spi/nameservice/NameService
79. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/nio/ch/DirectBuffer
80. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/nio/ch/Interruptible
81. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/reflect/LangReflectAccess
82. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/security/krb5/JavaxSecurityAuthKerberosAccess
83. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/swing/FilePane$FileChooserUIAccessor
84. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/swing/SwingAccessor$JTextComponentAccessor
85. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/swing/SwingAccessor$RepaintManagerAccessor
86. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/swing/text/html/FrameEditorPaneTag
87. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter
88. [SEVERE] class com.ibm.wala.classLoader.BytecodeClass$ClassNotFoundWarning : Lsun/util/logging/LoggingProxy
89. [SEVERE] class com.ibm.wala.ipa.callgraph.impl.AbstractRootMethod$AllocationFailure : <Application,Ljavax/servlet/http/HttpServletRequest>
90. [SEVERE] class com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder$EntrypointResolutionWarning : < Application, Lorg/joychou/security/LoginSuccessHandler, onAuthenticationSuccess(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Lorg/springframework/security/core/Authentication;)V >([<Application,Lorg/joychou/security/LoginSuccessHandler>],[<Application,Ljavax/servlet/http/HttpServletRequest>],[<Application,Ljavax/servlet/http/HttpServletResponse>],[<Application,Lorg/springframework/security/core/Authentication>])
at com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder.makeCallGraph(PropagationCallGraphBuilder.java:241)
at top.anemone.walaDemo.CFGWithoutDependency.main(CFGWithoutDependency.java:85)
It looks like the class(Lorg/springframework/security/core/Authentication) is not found, but I have used the ClassHierarchyFactory.makeWithPhantom() method to construct the ClassHierarchy. How to deal with it?
PS. The wala version I am using is 1.5.4, I think it should be the latest release version.