arkanalyzer 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.en.md +88 -0
- package/README.md +98 -0
- package/docs/HowToCreatePR.md +55 -0
- package/docs/HowToHandleIssues.md +155 -0
- package/docs/quickstart.pdf +0 -0
- package/lib/Config.d.ts +26 -0
- package/lib/Config.d.ts.map +1 -0
- package/lib/Config.js +128 -0
- package/lib/Scene.d.ts +125 -0
- package/lib/Scene.d.ts.map +1 -0
- package/lib/Scene.js +762 -0
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +28 -0
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -0
- package/lib/callgraph/algorithm/AbstractAnalysis.js +137 -0
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts +11 -0
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -0
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +71 -0
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts +16 -0
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -0
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +147 -0
- package/lib/callgraph/common/Statistics.d.ts +58 -0
- package/lib/callgraph/common/Statistics.d.ts.map +1 -0
- package/lib/callgraph/common/Statistics.js +203 -0
- package/lib/callgraph/model/BaseGraph.d.ts +62 -0
- package/lib/callgraph/model/BaseGraph.d.ts.map +1 -0
- package/lib/callgraph/model/BaseGraph.js +158 -0
- package/lib/callgraph/model/CallGraph.d.ts +94 -0
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -0
- package/lib/callgraph/model/CallGraph.js +339 -0
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +16 -0
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -0
- package/lib/callgraph/model/builder/CallGraphBuilder.js +106 -0
- package/lib/callgraph/pointerAnalysis/Context.d.ts +38 -0
- package/lib/callgraph/pointerAnalysis/Context.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/Context.js +156 -0
- package/lib/callgraph/pointerAnalysis/DummyCallCreator.d.ts +23 -0
- package/lib/callgraph/pointerAnalysis/DummyCallCreator.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/DummyCallCreator.js +104 -0
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +209 -0
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/Pag.js +774 -0
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +88 -0
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +821 -0
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +64 -0
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +502 -0
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +9 -0
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +57 -0
- package/lib/callgraph/pointerAnalysis/PtsDS.d.ts +58 -0
- package/lib/callgraph/pointerAnalysis/PtsDS.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/PtsDS.js +234 -0
- package/lib/core/base/Constant.d.ts +17 -0
- package/lib/core/base/Constant.d.ts.map +1 -0
- package/lib/core/base/Constant.js +53 -0
- package/lib/core/base/Decorator.d.ts +15 -0
- package/lib/core/base/Decorator.d.ts.map +1 -0
- package/lib/core/base/Decorator.js +43 -0
- package/lib/core/base/DefUseChain.d.ts +9 -0
- package/lib/core/base/DefUseChain.d.ts.map +1 -0
- package/lib/core/base/DefUseChain.js +25 -0
- package/lib/core/base/Expr.d.ts +219 -0
- package/lib/core/base/Expr.d.ts.map +1 -0
- package/lib/core/base/Expr.js +896 -0
- package/lib/core/base/Local.d.ts +40 -0
- package/lib/core/base/Local.d.ts.map +1 -0
- package/lib/core/base/Local.js +101 -0
- package/lib/core/base/Position.d.ts +39 -0
- package/lib/core/base/Position.d.ts.map +1 -0
- package/lib/core/base/Position.js +86 -0
- package/lib/core/base/Ref.d.ts +75 -0
- package/lib/core/base/Ref.d.ts.map +1 -0
- package/lib/core/base/Ref.js +286 -0
- package/lib/core/base/Stmt.d.ts +109 -0
- package/lib/core/base/Stmt.d.ts.map +1 -0
- package/lib/core/base/Stmt.js +374 -0
- package/lib/core/base/Type.d.ts +220 -0
- package/lib/core/base/Type.d.ts.map +1 -0
- package/lib/core/base/Type.js +477 -0
- package/lib/core/base/Value.d.ts +11 -0
- package/lib/core/base/Value.d.ts.map +1 -0
- package/lib/core/base/Value.js +16 -0
- package/lib/core/common/ArkIRTransformer.d.ts +101 -0
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -0
- package/lib/core/common/ArkIRTransformer.js +1674 -0
- package/lib/core/common/BodyBuilder.d.ts +10 -0
- package/lib/core/common/BodyBuilder.d.ts.map +1 -0
- package/lib/core/common/BodyBuilder.js +34 -0
- package/lib/core/common/Builtin.d.ts +35 -0
- package/lib/core/common/Builtin.d.ts.map +1 -0
- package/lib/core/common/Builtin.js +78 -0
- package/lib/core/common/CfgBuilder.d.ts +136 -0
- package/lib/core/common/CfgBuilder.d.ts.map +1 -0
- package/lib/core/common/CfgBuilder.js +1241 -0
- package/lib/core/common/Const.d.ts +15 -0
- package/lib/core/common/Const.d.ts.map +1 -0
- package/lib/core/common/Const.js +34 -0
- package/lib/core/common/DummyMainCreater.d.ts +48 -0
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -0
- package/lib/core/common/DummyMainCreater.js +433 -0
- package/lib/core/common/EtsConst.d.ts +65 -0
- package/lib/core/common/EtsConst.d.ts.map +1 -0
- package/lib/core/common/EtsConst.js +918 -0
- package/lib/core/common/ExprUseReplacer.d.ts +18 -0
- package/lib/core/common/ExprUseReplacer.d.ts.map +1 -0
- package/lib/core/common/ExprUseReplacer.js +88 -0
- package/lib/core/common/IRUtils.d.ts +7 -0
- package/lib/core/common/IRUtils.d.ts.map +1 -0
- package/lib/core/common/IRUtils.js +39 -0
- package/lib/core/common/ModelUtils.d.ts +61 -0
- package/lib/core/common/ModelUtils.d.ts.map +1 -0
- package/lib/core/common/ModelUtils.js +628 -0
- package/lib/core/common/RefUseReplacer.d.ts +14 -0
- package/lib/core/common/RefUseReplacer.d.ts.map +1 -0
- package/lib/core/common/RefUseReplacer.js +50 -0
- package/lib/core/common/StmtUseReplacer.d.ts +16 -0
- package/lib/core/common/StmtUseReplacer.d.ts.map +1 -0
- package/lib/core/common/StmtUseReplacer.js +88 -0
- package/lib/core/common/TSConst.d.ts +11 -0
- package/lib/core/common/TSConst.d.ts.map +1 -0
- package/lib/core/common/TSConst.js +28 -0
- package/lib/core/common/TypeInference.d.ts +44 -0
- package/lib/core/common/TypeInference.d.ts.map +1 -0
- package/lib/core/common/TypeInference.js +519 -0
- package/lib/core/common/ValueUtil.d.ts +17 -0
- package/lib/core/common/ValueUtil.d.ts.map +1 -0
- package/lib/core/common/ValueUtil.js +71 -0
- package/lib/core/common/VisibleValue.d.ts +37 -0
- package/lib/core/common/VisibleValue.d.ts.map +1 -0
- package/lib/core/common/VisibleValue.js +212 -0
- package/lib/core/dataflow/DataflowProblem.d.ts +21 -0
- package/lib/core/dataflow/DataflowProblem.d.ts.map +1 -0
- package/lib/core/dataflow/DataflowProblem.js +33 -0
- package/lib/core/dataflow/DataflowResult.d.ts +8 -0
- package/lib/core/dataflow/DataflowResult.d.ts.map +1 -0
- package/lib/core/dataflow/DataflowResult.js +26 -0
- package/lib/core/dataflow/DataflowSolver.d.ts +40 -0
- package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -0
- package/lib/core/dataflow/DataflowSolver.js +318 -0
- package/lib/core/dataflow/Edge.d.ts +16 -0
- package/lib/core/dataflow/Edge.d.ts.map +1 -0
- package/lib/core/dataflow/Edge.js +40 -0
- package/lib/core/dataflow/Fact.d.ts +7 -0
- package/lib/core/dataflow/Fact.d.ts.map +1 -0
- package/lib/core/dataflow/Fact.js +24 -0
- package/lib/core/dataflow/TiantAnalysis.d.ts +37 -0
- package/lib/core/dataflow/TiantAnalysis.d.ts.map +1 -0
- package/lib/core/dataflow/TiantAnalysis.js +326 -0
- package/lib/core/dataflow/UndefinedVariable.d.ts +32 -0
- package/lib/core/dataflow/UndefinedVariable.d.ts.map +1 -0
- package/lib/core/dataflow/UndefinedVariable.js +235 -0
- package/lib/core/dataflow/Util.d.ts +8 -0
- package/lib/core/dataflow/Util.d.ts.map +1 -0
- package/lib/core/dataflow/Util.js +137 -0
- package/lib/core/graph/BasicBlock.d.ts +26 -0
- package/lib/core/graph/BasicBlock.d.ts.map +1 -0
- package/lib/core/graph/BasicBlock.js +92 -0
- package/lib/core/graph/Cfg.d.ts +29 -0
- package/lib/core/graph/Cfg.d.ts.map +1 -0
- package/lib/core/graph/Cfg.js +154 -0
- package/lib/core/graph/DominanceFinder.d.ts +16 -0
- package/lib/core/graph/DominanceFinder.d.ts.map +1 -0
- package/lib/core/graph/DominanceFinder.js +121 -0
- package/lib/core/graph/DominanceTree.d.ts +13 -0
- package/lib/core/graph/DominanceTree.d.ts.map +1 -0
- package/lib/core/graph/DominanceTree.js +70 -0
- package/lib/core/graph/ViewTree.d.ts +115 -0
- package/lib/core/graph/ViewTree.d.ts.map +1 -0
- package/lib/core/graph/ViewTree.js +16 -0
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts +204 -0
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -0
- package/lib/core/graph/builder/ViewTreeBuilder.js +1046 -0
- package/lib/core/model/ArkBody.d.ts +22 -0
- package/lib/core/model/ArkBody.d.ts.map +1 -0
- package/lib/core/model/ArkBody.js +63 -0
- package/lib/core/model/ArkClass.d.ts +110 -0
- package/lib/core/model/ArkClass.d.ts.map +1 -0
- package/lib/core/model/ArkClass.js +315 -0
- package/lib/core/model/ArkExport.d.ts +70 -0
- package/lib/core/model/ArkExport.d.ts.map +1 -0
- package/lib/core/model/ArkExport.js +143 -0
- package/lib/core/model/ArkField.d.ts +60 -0
- package/lib/core/model/ArkField.d.ts.map +1 -0
- package/lib/core/model/ArkField.js +157 -0
- package/lib/core/model/ArkFile.d.ts +62 -0
- package/lib/core/model/ArkFile.d.ts.map +1 -0
- package/lib/core/model/ArkFile.js +160 -0
- package/lib/core/model/ArkImport.d.ts +43 -0
- package/lib/core/model/ArkImport.d.ts.map +1 -0
- package/lib/core/model/ArkImport.js +109 -0
- package/lib/core/model/ArkMethod.d.ts +76 -0
- package/lib/core/model/ArkMethod.d.ts.map +1 -0
- package/lib/core/model/ArkMethod.js +235 -0
- package/lib/core/model/ArkNamespace.d.ts +65 -0
- package/lib/core/model/ArkNamespace.d.ts.map +1 -0
- package/lib/core/model/ArkNamespace.js +182 -0
- package/lib/core/model/ArkSignature.d.ts +98 -0
- package/lib/core/model/ArkSignature.d.ts.map +1 -0
- package/lib/core/model/ArkSignature.js +281 -0
- package/lib/core/model/builder/ArkClassBuilder.d.ts +13 -0
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -0
- package/lib/core/model/builder/ArkClassBuilder.js +422 -0
- package/lib/core/model/builder/ArkExportBuilder.d.ts +25 -0
- package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -0
- package/lib/core/model/builder/ArkExportBuilder.js +207 -0
- package/lib/core/model/builder/ArkFieldBuilder.d.ts +9 -0
- package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -0
- package/lib/core/model/builder/ArkFieldBuilder.js +189 -0
- package/lib/core/model/builder/ArkFileBuilder.d.ts +10 -0
- package/lib/core/model/builder/ArkFileBuilder.d.ts.map +1 -0
- package/lib/core/model/builder/ArkFileBuilder.js +164 -0
- package/lib/core/model/builder/ArkImportBuilder.d.ts +4 -0
- package/lib/core/model/builder/ArkImportBuilder.d.ts.map +1 -0
- package/lib/core/model/builder/ArkImportBuilder.js +125 -0
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +60 -0
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -0
- package/lib/core/model/builder/ArkMethodBuilder.js +419 -0
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +5 -0
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -0
- package/lib/core/model/builder/ArkNamespaceBuilder.js +171 -0
- package/lib/core/model/builder/ArkSignatureBuilder.d.ts +9 -0
- package/lib/core/model/builder/ArkSignatureBuilder.d.ts.map +1 -0
- package/lib/core/model/builder/ArkSignatureBuilder.js +40 -0
- package/lib/core/model/builder/builderUtils.d.ts +18 -0
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -0
- package/lib/core/model/builder/builderUtils.js +449 -0
- package/lib/index.d.ts +77 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +190 -0
- package/lib/save/ArkStream.d.ts +24 -0
- package/lib/save/ArkStream.d.ts.map +1 -0
- package/lib/save/ArkStream.js +83 -0
- package/lib/save/DotPrinter.d.ts +48 -0
- package/lib/save/DotPrinter.d.ts.map +1 -0
- package/lib/save/DotPrinter.js +229 -0
- package/lib/save/GraphPrinter.d.ts +17 -0
- package/lib/save/GraphPrinter.d.ts.map +1 -0
- package/lib/save/GraphPrinter.js +135 -0
- package/lib/save/JsonPrinter.d.ts +28 -0
- package/lib/save/JsonPrinter.d.ts.map +1 -0
- package/lib/save/JsonPrinter.js +511 -0
- package/lib/save/Printer.d.ts +17 -0
- package/lib/save/Printer.d.ts.map +1 -0
- package/lib/save/Printer.js +27 -0
- package/lib/save/PrinterBuilder.d.ts +38 -0
- package/lib/save/PrinterBuilder.d.ts.map +1 -0
- package/lib/save/PrinterBuilder.js +102 -0
- package/lib/save/serializeArkIR.d.ts +3 -0
- package/lib/save/serializeArkIR.d.ts.map +1 -0
- package/lib/save/serializeArkIR.js +166 -0
- package/lib/save/source/SourceBase.d.ts +32 -0
- package/lib/save/source/SourceBase.d.ts.map +1 -0
- package/lib/save/source/SourceBase.js +93 -0
- package/lib/save/source/SourceBody.d.ts +60 -0
- package/lib/save/source/SourceBody.d.ts.map +1 -0
- package/lib/save/source/SourceBody.js +292 -0
- package/lib/save/source/SourceClass.d.ts +27 -0
- package/lib/save/source/SourceClass.d.ts.map +1 -0
- package/lib/save/source/SourceClass.js +202 -0
- package/lib/save/source/SourceField.d.ts +15 -0
- package/lib/save/source/SourceField.d.ts.map +1 -0
- package/lib/save/source/SourceField.js +68 -0
- package/lib/save/source/SourceFilePrinter.d.ts +14 -0
- package/lib/save/source/SourceFilePrinter.d.ts.map +1 -0
- package/lib/save/source/SourceFilePrinter.js +73 -0
- package/lib/save/source/SourceMethod.d.ts +24 -0
- package/lib/save/source/SourceMethod.d.ts.map +1 -0
- package/lib/save/source/SourceMethod.js +170 -0
- package/lib/save/source/SourceModule.d.ts +18 -0
- package/lib/save/source/SourceModule.d.ts.map +1 -0
- package/lib/save/source/SourceModule.js +120 -0
- package/lib/save/source/SourceNamespace.d.ts +13 -0
- package/lib/save/source/SourceNamespace.d.ts.map +1 -0
- package/lib/save/source/SourceNamespace.js +80 -0
- package/lib/save/source/SourceStmt.d.ts +172 -0
- package/lib/save/source/SourceStmt.d.ts.map +1 -0
- package/lib/save/source/SourceStmt.js +757 -0
- package/lib/save/source/SourceTransformer.d.ts +37 -0
- package/lib/save/source/SourceTransformer.d.ts.map +1 -0
- package/lib/save/source/SourceTransformer.js +338 -0
- package/lib/save/source/SourceUtils.d.ts +25 -0
- package/lib/save/source/SourceUtils.d.ts.map +1 -0
- package/lib/save/source/SourceUtils.js +201 -0
- package/lib/transformer/FunctionTransformer.d.ts +3 -0
- package/lib/transformer/FunctionTransformer.d.ts.map +1 -0
- package/lib/transformer/FunctionTransformer.js +17 -0
- package/lib/transformer/SceneTransformer.d.ts +3 -0
- package/lib/transformer/SceneTransformer.d.ts.map +1 -0
- package/lib/transformer/SceneTransformer.js +17 -0
- package/lib/transformer/StaticSingleAssignmentFormer.d.ts +13 -0
- package/lib/transformer/StaticSingleAssignmentFormer.d.ts.map +1 -0
- package/lib/transformer/StaticSingleAssignmentFormer.js +259 -0
- package/lib/transformer/Transformer.d.ts +7 -0
- package/lib/transformer/Transformer.d.ts.map +1 -0
- package/lib/transformer/Transformer.js +22 -0
- package/lib/utils/CfgStructualAnalysis.d.ts +93 -0
- package/lib/utils/CfgStructualAnalysis.d.ts.map +1 -0
- package/lib/utils/CfgStructualAnalysis.js +955 -0
- package/lib/utils/FileUtils.d.ts +18 -0
- package/lib/utils/FileUtils.d.ts.map +1 -0
- package/lib/utils/FileUtils.js +131 -0
- package/lib/utils/callGraphUtils.d.ts +31 -0
- package/lib/utils/callGraphUtils.d.ts.map +1 -0
- package/lib/utils/callGraphUtils.js +208 -0
- package/lib/utils/entryMethodUtils.d.ts +16 -0
- package/lib/utils/entryMethodUtils.d.ts.map +1 -0
- package/lib/utils/entryMethodUtils.js +139 -0
- package/lib/utils/getAllFiles.d.ts +10 -0
- package/lib/utils/getAllFiles.d.ts.map +1 -0
- package/lib/utils/getAllFiles.js +91 -0
- package/lib/utils/json5parser.d.ts +7 -0
- package/lib/utils/json5parser.d.ts.map +1 -0
- package/lib/utils/json5parser.js +146 -0
- package/lib/utils/logger.d.ts +19 -0
- package/lib/utils/logger.d.ts.map +1 -0
- package/lib/utils/logger.js +90 -0
- package/lib/utils/pathTransfer.d.ts +2 -0
- package/lib/utils/pathTransfer.d.ts.map +1 -0
- package/lib/utils/pathTransfer.js +25 -0
- package/package.json +29 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2024 Huawei Device Co., Ltd.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.CGStat = exports.PAGStat = exports.PTAStat = void 0;
|
|
18
|
+
const Stmt_1 = require("../../core/base/Stmt");
|
|
19
|
+
const Type_1 = require("../../core/base/Type");
|
|
20
|
+
const CallGraph_1 = require("../model/CallGraph");
|
|
21
|
+
class StatTraits {
|
|
22
|
+
getStat() {
|
|
23
|
+
return '';
|
|
24
|
+
}
|
|
25
|
+
printStat() {
|
|
26
|
+
console.log(this.getStat());
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
class PTAStat {
|
|
30
|
+
constructor(pta) {
|
|
31
|
+
this.numProcessedAddr = 0;
|
|
32
|
+
this.numProcessedCopy = 0;
|
|
33
|
+
this.numProcessedLoad = 0;
|
|
34
|
+
this.numProcessedWrite = 0;
|
|
35
|
+
this.numProcessedThis = 0;
|
|
36
|
+
this.numRealWrite = 0;
|
|
37
|
+
this.numRealLoad = 0;
|
|
38
|
+
this.numUnhandledFun = 0;
|
|
39
|
+
this.numTotalValuesInHandedFun = 0;
|
|
40
|
+
this.numTotalHandledValue = 0;
|
|
41
|
+
// Original type is UnknownType but inferred by PTA
|
|
42
|
+
this.numInferedUnknownValue = 0;
|
|
43
|
+
// Original type is not UnknownType and inferred with different type by PTA
|
|
44
|
+
this.numInferedDiffTypeValue = 0;
|
|
45
|
+
// Total number of values in the functions visited by PTA
|
|
46
|
+
this.totalValuesInVisitedFunc = 0;
|
|
47
|
+
// Original type is UnkonwnType and not inferred by PTA as well
|
|
48
|
+
this.numNotInferedUnknownValue = 0;
|
|
49
|
+
this.numUnhandledFunc = 0;
|
|
50
|
+
this.iterTimes = 0;
|
|
51
|
+
this.TotalTime = 0;
|
|
52
|
+
this.startTime = 0;
|
|
53
|
+
this.endTime = 0;
|
|
54
|
+
this.rssUsed = 0;
|
|
55
|
+
this.heapUsed = 0;
|
|
56
|
+
this.pta = pta;
|
|
57
|
+
}
|
|
58
|
+
startStat() {
|
|
59
|
+
this.startTime = this.getNow();
|
|
60
|
+
this.startMemUsage = process.memoryUsage();
|
|
61
|
+
}
|
|
62
|
+
endStat() {
|
|
63
|
+
this.endTime = this.getNow();
|
|
64
|
+
this.endMemUsage = process.memoryUsage();
|
|
65
|
+
this.TotalTime = (this.endTime - this.startTime) / 1000;
|
|
66
|
+
this.rssUsed = Number(this.endMemUsage.rss - this.startMemUsage.rss) / Number(1024 * 1024);
|
|
67
|
+
this.heapUsed = Number(this.endMemUsage.heapTotal - this.startMemUsage.heapTotal) / Number(1024 * 1024);
|
|
68
|
+
this.getInferedStat();
|
|
69
|
+
this.getUnhandledFuncStat();
|
|
70
|
+
}
|
|
71
|
+
getNow() {
|
|
72
|
+
return new Date().getTime();
|
|
73
|
+
}
|
|
74
|
+
getInferedStat() {
|
|
75
|
+
let inferred = Array.from(this.pta.getTypeDiffMap().keys());
|
|
76
|
+
let visited = new Set();
|
|
77
|
+
let cg = this.pta.getCallGraph();
|
|
78
|
+
this.pta.getHandledFuncs().forEach(funcID => {
|
|
79
|
+
var _a;
|
|
80
|
+
let f = cg.getArkMethodByFuncID(funcID);
|
|
81
|
+
(_a = f === null || f === void 0 ? void 0 : f.getCfg()) === null || _a === void 0 ? void 0 : _a.getStmts().forEach(s => {
|
|
82
|
+
if (!(s instanceof Stmt_1.ArkAssignStmt)) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
let lop = s.getLeftOp();
|
|
86
|
+
if (visited.has(lop)) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
visited.add(lop);
|
|
90
|
+
if (inferred.includes(lop)) {
|
|
91
|
+
if (lop.getType() instanceof Type_1.UnknownType) {
|
|
92
|
+
this.numInferedUnknownValue++;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
this.numInferedDiffTypeValue++;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
if (lop.getType() instanceof Type_1.UnknownType) {
|
|
100
|
+
this.numNotInferedUnknownValue++;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
this.totalValuesInVisitedFunc++;
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
getUnhandledFuncStat() {
|
|
108
|
+
let cg = this.pta.getCallGraph();
|
|
109
|
+
this.pta.getUnhandledFuncs().forEach(funcID => {
|
|
110
|
+
let cgNode = cg.getNode(funcID);
|
|
111
|
+
if (cgNode.getIsSdkMethod()) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
let f = cg.getArkMethodByFuncID(funcID);
|
|
115
|
+
if (f) {
|
|
116
|
+
this.numUnhandledFun++;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
getStat() {
|
|
121
|
+
// TODO: get PAG stat and CG stat
|
|
122
|
+
let output;
|
|
123
|
+
output = '==== Pointer analysis Statictics: ====\n';
|
|
124
|
+
output = output + `Processed address\t${this.numProcessedAddr}\n`;
|
|
125
|
+
output = output + `Processed copy\t\t${this.numProcessedCopy}\n`;
|
|
126
|
+
output = output + `Processed load\t\t${this.numProcessedLoad}\n`;
|
|
127
|
+
output = output + `Processed write\t\t${this.numProcessedWrite}\n`;
|
|
128
|
+
output = output + `Real write\t\t${this.numRealWrite}\n`;
|
|
129
|
+
output = output + `Real load\t\t${this.numRealLoad}\n`;
|
|
130
|
+
output = output + `Processed This\t\t${this.numProcessedThis}\n\n`;
|
|
131
|
+
output = output + `Unhandled function\t${this.numUnhandledFun}\n`;
|
|
132
|
+
output = output + `Total values in visited function\t${this.totalValuesInVisitedFunc}\n`;
|
|
133
|
+
output = output + `Infered Value unknown+different type\t${this.numInferedUnknownValue}+${this.numInferedDiffTypeValue}\n\n`;
|
|
134
|
+
output = output + `Total Time\t\t${this.TotalTime} S\n`;
|
|
135
|
+
output = output + `Total iterator Times\t${this.iterTimes}\n`;
|
|
136
|
+
output = output + `RSS used\t\t${this.rssUsed.toFixed(3)} Mb\n`;
|
|
137
|
+
output = output + `Heap used\t\t${this.heapUsed.toFixed(3)} Mb\n`;
|
|
138
|
+
return output;
|
|
139
|
+
}
|
|
140
|
+
printStat() {
|
|
141
|
+
console.log(this.getStat());
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
exports.PTAStat = PTAStat;
|
|
145
|
+
class PAGStat {
|
|
146
|
+
constructor() {
|
|
147
|
+
this.numDynamicCall = 0;
|
|
148
|
+
this.numTotalFunction = 0;
|
|
149
|
+
this.numTotalNode = 0;
|
|
150
|
+
}
|
|
151
|
+
getStat() {
|
|
152
|
+
let output;
|
|
153
|
+
output = '==== PAG Statictics: ====\n';
|
|
154
|
+
output = output + `Dynamic call\t\t${this.numDynamicCall}\n`;
|
|
155
|
+
output = output + `Total function handled\t${this.numTotalFunction}\n`;
|
|
156
|
+
output = output + `Total PAG Nodes\t\t${this.numTotalNode}\n`;
|
|
157
|
+
return output;
|
|
158
|
+
}
|
|
159
|
+
printStat() {
|
|
160
|
+
console.log(this.getStat());
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
exports.PAGStat = PAGStat;
|
|
164
|
+
class CGStat extends StatTraits {
|
|
165
|
+
constructor() {
|
|
166
|
+
super(...arguments);
|
|
167
|
+
//real, vitual, intrinsic, constructor
|
|
168
|
+
this.numTotalNode = 0;
|
|
169
|
+
this.numReal = 0;
|
|
170
|
+
this.numVirtual = 0;
|
|
171
|
+
this.numIntrinsic = 0;
|
|
172
|
+
this.numConstructor = 0;
|
|
173
|
+
}
|
|
174
|
+
addNodeStat(kind) {
|
|
175
|
+
switch (kind) {
|
|
176
|
+
case CallGraph_1.CallGraphNodeKind.real:
|
|
177
|
+
this.numReal++;
|
|
178
|
+
break;
|
|
179
|
+
case CallGraph_1.CallGraphNodeKind.vitual:
|
|
180
|
+
this.numVirtual++;
|
|
181
|
+
break;
|
|
182
|
+
case CallGraph_1.CallGraphNodeKind.constructor:
|
|
183
|
+
this.numConstructor++;
|
|
184
|
+
break;
|
|
185
|
+
case CallGraph_1.CallGraphNodeKind.intrinsic:
|
|
186
|
+
this.numIntrinsic++;
|
|
187
|
+
break;
|
|
188
|
+
default:
|
|
189
|
+
}
|
|
190
|
+
this.numTotalNode++;
|
|
191
|
+
}
|
|
192
|
+
getStat() {
|
|
193
|
+
let output;
|
|
194
|
+
output = '==== CG Statictics: ====\n';
|
|
195
|
+
output = output + `Real function\t\t${this.numReal}\n`;
|
|
196
|
+
output = output + `Intrinsic function\t${this.numIntrinsic}\n`;
|
|
197
|
+
output = output + `Constructor function\t${this.numConstructor}\n`;
|
|
198
|
+
output = output + `Blank function\t\t${this.numVirtual}\n`;
|
|
199
|
+
output = output + `Total\t\t\t${this.numTotalNode}\n`;
|
|
200
|
+
return output;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
exports.CGStat = CGStat;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export type NodeID = number;
|
|
2
|
+
export type Kind = number;
|
|
3
|
+
export interface GraphTraits {
|
|
4
|
+
nodesItor(): IterableIterator<BaseNode>;
|
|
5
|
+
getGraphName(): string;
|
|
6
|
+
getNode(id: NodeID): BaseNode | undefined;
|
|
7
|
+
}
|
|
8
|
+
export declare abstract class BaseEdge {
|
|
9
|
+
private src;
|
|
10
|
+
private dst;
|
|
11
|
+
private kind;
|
|
12
|
+
constructor(s: BaseNode, d: BaseNode, k: Kind);
|
|
13
|
+
getSrcID(): NodeID;
|
|
14
|
+
getDstID(): NodeID;
|
|
15
|
+
getSrcNode(): BaseNode;
|
|
16
|
+
getDstNode(): BaseNode;
|
|
17
|
+
getKind(): Kind;
|
|
18
|
+
getEndPoints(): {
|
|
19
|
+
src: NodeID;
|
|
20
|
+
dst: NodeID;
|
|
21
|
+
};
|
|
22
|
+
getDotAttr(): string;
|
|
23
|
+
}
|
|
24
|
+
export declare abstract class BaseNode {
|
|
25
|
+
private id;
|
|
26
|
+
private kind;
|
|
27
|
+
private inEdges;
|
|
28
|
+
private outEdges;
|
|
29
|
+
constructor(id: NodeID, k: Kind);
|
|
30
|
+
getID(): NodeID;
|
|
31
|
+
getKind(): Kind;
|
|
32
|
+
hasIncomingEdges(): boolean;
|
|
33
|
+
hasOutgoingEdges(): boolean;
|
|
34
|
+
hasIncomingEdge(e: BaseEdge): boolean;
|
|
35
|
+
hasOutgoingEdge(e: BaseEdge): boolean;
|
|
36
|
+
addIncomingEdge(e: BaseEdge): void;
|
|
37
|
+
addOutgoingEdge(e: BaseEdge): void;
|
|
38
|
+
removeIncomingEdge(e: BaseEdge): boolean;
|
|
39
|
+
removeOutgoingEdge(e: BaseEdge): boolean;
|
|
40
|
+
getIncomingEdge(): Set<BaseEdge>;
|
|
41
|
+
getOutgoingEdges(): Set<BaseEdge>;
|
|
42
|
+
getDotAttr(): string;
|
|
43
|
+
getDotLabel(): string;
|
|
44
|
+
}
|
|
45
|
+
export declare class BaseGraph implements GraphTraits {
|
|
46
|
+
protected edgeNum: number;
|
|
47
|
+
protected nodeNum: number;
|
|
48
|
+
protected idToNodeMap: Map<NodeID, BaseNode>;
|
|
49
|
+
protected edgeMarkSet: Set<string>;
|
|
50
|
+
constructor();
|
|
51
|
+
getNodeNum(): number;
|
|
52
|
+
nodesItor(): IterableIterator<BaseNode>;
|
|
53
|
+
addNode(n: BaseNode): void;
|
|
54
|
+
getNode(id: NodeID): BaseNode | undefined;
|
|
55
|
+
hasNode(id: NodeID): boolean;
|
|
56
|
+
removeNode(id: NodeID): boolean;
|
|
57
|
+
hasEdge(src: BaseNode, dst: BaseNode): boolean;
|
|
58
|
+
ifEdgeExisting(edge: BaseEdge): boolean;
|
|
59
|
+
getNodesIter(): IterableIterator<BaseNode>;
|
|
60
|
+
getGraphName(): string;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=BaseGraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/BaseGraph.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAC5B,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC;AAE1B,MAAM,WAAW,WAAW;IACxB,SAAS,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACxC,YAAY,IAAI,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC7C;AACD,8BAAsB,QAAQ;IAC1B,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,IAAI,CAAO;gBAEP,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI;IAMtC,QAAQ,IAAI,MAAM;IAIlB,QAAQ,IAAI,MAAM;IAIlB,UAAU,IAAI,QAAQ;IAItB,UAAU,IAAI,QAAQ;IAItB,OAAO,IAAI,IAAI;IAIf,YAAY,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAO5C,UAAU,IAAI,MAAM;CAG9B;AAED,8BAAsB,QAAQ;IAC1B,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAA4B;gBAEhC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI;IAKxB,KAAK,IAAI,MAAM;IAIf,OAAO,IAAI,IAAI;IAIf,gBAAgB,IAAI,OAAO;IAI3B,gBAAgB,IAAI,OAAO;IAI3B,eAAe,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIrC,eAAe,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIrC,eAAe,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI;IAIlC,eAAe,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI;IAIlC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIxC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO;IAIxC,eAAe,IAAI,GAAG,CAAC,QAAQ,CAAC;IAIhC,gBAAgB,IAAI,GAAG,CAAC,QAAQ,CAAC;IAIjC,UAAU,IAAI,MAAM;IAIpB,WAAW,IAAI,MAAM;CAI/B;AAED,qBAAa,SAAU,YAAW,WAAW;IACzC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAK;IAC9B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAK;IAC9B,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7C,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;;IAO5B,UAAU,IAAI,MAAM;IAIpB,SAAS,IAAI,gBAAgB,CAAC,QAAQ,CAAC;IAIvC,OAAO,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI;IAK1B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAQzC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI5B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAQ/B,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO;IAU9C,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO;IAUvC,YAAY,IAAI,gBAAgB,CAAC,QAAQ,CAAC;IAI1C,YAAY,IAAI,MAAM;CAGhC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2024 Huawei Device Co., Ltd.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.BaseGraph = exports.BaseNode = exports.BaseEdge = void 0;
|
|
18
|
+
class BaseEdge {
|
|
19
|
+
constructor(s, d, k) {
|
|
20
|
+
this.src = s;
|
|
21
|
+
this.dst = d;
|
|
22
|
+
this.kind = k;
|
|
23
|
+
}
|
|
24
|
+
getSrcID() {
|
|
25
|
+
return this.src.getID();
|
|
26
|
+
}
|
|
27
|
+
getDstID() {
|
|
28
|
+
return this.dst.getID();
|
|
29
|
+
}
|
|
30
|
+
getSrcNode() {
|
|
31
|
+
return this.src;
|
|
32
|
+
}
|
|
33
|
+
getDstNode() {
|
|
34
|
+
return this.dst;
|
|
35
|
+
}
|
|
36
|
+
getKind() {
|
|
37
|
+
return this.kind;
|
|
38
|
+
}
|
|
39
|
+
getEndPoints() {
|
|
40
|
+
return {
|
|
41
|
+
src: this.src.getID(),
|
|
42
|
+
dst: this.dst.getID()
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
getDotAttr() {
|
|
46
|
+
return '';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.BaseEdge = BaseEdge;
|
|
50
|
+
class BaseNode {
|
|
51
|
+
constructor(id, k) {
|
|
52
|
+
this.inEdges = new Set();
|
|
53
|
+
this.outEdges = new Set();
|
|
54
|
+
this.id = id;
|
|
55
|
+
this.kind = k;
|
|
56
|
+
}
|
|
57
|
+
getID() {
|
|
58
|
+
return this.id;
|
|
59
|
+
}
|
|
60
|
+
getKind() {
|
|
61
|
+
return this.kind;
|
|
62
|
+
}
|
|
63
|
+
hasIncomingEdges() {
|
|
64
|
+
return (this.inEdges.size != 0);
|
|
65
|
+
}
|
|
66
|
+
hasOutgoingEdges() {
|
|
67
|
+
return (this.outEdges.size == 0);
|
|
68
|
+
}
|
|
69
|
+
hasIncomingEdge(e) {
|
|
70
|
+
return this.inEdges.has(e);
|
|
71
|
+
}
|
|
72
|
+
hasOutgoingEdge(e) {
|
|
73
|
+
return this.outEdges.has(e);
|
|
74
|
+
}
|
|
75
|
+
addIncomingEdge(e) {
|
|
76
|
+
this.inEdges.add(e);
|
|
77
|
+
}
|
|
78
|
+
addOutgoingEdge(e) {
|
|
79
|
+
this.outEdges.add(e);
|
|
80
|
+
}
|
|
81
|
+
removeIncomingEdge(e) {
|
|
82
|
+
return this.inEdges.delete(e);
|
|
83
|
+
}
|
|
84
|
+
removeOutgoingEdge(e) {
|
|
85
|
+
return this.outEdges.delete(e);
|
|
86
|
+
}
|
|
87
|
+
getIncomingEdge() {
|
|
88
|
+
return this.inEdges;
|
|
89
|
+
}
|
|
90
|
+
getOutgoingEdges() {
|
|
91
|
+
return this.outEdges;
|
|
92
|
+
}
|
|
93
|
+
getDotAttr() {
|
|
94
|
+
return 'shape=box';
|
|
95
|
+
}
|
|
96
|
+
getDotLabel() {
|
|
97
|
+
return '';
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.BaseNode = BaseNode;
|
|
101
|
+
class BaseGraph {
|
|
102
|
+
constructor() {
|
|
103
|
+
this.edgeNum = 0;
|
|
104
|
+
this.nodeNum = 0;
|
|
105
|
+
this.idToNodeMap = new Map();
|
|
106
|
+
this.edgeMarkSet = new Set();
|
|
107
|
+
}
|
|
108
|
+
getNodeNum() {
|
|
109
|
+
return this.nodeNum;
|
|
110
|
+
}
|
|
111
|
+
nodesItor() {
|
|
112
|
+
return this.idToNodeMap.values();
|
|
113
|
+
}
|
|
114
|
+
addNode(n) {
|
|
115
|
+
this.idToNodeMap.set(n.getID(), n);
|
|
116
|
+
this.nodeNum++;
|
|
117
|
+
}
|
|
118
|
+
getNode(id) {
|
|
119
|
+
if (!this.idToNodeMap.has(id)) {
|
|
120
|
+
throw new Error(`Can find Node # ${id}`);
|
|
121
|
+
}
|
|
122
|
+
return this.idToNodeMap.get(id);
|
|
123
|
+
}
|
|
124
|
+
hasNode(id) {
|
|
125
|
+
return this.idToNodeMap.has(id);
|
|
126
|
+
}
|
|
127
|
+
removeNode(id) {
|
|
128
|
+
if (this.idToNodeMap.delete(id)) {
|
|
129
|
+
this.nodeNum--;
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
hasEdge(src, dst) {
|
|
135
|
+
for (let e of src.getOutgoingEdges()) {
|
|
136
|
+
if (e.getDstNode() === dst) {
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
ifEdgeExisting(edge) {
|
|
143
|
+
let edgeMark = `${edge.getSrcID()}-${edge.getDstID()}:${edge.getKind()}`;
|
|
144
|
+
if (this.edgeMarkSet.has(edgeMark)) {
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
this.edgeMarkSet.add(edgeMark);
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
getNodesIter() {
|
|
151
|
+
return this.idToNodeMap.values();
|
|
152
|
+
}
|
|
153
|
+
getGraphName() {
|
|
154
|
+
return '';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.BaseGraph = BaseGraph;
|
|
158
|
+
;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { MethodSignature } from '../../core/model/ArkSignature';
|
|
2
|
+
import { Stmt } from '../../core/base/Stmt';
|
|
3
|
+
import { Value } from '../../core/base/Value';
|
|
4
|
+
import { Scene } from '../../Scene';
|
|
5
|
+
import { ArkMethod } from '../../core/model/ArkMethod';
|
|
6
|
+
import { BaseEdge, BaseNode, BaseGraph, NodeID } from './BaseGraph';
|
|
7
|
+
import { ContextID } from '../pointerAnalysis/Context';
|
|
8
|
+
export type Method = MethodSignature;
|
|
9
|
+
export type CallSiteID = number;
|
|
10
|
+
export type FuncID = number;
|
|
11
|
+
export declare enum CallGraphNodeKind {
|
|
12
|
+
real = 0,
|
|
13
|
+
vitual = 1,
|
|
14
|
+
intrinsic = 2,
|
|
15
|
+
constructor = 3
|
|
16
|
+
}
|
|
17
|
+
export declare class CallSite {
|
|
18
|
+
callStmt: Stmt;
|
|
19
|
+
args: Value[] | undefined;
|
|
20
|
+
calleeFuncID: FuncID;
|
|
21
|
+
callerFuncID: FuncID;
|
|
22
|
+
constructor(s: Stmt, a: Value[] | undefined, ce: FuncID, cr: FuncID);
|
|
23
|
+
}
|
|
24
|
+
export declare class DynCallSite {
|
|
25
|
+
callerFuncID: FuncID;
|
|
26
|
+
callStmt: Stmt;
|
|
27
|
+
args: Value[] | undefined;
|
|
28
|
+
protentialCalleeFuncID: FuncID | undefined;
|
|
29
|
+
constructor(caller: FuncID, s: Stmt, a: Value[] | undefined, ptcCallee: FuncID | undefined);
|
|
30
|
+
}
|
|
31
|
+
export declare class CSCallSite extends CallSite {
|
|
32
|
+
cid: ContextID;
|
|
33
|
+
constructor(id: ContextID, cs: CallSite);
|
|
34
|
+
}
|
|
35
|
+
export declare class CallGraphEdge extends BaseEdge {
|
|
36
|
+
private directCalls;
|
|
37
|
+
private specialCalls;
|
|
38
|
+
private indirectCalls;
|
|
39
|
+
constructor(src: CallGraphNode, dst: CallGraphNode);
|
|
40
|
+
addDirectCallSite(stmt: Stmt): void;
|
|
41
|
+
addSpecialCallSite(stmt: Stmt): void;
|
|
42
|
+
addInDirectCallSite(stmt: Stmt): void;
|
|
43
|
+
getDotAttr(): string;
|
|
44
|
+
}
|
|
45
|
+
export declare class CallGraphNode extends BaseNode {
|
|
46
|
+
private method;
|
|
47
|
+
private isSdkMethod;
|
|
48
|
+
private isBlank;
|
|
49
|
+
constructor(id: number, m: Method, k?: CallGraphNodeKind);
|
|
50
|
+
getMethod(): Method;
|
|
51
|
+
setSdkMethod(v: boolean): void;
|
|
52
|
+
getIsSdkMethod(): boolean;
|
|
53
|
+
get isBlankMethod(): boolean;
|
|
54
|
+
set isBlankMethod(is: boolean);
|
|
55
|
+
getDotAttr(): string;
|
|
56
|
+
getDotLabel(): string;
|
|
57
|
+
}
|
|
58
|
+
export declare class CallGraph extends BaseGraph {
|
|
59
|
+
private scene;
|
|
60
|
+
private idToCallSiteMap;
|
|
61
|
+
private callSiteToIdMap;
|
|
62
|
+
private stmtToCallSitemap;
|
|
63
|
+
private stmtToDynCallSitemap;
|
|
64
|
+
private methodToCGNodeMap;
|
|
65
|
+
private callPairToEdgeMap;
|
|
66
|
+
private callSiteNum;
|
|
67
|
+
private entries;
|
|
68
|
+
private cgStat;
|
|
69
|
+
private dummyMainMethodID;
|
|
70
|
+
constructor(s: Scene);
|
|
71
|
+
private getCallPairString;
|
|
72
|
+
getCallEdgeByPair(srcID: NodeID, dstID: NodeID): CallGraphEdge | undefined;
|
|
73
|
+
addCallGraphNode(method: Method, kind?: CallGraphNodeKind): CallGraphNode;
|
|
74
|
+
removeCallGraphNode(nodeID: NodeID): void;
|
|
75
|
+
getCallGraphNodeByMethod(method: Method): CallGraphNode;
|
|
76
|
+
addDirectOrSpecialCallEdge(caller: Method, callee: Method, callStmt: Stmt, isDirectCall?: boolean): void;
|
|
77
|
+
removeCallGraphEdge(nodeID: NodeID): void;
|
|
78
|
+
addDynamicCallInfo(callStmt: Stmt, caller: Method, protentialCallee?: Method): void;
|
|
79
|
+
addDynamicCallEdge(callerID: NodeID, calleeID: NodeID, callStmt: Stmt): void;
|
|
80
|
+
getDynCallsiteByStmt(stmt: Stmt): DynCallSite | undefined;
|
|
81
|
+
addStmtToCallSiteMap(stmt: Stmt, cs: CallSite): boolean;
|
|
82
|
+
getCallSiteByStmt(stmt: Stmt): CallSite | undefined;
|
|
83
|
+
getDynEdges(): Map<Method, Set<Method>>;
|
|
84
|
+
getMethodByFuncID(id: FuncID): Method | null;
|
|
85
|
+
getArkMethodByFuncID(id: FuncID): ArkMethod | null;
|
|
86
|
+
getEntries(): FuncID[];
|
|
87
|
+
setEntries(n: NodeID[]): void;
|
|
88
|
+
dump(name: string, entry?: FuncID): void;
|
|
89
|
+
detectReachable(fromID: FuncID, dstID: FuncID): boolean;
|
|
90
|
+
printStat(): void;
|
|
91
|
+
setDummyMainFuncID(dummyMainMethodID: number): void;
|
|
92
|
+
getDummyMainFuncID(): FuncID | undefined;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=CallGraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"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"}
|