arkanalyzer 1.0.6 → 1.0.8
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/config/arkanalyzer.json +8 -0
- package/docs/IR2ts-stmt.md +81 -0
- package/docs/IR2ts.md +82 -0
- package/lib/Config.d.ts +29 -1
- package/lib/Config.d.ts.map +1 -1
- package/lib/Config.js +44 -11
- package/lib/Scene.d.ts +152 -9
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +233 -66
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +2 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.js +14 -7
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +2 -4
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +2 -3
- package/lib/callgraph/common/Statistics.js +1 -1
- package/lib/callgraph/model/BaseGraph.js +2 -2
- package/lib/callgraph/model/CallGraph.d.ts +3 -2
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +23 -14
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +2 -2
- package/lib/callgraph/model/builder/CallGraphBuilder.js +3 -3
- package/lib/callgraph/pointerAnalysis/Context.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Context.js +0 -1
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +36 -9
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +130 -37
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +34 -5
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +479 -126
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +6 -0
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +107 -45
- package/lib/callgraph/pointerAnalysis/PtsDS.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PtsDS.js +0 -2
- package/lib/core/base/Constant.d.ts +37 -5
- package/lib/core/base/Constant.d.ts.map +1 -1
- package/lib/core/base/Constant.js +58 -8
- package/lib/core/base/Expr.d.ts +98 -13
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +295 -127
- package/lib/core/base/Local.d.ts +70 -5
- package/lib/core/base/Local.d.ts.map +1 -1
- package/lib/core/base/Local.js +77 -4
- package/lib/core/base/Ref.d.ts +79 -5
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +143 -38
- package/lib/core/base/Stmt.d.ts +126 -12
- package/lib/core/base/Stmt.d.ts.map +1 -1
- package/lib/core/base/Stmt.js +135 -28
- package/lib/core/base/Type.d.ts +11 -2
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +47 -42
- package/lib/core/base/Value.d.ts +24 -2
- package/lib/core/base/Value.d.ts.map +1 -1
- package/lib/core/common/ArkError.d.ts +15 -0
- package/lib/core/common/ArkError.d.ts.map +1 -0
- package/lib/core/common/ArkError.js +28 -0
- package/lib/core/common/ArkIRTransformer.d.ts +12 -5
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +90 -45
- package/lib/core/common/BodyBuilder.d.ts +2 -0
- package/lib/core/common/BodyBuilder.d.ts.map +1 -1
- package/lib/core/common/BodyBuilder.js +5 -2
- package/lib/core/common/Builtin.js +1 -1
- package/lib/core/common/CfgBuilder.d.ts +12 -7
- package/lib/core/common/CfgBuilder.d.ts.map +1 -1
- package/lib/core/common/CfgBuilder.js +336 -140
- package/lib/core/common/Const.d.ts +15 -10
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +18 -11
- package/lib/core/common/DummyMainCreater.d.ts +5 -4
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +43 -28
- package/lib/core/common/EtsConst.d.ts +1 -0
- package/lib/core/common/EtsConst.d.ts.map +1 -1
- package/lib/core/common/EtsConst.js +2 -1
- package/lib/core/common/ExprUseReplacer.js +8 -8
- package/lib/core/common/IRUtils.d.ts +7 -0
- package/lib/core/common/IRUtils.d.ts.map +1 -1
- package/lib/core/common/IRUtils.js +34 -2
- package/lib/core/common/ModelUtils.d.ts +1 -0
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +39 -36
- package/lib/core/common/RefUseReplacer.js +3 -3
- package/lib/core/common/StmtUseReplacer.js +4 -4
- package/lib/core/common/TSConst.d.ts +10 -3
- package/lib/core/common/TSConst.d.ts.map +1 -1
- package/lib/core/common/TSConst.js +11 -4
- package/lib/core/common/TypeInference.d.ts +8 -2
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +222 -90
- package/lib/core/common/ValueUtil.d.ts +0 -4
- package/lib/core/common/ValueUtil.d.ts.map +1 -1
- package/lib/core/common/ValueUtil.js +10 -27
- package/lib/core/common/VisibleValue.js +1 -1
- package/lib/core/dataflow/DataflowProblem.d.ts +1 -0
- package/lib/core/dataflow/DataflowProblem.d.ts.map +1 -1
- package/lib/core/dataflow/DataflowProblem.js +4 -4
- package/lib/core/dataflow/DataflowSolver.d.ts +20 -16
- package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -1
- package/lib/core/dataflow/DataflowSolver.js +67 -78
- package/lib/core/dataflow/TiantAnalysis.d.ts +1 -0
- package/lib/core/dataflow/TiantAnalysis.d.ts.map +1 -1
- package/lib/core/dataflow/TiantAnalysis.js +42 -28
- package/lib/core/dataflow/UndefinedVariable.d.ts +15 -1
- package/lib/core/dataflow/UndefinedVariable.d.ts.map +1 -1
- package/lib/core/dataflow/UndefinedVariable.js +122 -76
- package/lib/core/dataflow/Util.d.ts +5 -1
- package/lib/core/dataflow/Util.d.ts.map +1 -1
- package/lib/core/dataflow/Util.js +43 -22
- package/lib/core/graph/BasicBlock.d.ts +72 -0
- package/lib/core/graph/BasicBlock.d.ts.map +1 -1
- package/lib/core/graph/BasicBlock.js +165 -3
- package/lib/core/graph/Cfg.d.ts +30 -1
- package/lib/core/graph/Cfg.d.ts.map +1 -1
- package/lib/core/graph/Cfg.js +131 -11
- package/lib/core/graph/DominanceFinder.js +7 -7
- package/lib/core/graph/DominanceTree.js +4 -4
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +6 -5
- package/lib/core/model/ArkBaseModel.d.ts +59 -0
- package/lib/core/model/ArkBaseModel.d.ts.map +1 -0
- package/lib/core/model/ArkBaseModel.js +271 -0
- package/lib/core/model/ArkBody.d.ts +3 -9
- package/lib/core/model/ArkBody.d.ts.map +1 -1
- package/lib/core/model/ArkBody.js +3 -14
- package/lib/core/model/ArkClass.d.ts +107 -13
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +152 -54
- package/lib/core/model/ArkExport.d.ts +8 -7
- package/lib/core/model/ArkExport.d.ts.map +1 -1
- package/lib/core/model/ArkExport.js +16 -18
- package/lib/core/model/ArkField.d.ts +16 -13
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +18 -62
- package/lib/core/model/ArkFile.d.ts +42 -0
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +58 -0
- package/lib/core/model/ArkImport.d.ts +9 -7
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +11 -12
- package/lib/core/model/ArkMetadata.d.ts +20 -0
- package/lib/core/model/ArkMetadata.d.ts.map +1 -0
- package/lib/core/model/ArkMetadata.js +44 -0
- package/lib/core/model/ArkMethod.d.ts +195 -17
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +363 -46
- package/lib/core/model/ArkNamespace.d.ts +6 -8
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +16 -20
- package/lib/core/model/ArkSignature.d.ts +41 -0
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +76 -19
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +60 -49
- package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkExportBuilder.js +12 -6
- package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFieldBuilder.js +13 -9
- package/lib/core/model/builder/ArkFileBuilder.js +1 -3
- package/lib/core/model/builder/ArkImportBuilder.d.ts +2 -1
- package/lib/core/model/builder/ArkImportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkImportBuilder.js +16 -13
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +3 -1
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +105 -45
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkNamespaceBuilder.js +4 -5
- package/lib/core/model/builder/builderUtils.d.ts +2 -1
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +63 -43
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +4 -3
- package/lib/save/ArkStream.js +1 -1
- package/lib/save/DotPrinter.d.ts.map +1 -1
- package/lib/save/DotPrinter.js +1 -15
- package/lib/save/GraphPrinter.d.ts.map +1 -1
- package/lib/save/GraphPrinter.js +4 -2
- package/lib/save/JsonPrinter.js +5 -5
- package/lib/save/ViewTreePrinter.d.ts +16 -0
- package/lib/save/ViewTreePrinter.d.ts.map +1 -0
- package/lib/save/ViewTreePrinter.js +130 -0
- package/lib/save/source/SourceBase.d.ts +2 -2
- package/lib/save/source/SourceBase.d.ts.map +1 -1
- package/lib/save/source/SourceBase.js +6 -13
- package/lib/save/source/SourceBody.d.ts.map +1 -1
- package/lib/save/source/SourceBody.js +27 -14
- package/lib/save/source/SourceClass.d.ts.map +1 -1
- package/lib/save/source/SourceClass.js +12 -8
- package/lib/save/source/SourceField.d.ts.map +1 -1
- package/lib/save/source/SourceField.js +6 -2
- package/lib/save/source/SourceMethod.d.ts.map +1 -1
- package/lib/save/source/SourceMethod.js +10 -3
- package/lib/save/source/SourceModule.d.ts.map +1 -1
- package/lib/save/source/SourceModule.js +16 -10
- package/lib/save/source/SourceNamespace.d.ts.map +1 -1
- package/lib/save/source/SourceNamespace.js +4 -0
- package/lib/save/source/SourceStmt.d.ts +1 -1
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +37 -25
- package/lib/save/source/SourceTransformer.d.ts +6 -0
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +82 -51
- package/lib/save/source/SourceUtils.d.ts.map +1 -1
- package/lib/save/source/SourceUtils.js +12 -11
- package/lib/transformer/StaticSingleAssignmentFormer.js +3 -3
- package/lib/utils/CfgStructualAnalysis.d.ts +1 -0
- package/lib/utils/CfgStructualAnalysis.d.ts.map +1 -1
- package/lib/utils/CfgStructualAnalysis.js +103 -72
- package/lib/utils/callGraphUtils.d.ts.map +1 -1
- package/lib/utils/callGraphUtils.js +7 -10
- package/lib/utils/crypto_utils.d.ts +6 -0
- package/lib/utils/crypto_utils.d.ts.map +1 -0
- package/lib/utils/crypto_utils.js +57 -0
- package/lib/utils/entryMethodUtils.d.ts.map +1 -1
- package/lib/utils/entryMethodUtils.js +27 -26
- package/lib/utils/getAllFiles.d.ts +1 -1
- package/lib/utils/getAllFiles.d.ts.map +1 -1
- package/lib/utils/getAllFiles.js +4 -5
- package/lib/utils/logger.js +2 -2
- package/package.json +3 -2
|
@@ -37,7 +37,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
37
37
|
return result;
|
|
38
38
|
};
|
|
39
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.FuncPag = exports.Pag = exports.PagGlobalThisNode = exports.PagFuncNode = exports.PagParamNode = exports.PagNewArrayExprNode = exports.PagNewExprNode = exports.PagArrayNode = exports.PagThisRefNode = exports.PagStaticFieldNode = exports.PagInstanceFieldNode = exports.PagLocalNode = exports.PagNode = exports.PagNodeKind = exports.ThisPagEdge = exports.WritePagEdge = exports.LoadPagEdge = exports.CopyPagEdge = exports.AddrPagEdge = exports.PagEdge = exports.
|
|
40
|
+
exports.InterFuncPag = exports.FuncPag = exports.Pag = exports.PagGlobalThisNode = exports.PagFuncNode = exports.PagParamNode = exports.PagNewArrayExprNode = exports.PagNewExprNode = exports.PagArrayNode = exports.PagThisRefNode = exports.PagStaticFieldNode = exports.PagInstanceFieldNode = exports.PagLocalNode = exports.PagNode = exports.PagNodeKind = exports.ThisPagEdge = exports.WritePagEdge = exports.LoadPagEdge = exports.CopyPagEdge = exports.AddrPagEdge = exports.PagEdge = exports.StorageLinkEdgeType = exports.StorageType = exports.PagEdgeKind = void 0;
|
|
41
41
|
const BaseGraph_1 = require("../model/BaseGraph");
|
|
42
42
|
const Stmt_1 = require("../../core/base/Stmt");
|
|
43
43
|
const Expr_1 = require("../../core/base/Expr");
|
|
@@ -48,6 +48,8 @@ const PrinterBuilder_1 = require("../../save/PrinterBuilder");
|
|
|
48
48
|
const Constant_1 = require("../../core/base/Constant");
|
|
49
49
|
const Type_1 = require("../../core/base/Type");
|
|
50
50
|
const logger_1 = __importStar(require("../../utils/logger"));
|
|
51
|
+
const TSConst_1 = require("../../core/common/TSConst");
|
|
52
|
+
const ArkExport_1 = require("../../core/model/ArkExport");
|
|
51
53
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'PTA');
|
|
52
54
|
/*
|
|
53
55
|
* Implementation of pointer-to assignment graph for pointer analysis
|
|
@@ -61,22 +63,22 @@ var PagEdgeKind;
|
|
|
61
63
|
PagEdgeKind[PagEdgeKind["Write"] = 3] = "Write";
|
|
62
64
|
PagEdgeKind[PagEdgeKind["This"] = 4] = "This";
|
|
63
65
|
PagEdgeKind[PagEdgeKind["Unknown"] = 5] = "Unknown";
|
|
64
|
-
|
|
66
|
+
PagEdgeKind[PagEdgeKind["InterProceduralCopy"] = 6] = "InterProceduralCopy";
|
|
67
|
+
})(PagEdgeKind = exports.PagEdgeKind || (exports.PagEdgeKind = {}));
|
|
65
68
|
;
|
|
66
69
|
var StorageType;
|
|
67
70
|
(function (StorageType) {
|
|
68
71
|
StorageType[StorageType["APP_STORAGE"] = 0] = "APP_STORAGE";
|
|
69
72
|
StorageType[StorageType["LOCAL_STORAGE"] = 1] = "LOCAL_STORAGE";
|
|
70
73
|
StorageType[StorageType["Undefined"] = 2] = "Undefined";
|
|
71
|
-
})(StorageType
|
|
74
|
+
})(StorageType = exports.StorageType || (exports.StorageType = {}));
|
|
72
75
|
;
|
|
73
76
|
var StorageLinkEdgeType;
|
|
74
77
|
(function (StorageLinkEdgeType) {
|
|
75
78
|
StorageLinkEdgeType[StorageLinkEdgeType["Property2Local"] = 0] = "Property2Local";
|
|
76
79
|
StorageLinkEdgeType[StorageLinkEdgeType["Local2Property"] = 1] = "Local2Property";
|
|
77
80
|
StorageLinkEdgeType[StorageLinkEdgeType["TwoWay"] = 2] = "TwoWay";
|
|
78
|
-
})(StorageLinkEdgeType
|
|
79
|
-
exports.GLOBAL_THIS = 'globaThis';
|
|
81
|
+
})(StorageLinkEdgeType = exports.StorageLinkEdgeType || (exports.StorageLinkEdgeType = {}));
|
|
80
82
|
class PagEdge extends BaseGraph_1.BaseEdge {
|
|
81
83
|
constructor(n, d, k, s) {
|
|
82
84
|
super(n, d, k);
|
|
@@ -89,7 +91,7 @@ class PagEdge extends BaseGraph_1.BaseEdge {
|
|
|
89
91
|
case PagEdgeKind.Address:
|
|
90
92
|
return "color=green";
|
|
91
93
|
case PagEdgeKind.Copy:
|
|
92
|
-
if (((_a = this.stmt) === null || _a === void 0 ? void 0 : _a.getInvokeExpr())
|
|
94
|
+
if (((_a = this.stmt) === null || _a === void 0 ? void 0 : _a.getInvokeExpr()) !== undefined || this.stmt instanceof Stmt_1.ArkReturnStmt) {
|
|
93
95
|
return "color=black,style=dotted";
|
|
94
96
|
}
|
|
95
97
|
return "color=black";
|
|
@@ -99,6 +101,8 @@ class PagEdge extends BaseGraph_1.BaseEdge {
|
|
|
99
101
|
return "color=blue";
|
|
100
102
|
case PagEdgeKind.This:
|
|
101
103
|
return "color=orange";
|
|
104
|
+
case PagEdgeKind.InterProceduralCopy:
|
|
105
|
+
return "color=purple,style=dashed";
|
|
102
106
|
default:
|
|
103
107
|
return "color=black";
|
|
104
108
|
}
|
|
@@ -149,7 +153,8 @@ var PagNodeKind;
|
|
|
149
153
|
PagNodeKind[PagNodeKind["ThisRef"] = 4] = "ThisRef";
|
|
150
154
|
PagNodeKind[PagNodeKind["Function"] = 5] = "Function";
|
|
151
155
|
PagNodeKind[PagNodeKind["GlobalThis"] = 6] = "GlobalThis";
|
|
152
|
-
|
|
156
|
+
PagNodeKind[PagNodeKind["ExportInfo"] = 7] = "ExportInfo";
|
|
157
|
+
})(PagNodeKind = exports.PagNodeKind || (exports.PagNodeKind = {}));
|
|
153
158
|
class PagNode extends BaseGraph_1.BaseNode {
|
|
154
159
|
constructor(id, cid = undefined, value, k, s) {
|
|
155
160
|
super(id, k);
|
|
@@ -165,7 +170,7 @@ class PagNode extends BaseGraph_1.BaseNode {
|
|
|
165
170
|
this.basePt = pt;
|
|
166
171
|
}
|
|
167
172
|
getCid() {
|
|
168
|
-
if (this.cid
|
|
173
|
+
if (this.cid === undefined) {
|
|
169
174
|
throw new Error('cid is undefine');
|
|
170
175
|
}
|
|
171
176
|
return this.cid;
|
|
@@ -204,32 +209,32 @@ class PagNode extends BaseGraph_1.BaseNode {
|
|
|
204
209
|
return this.thisInEdges;
|
|
205
210
|
}
|
|
206
211
|
addAddressInEdge(e) {
|
|
207
|
-
this.addressInEdges
|
|
212
|
+
this.addressInEdges === undefined ? this.addressInEdges = new Set() : undefined;
|
|
208
213
|
this.addressInEdges.add(e);
|
|
209
214
|
this.addIncomingEdge(e);
|
|
210
215
|
}
|
|
211
216
|
addAddressOutEdge(e) {
|
|
212
|
-
this.addressOutEdges
|
|
217
|
+
this.addressOutEdges === undefined ? this.addressOutEdges = new Set() : undefined;
|
|
213
218
|
this.addressOutEdges.add(e);
|
|
214
219
|
this.addOutgoingEdge(e);
|
|
215
220
|
}
|
|
216
221
|
addCopyInEdge(e) {
|
|
217
|
-
this.copyInEdges
|
|
222
|
+
this.copyInEdges === undefined ? this.copyInEdges = new Set() : undefined;
|
|
218
223
|
this.copyInEdges.add(e);
|
|
219
224
|
this.addIncomingEdge(e);
|
|
220
225
|
}
|
|
221
226
|
addCopyOutEdge(e) {
|
|
222
|
-
this.copyOutEdges
|
|
227
|
+
this.copyOutEdges === undefined ? this.copyOutEdges = new Set() : undefined;
|
|
223
228
|
this.copyOutEdges.add(e);
|
|
224
229
|
this.addOutgoingEdge(e);
|
|
225
230
|
}
|
|
226
231
|
addLoadInEdge(e) {
|
|
227
|
-
this.loadInEdges
|
|
232
|
+
this.loadInEdges === undefined ? this.loadInEdges = new Set() : undefined;
|
|
228
233
|
this.loadInEdges.add(e);
|
|
229
234
|
this.addIncomingEdge(e);
|
|
230
235
|
}
|
|
231
236
|
addLoadOutEdge(e) {
|
|
232
|
-
this.loadOutEdges
|
|
237
|
+
this.loadOutEdges === undefined ? this.loadOutEdges = new Set() : undefined;
|
|
233
238
|
this.loadOutEdges.add(e);
|
|
234
239
|
this.addOutgoingEdge(e);
|
|
235
240
|
}
|
|
@@ -295,6 +300,10 @@ class PagNode extends BaseGraph_1.BaseNode {
|
|
|
295
300
|
return 'shape=component';
|
|
296
301
|
case PagNodeKind.Param:
|
|
297
302
|
return 'shape=box';
|
|
303
|
+
case PagNodeKind.ExportInfo:
|
|
304
|
+
return 'shape=tab,color=purple';
|
|
305
|
+
case PagNodeKind.ThisRef:
|
|
306
|
+
return 'shape=box,color=orange';
|
|
298
307
|
default:
|
|
299
308
|
return 'shape=box';
|
|
300
309
|
}
|
|
@@ -309,11 +318,11 @@ class PagNode extends BaseGraph_1.BaseNode {
|
|
|
309
318
|
label = label + ` base:{${this.basePt}}`;
|
|
310
319
|
}
|
|
311
320
|
label = label + ` pts:{${Array.from(this.pointTo).join(',')}}`;
|
|
312
|
-
if (this.getKind()
|
|
321
|
+
if (this.getKind() === PagNodeKind.Param) {
|
|
313
322
|
param = this.value;
|
|
314
323
|
label = label + `\nParam#${param.getIndex()} ${param.toString()}`;
|
|
315
324
|
}
|
|
316
|
-
if (this.getKind()
|
|
325
|
+
if (this.getKind() === PagNodeKind.ThisRef) {
|
|
317
326
|
label = label + `\n${this.value.toString()}`;
|
|
318
327
|
}
|
|
319
328
|
if (this.stmt) {
|
|
@@ -332,6 +341,7 @@ class PagLocalNode extends PagNode {
|
|
|
332
341
|
constructor(id, cid = undefined, value, stmt) {
|
|
333
342
|
super(id, cid, value, PagNodeKind.LocalVar, stmt);
|
|
334
343
|
this.storageLinked = false;
|
|
344
|
+
this.sdkParam = false;
|
|
335
345
|
}
|
|
336
346
|
addRelatedDynCallSite(cs) {
|
|
337
347
|
var _a;
|
|
@@ -339,7 +349,17 @@ class PagLocalNode extends PagNode {
|
|
|
339
349
|
this.relatedDynamicCallSite.add(cs);
|
|
340
350
|
}
|
|
341
351
|
getRelatedDynCallSites() {
|
|
342
|
-
|
|
352
|
+
var _a;
|
|
353
|
+
return (_a = this.relatedDynamicCallSite) !== null && _a !== void 0 ? _a : new Set();
|
|
354
|
+
}
|
|
355
|
+
addRelatedUnknownCallSite(cs) {
|
|
356
|
+
var _a;
|
|
357
|
+
this.relatedUnknownCallSite = (_a = this.relatedUnknownCallSite) !== null && _a !== void 0 ? _a : new Set();
|
|
358
|
+
this.relatedUnknownCallSite.add(cs);
|
|
359
|
+
}
|
|
360
|
+
getRelatedUnknownCallSites() {
|
|
361
|
+
var _a;
|
|
362
|
+
return (_a = this.relatedUnknownCallSite) !== null && _a !== void 0 ? _a : new Set();
|
|
343
363
|
}
|
|
344
364
|
setStorageLink(storageType, propertyName) {
|
|
345
365
|
this.storageLinked = true;
|
|
@@ -355,6 +375,12 @@ class PagLocalNode extends PagNode {
|
|
|
355
375
|
isStorageLinked() {
|
|
356
376
|
return this.storageLinked;
|
|
357
377
|
}
|
|
378
|
+
setSdkParam() {
|
|
379
|
+
this.sdkParam = true;
|
|
380
|
+
}
|
|
381
|
+
isSdkParam() {
|
|
382
|
+
return this.sdkParam;
|
|
383
|
+
}
|
|
358
384
|
}
|
|
359
385
|
exports.PagLocalNode = PagLocalNode;
|
|
360
386
|
class PagInstanceFieldNode extends PagNode {
|
|
@@ -443,8 +469,11 @@ class PagParamNode extends PagNode {
|
|
|
443
469
|
exports.PagParamNode = PagParamNode;
|
|
444
470
|
class PagFuncNode extends PagNode {
|
|
445
471
|
// TODO: may add obj interface
|
|
446
|
-
constructor(id, cid = undefined, r, stmt) {
|
|
472
|
+
constructor(id, cid = undefined, r, stmt, method) {
|
|
447
473
|
super(id, cid, r, PagNodeKind.Function, stmt);
|
|
474
|
+
if (method) {
|
|
475
|
+
this.methodSignature = method;
|
|
476
|
+
}
|
|
448
477
|
}
|
|
449
478
|
setMethod(method) {
|
|
450
479
|
this.methodSignature = method;
|
|
@@ -497,7 +526,7 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
497
526
|
* but different Node ID
|
|
498
527
|
*/
|
|
499
528
|
getOrClonePagNode(src, basePt) {
|
|
500
|
-
if (src.getBasePt()
|
|
529
|
+
if (src.getBasePt() !== undefined) {
|
|
501
530
|
throw new Error('This is a cloned ref node, can not be cloned again');
|
|
502
531
|
}
|
|
503
532
|
let cloneSet = this.clonedNodeMap.get(src.getID());
|
|
@@ -543,7 +572,6 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
543
572
|
if (existedNode) {
|
|
544
573
|
return this.getNode(existedNode);
|
|
545
574
|
}
|
|
546
|
-
// let arrayBase: Local = (src.getValue() as ArkArrayRef).getBase()
|
|
547
575
|
let fieldNode = this.getOrClonePagNode(src, basePt);
|
|
548
576
|
baseNode.addElementNode(fieldNode.getID());
|
|
549
577
|
fieldNode.setBasePt(basePt);
|
|
@@ -561,16 +589,13 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
561
589
|
if (valueType instanceof Type_1.FunctionType &&
|
|
562
590
|
(value.getDeclaringStmt() === null)) {
|
|
563
591
|
// init function pointer
|
|
564
|
-
pagNode = new PagFuncNode(id, cid, value, stmt);
|
|
565
|
-
if (pagNode instanceof PagFuncNode) {
|
|
566
|
-
pagNode.setMethod(valueType.getMethodSignature());
|
|
567
|
-
}
|
|
592
|
+
pagNode = new PagFuncNode(id, cid, value, stmt, valueType.getMethodSignature());
|
|
568
593
|
}
|
|
569
594
|
else {
|
|
570
595
|
// judge 'globalThis' is a redefined Local or real globalThis with its declaring stmt
|
|
571
596
|
// value has been replaced in param
|
|
572
|
-
if (value.getName()
|
|
573
|
-
pagNode = new PagGlobalThisNode(id,
|
|
597
|
+
if (value.getName() === TSConst_1.GLOBAL_THIS && value.getDeclaringStmt() == null) {
|
|
598
|
+
pagNode = new PagGlobalThisNode(id, -1, value);
|
|
574
599
|
}
|
|
575
600
|
else {
|
|
576
601
|
pagNode = new PagLocalNode(id, cid, value, stmt);
|
|
@@ -578,10 +603,24 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
578
603
|
}
|
|
579
604
|
}
|
|
580
605
|
else if (value instanceof Ref_1.ArkInstanceFieldRef) {
|
|
581
|
-
|
|
606
|
+
if (value.getType() instanceof Type_1.FunctionType) {
|
|
607
|
+
// function ptr: let ptr = Class.MethodA
|
|
608
|
+
pagNode = new PagFuncNode(id, cid, value, stmt, value.getType().getMethodSignature());
|
|
609
|
+
}
|
|
610
|
+
else {
|
|
611
|
+
// normal field
|
|
612
|
+
pagNode = new PagInstanceFieldNode(id, cid, value, stmt);
|
|
613
|
+
}
|
|
582
614
|
}
|
|
583
615
|
else if (value instanceof Ref_1.ArkStaticFieldRef) {
|
|
584
|
-
|
|
616
|
+
if (value.getType() instanceof Type_1.FunctionType) {
|
|
617
|
+
// function ptr: let ptr = Class.StaticMethodA
|
|
618
|
+
pagNode = new PagFuncNode(id, cid, value, stmt, value.getType().getMethodSignature());
|
|
619
|
+
}
|
|
620
|
+
else {
|
|
621
|
+
// normal field
|
|
622
|
+
pagNode = new PagStaticFieldNode(id, cid, value, stmt);
|
|
623
|
+
}
|
|
585
624
|
}
|
|
586
625
|
else if (value instanceof Ref_1.ArkArrayRef) {
|
|
587
626
|
pagNode = new PagArrayNode(id, cid, value, stmt);
|
|
@@ -602,9 +641,21 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
602
641
|
throw new Error('unsupported Value type ' + value.getType().toString());
|
|
603
642
|
}
|
|
604
643
|
this.addNode(pagNode);
|
|
605
|
-
|
|
644
|
+
// Value
|
|
645
|
+
if (!(value instanceof ArkExport_1.ExportInfo)) {
|
|
646
|
+
this.addContextMap(refresh, cid, id, value, stmt, pagNode);
|
|
647
|
+
}
|
|
648
|
+
else {
|
|
649
|
+
// ExportInfo
|
|
650
|
+
this.addExportInfoMap(id, value);
|
|
651
|
+
}
|
|
606
652
|
return pagNode;
|
|
607
653
|
}
|
|
654
|
+
addExportInfoMap(id, v) {
|
|
655
|
+
var _a;
|
|
656
|
+
this.ExportInfoToIdMap = (_a = this.ExportInfoToIdMap) !== null && _a !== void 0 ? _a : new Map();
|
|
657
|
+
this.ExportInfoToIdMap.set(v, id);
|
|
658
|
+
}
|
|
608
659
|
addContextMap(refresh, cid, id, value, stmt, pagNode) {
|
|
609
660
|
var _a;
|
|
610
661
|
if (!refresh) {
|
|
@@ -618,7 +669,7 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
618
669
|
ctx2NdMap.set(cid, id);
|
|
619
670
|
if (value instanceof Ref_1.ArkInstanceFieldRef || value instanceof Ref_1.ArkArrayRef) {
|
|
620
671
|
let base = value.getBase();
|
|
621
|
-
//TODO: remove below once this Local is not uniq in
|
|
672
|
+
//TODO: remove below once this Local is not uniq in %instInit is fix
|
|
622
673
|
if (base instanceof Local_1.Local && base.getName() === 'this') {
|
|
623
674
|
(_a = stmt === null || stmt === void 0 ? void 0 : stmt.getCfg()) === null || _a === void 0 ? void 0 : _a.getStmts().forEach(s => {
|
|
624
675
|
if (s instanceof Stmt_1.ArkAssignStmt &&
|
|
@@ -664,20 +715,25 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
664
715
|
return pagNode;
|
|
665
716
|
}
|
|
666
717
|
getOrNewThisRefNode(thisRefNodeID, value) {
|
|
667
|
-
if (thisRefNodeID
|
|
718
|
+
if (thisRefNodeID !== -1) {
|
|
668
719
|
return this.getNode(thisRefNodeID);
|
|
669
720
|
}
|
|
670
721
|
let thisRefNode = this.addPagThisRefNode(value);
|
|
671
722
|
return thisRefNode;
|
|
672
723
|
}
|
|
673
724
|
getOrNewThisLocalNode(cid, ptNode, value, s) {
|
|
674
|
-
if (ptNode
|
|
725
|
+
if (ptNode !== -1) {
|
|
675
726
|
return this.getNode(ptNode);
|
|
676
727
|
}
|
|
677
728
|
else {
|
|
678
729
|
return this.getOrNewNode(cid, value, s);
|
|
679
730
|
}
|
|
680
731
|
}
|
|
732
|
+
hasExportNode(v) {
|
|
733
|
+
var _a;
|
|
734
|
+
this.ExportInfoToIdMap = (_a = this.ExportInfoToIdMap) !== null && _a !== void 0 ? _a : new Map();
|
|
735
|
+
return this.ExportInfoToIdMap.get(v);
|
|
736
|
+
}
|
|
681
737
|
hasCtxNode(cid, v) {
|
|
682
738
|
let ctx2nd = this.contextValueToIdMap.get(v);
|
|
683
739
|
if (!ctx2nd) {
|
|
@@ -701,8 +757,16 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
701
757
|
return ndId;
|
|
702
758
|
}
|
|
703
759
|
getOrNewNode(cid, v, s) {
|
|
704
|
-
let nodeId =
|
|
705
|
-
|
|
760
|
+
let nodeId = undefined;
|
|
761
|
+
// Value
|
|
762
|
+
if (!(v instanceof ArkExport_1.ExportInfo)) {
|
|
763
|
+
nodeId = this.hasCtxNode(cid, v);
|
|
764
|
+
}
|
|
765
|
+
else {
|
|
766
|
+
// ExportInfo
|
|
767
|
+
nodeId = this.hasExportNode(v);
|
|
768
|
+
}
|
|
769
|
+
if (nodeId !== undefined) {
|
|
706
770
|
return this.getNode(nodeId);
|
|
707
771
|
}
|
|
708
772
|
return this.addPagNode(cid, v, s);
|
|
@@ -719,12 +783,18 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
719
783
|
if (this.ifEdgeExisting(edge)) {
|
|
720
784
|
return false;
|
|
721
785
|
}
|
|
722
|
-
//src.addOutgoingEdge(edge);
|
|
723
|
-
//dst.addIncomingEdge(edge);
|
|
724
786
|
switch (kind) {
|
|
725
787
|
case PagEdgeKind.Copy:
|
|
788
|
+
case PagEdgeKind.InterProceduralCopy:
|
|
726
789
|
src.addCopyOutEdge(edge);
|
|
727
790
|
dst.addCopyInEdge(edge);
|
|
791
|
+
if (src instanceof PagFuncNode ||
|
|
792
|
+
src instanceof PagGlobalThisNode ||
|
|
793
|
+
src instanceof PagNewExprNode ||
|
|
794
|
+
src instanceof PagNewArrayExprNode) {
|
|
795
|
+
this.addrEdge.add(edge);
|
|
796
|
+
this.stashAddrEdge.add(edge);
|
|
797
|
+
}
|
|
728
798
|
break;
|
|
729
799
|
case PagEdgeKind.Address:
|
|
730
800
|
src.addAddressOutEdge(edge);
|
|
@@ -743,6 +813,7 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
743
813
|
case PagEdgeKind.This:
|
|
744
814
|
src.addThisOutEdge(edge);
|
|
745
815
|
dst.addThisInEdge(edge);
|
|
816
|
+
break;
|
|
746
817
|
default:
|
|
747
818
|
;
|
|
748
819
|
}
|
|
@@ -787,8 +858,18 @@ class FuncPag {
|
|
|
787
858
|
this.dynamicCallSites = (_a = this.dynamicCallSites) !== null && _a !== void 0 ? _a : new Set();
|
|
788
859
|
return this.dynamicCallSites;
|
|
789
860
|
}
|
|
861
|
+
addUnknownCallSite(cs) {
|
|
862
|
+
var _a;
|
|
863
|
+
this.unknownCallSites = (_a = this.unknownCallSites) !== null && _a !== void 0 ? _a : new Set();
|
|
864
|
+
this.unknownCallSites.add(cs);
|
|
865
|
+
}
|
|
866
|
+
getUnknownCallSites() {
|
|
867
|
+
var _a;
|
|
868
|
+
this.unknownCallSites = (_a = this.unknownCallSites) !== null && _a !== void 0 ? _a : new Set();
|
|
869
|
+
return this.unknownCallSites;
|
|
870
|
+
}
|
|
790
871
|
addInternalEdge(stmt, k) {
|
|
791
|
-
this.internalEdges
|
|
872
|
+
this.internalEdges === undefined ? this.internalEdges = new Set() : undefined;
|
|
792
873
|
let lhOp = stmt.getLeftOp();
|
|
793
874
|
let rhOp = stmt.getRightOp();
|
|
794
875
|
if (rhOp instanceof Constant_1.Constant) {
|
|
@@ -800,3 +881,15 @@ class FuncPag {
|
|
|
800
881
|
}
|
|
801
882
|
}
|
|
802
883
|
exports.FuncPag = FuncPag;
|
|
884
|
+
class InterFuncPag {
|
|
885
|
+
constructor() {
|
|
886
|
+
this.interFuncEdges = new Set();
|
|
887
|
+
}
|
|
888
|
+
getInterProceduralEdges() {
|
|
889
|
+
return this.interFuncEdges;
|
|
890
|
+
}
|
|
891
|
+
addToInterProceduralEdgeSet(e) {
|
|
892
|
+
this.interFuncEdges.add(e);
|
|
893
|
+
}
|
|
894
|
+
}
|
|
895
|
+
exports.InterFuncPag = InterFuncPag;
|
|
@@ -6,7 +6,7 @@ import { Value } from '../../core/base/Value';
|
|
|
6
6
|
import { Local } from '../../core/base/Local';
|
|
7
7
|
import { NodeID } from '../model/BaseGraph';
|
|
8
8
|
import { ContextID } from './Context';
|
|
9
|
-
import { Pag, FuncPag, PagNode, StorageType } from './Pag';
|
|
9
|
+
import { Pag, FuncPag, PagNode, StorageType, InterFuncPag, PagNodeType } from './Pag';
|
|
10
10
|
import { PtsSet } from './PtsDS';
|
|
11
11
|
export declare class CSFuncID {
|
|
12
12
|
cid: ContextID;
|
|
@@ -17,6 +17,7 @@ export declare class PagBuilder {
|
|
|
17
17
|
private pag;
|
|
18
18
|
private cg;
|
|
19
19
|
private funcPags;
|
|
20
|
+
private interFuncPags?;
|
|
20
21
|
private handledFunc;
|
|
21
22
|
private ctx;
|
|
22
23
|
private scene;
|
|
@@ -28,11 +29,15 @@ export declare class PagBuilder {
|
|
|
28
29
|
private cid2ThisRefMap;
|
|
29
30
|
private cid2ThisLocalMap;
|
|
30
31
|
private sdkMethodReturnValueMap;
|
|
32
|
+
private sdkMethodParamValueMap;
|
|
33
|
+
private fakeSdkMethodParamDeclaringStmt;
|
|
31
34
|
private funcHandledThisRound;
|
|
32
35
|
private updatedNodesThisRound;
|
|
33
36
|
private singletonFuncMap;
|
|
34
|
-
private globalThisValue
|
|
37
|
+
private globalThisValue;
|
|
38
|
+
private globalThisPagNode?;
|
|
35
39
|
private storagePropertyMap;
|
|
40
|
+
private externalScopeVariableMap;
|
|
36
41
|
constructor(p: Pag, cg: CallGraph, s: Scene, kLimit: number);
|
|
37
42
|
private buildFuncPagAndAddToWorklist;
|
|
38
43
|
private addToFuncHandledListThisRound;
|
|
@@ -40,6 +45,10 @@ export declare class PagBuilder {
|
|
|
40
45
|
handleReachable(): boolean;
|
|
41
46
|
build(): void;
|
|
42
47
|
buildFuncPag(funcID: FuncID): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* will not create real funcPag, only create param values
|
|
50
|
+
*/
|
|
51
|
+
private buildSDKFuncPag;
|
|
43
52
|
buildPagFromFuncPag(funcID: FuncID, cid: ContextID): void;
|
|
44
53
|
addEdgesFromFuncPag(funcPag: FuncPag, cid: ContextID): boolean;
|
|
45
54
|
addCallsEdgesFromFuncPag(funcPag: FuncPag, cid: ContextID): boolean;
|
|
@@ -53,8 +62,11 @@ export declare class PagBuilder {
|
|
|
53
62
|
private processStorageProp;
|
|
54
63
|
private processStorageSet;
|
|
55
64
|
private processStorageGet;
|
|
56
|
-
|
|
57
|
-
|
|
65
|
+
private getPropertyName;
|
|
66
|
+
addDynamicCallSite(funcPag: FuncPag, funcID: FuncID): void;
|
|
67
|
+
addUnknownCallSite(funcPag: FuncPag, funcID: FuncID): void;
|
|
68
|
+
addDynamicCallEdge(cs: DynCallSite | CallSite, baseClassPTNode: NodeID, cid: ContextID): NodeID[];
|
|
69
|
+
private getDynamicCallee;
|
|
58
70
|
addUpdatedNode(nodeID: NodeID, diffPT: PtsSet<NodeID>): void;
|
|
59
71
|
getUpdatedNodes(): Map<number, PtsSet<number>>;
|
|
60
72
|
resetUpdatedNodes(): void;
|
|
@@ -62,7 +74,10 @@ export declare class PagBuilder {
|
|
|
62
74
|
handleUnprocessedCallSites(processedCallSites: Set<DynCallSite>): NodeID[];
|
|
63
75
|
private addThisRefCallEdge;
|
|
64
76
|
addStaticPagCallEdge(cs: CallSite, callerCid: ContextID, calleeCid?: ContextID): NodeID[];
|
|
65
|
-
|
|
77
|
+
private addSDKMethodPagCallEdge;
|
|
78
|
+
private addSDKMethodReturnPagEdge;
|
|
79
|
+
private addSDKMethodParamPagEdge;
|
|
80
|
+
getOrNewPagNode(cid: ContextID, v: PagNodeType, s?: Stmt): PagNode;
|
|
66
81
|
/**
|
|
67
82
|
* return ThisRef PAG node according to cid, a cid has a unique ThisRef node
|
|
68
83
|
* @param cid: current contextID
|
|
@@ -123,5 +138,19 @@ export declare class PagBuilder {
|
|
|
123
138
|
printStat(): void;
|
|
124
139
|
getUnhandledFuncs(): FuncID[];
|
|
125
140
|
getHandledFuncs(): FuncID[];
|
|
141
|
+
/**
|
|
142
|
+
* build export edge in internal func pag
|
|
143
|
+
* @param value: Value that need to check if it is from import/export
|
|
144
|
+
* @param originValue: if Value if InstanceFieldRef, the base will be passed to `value` recursively,
|
|
145
|
+
* fieldRef will be passed to `originValue`
|
|
146
|
+
*/
|
|
147
|
+
private handleValueFromExternalScope;
|
|
148
|
+
private addInterFuncEdge;
|
|
149
|
+
private getSourceValueFromExternalScope;
|
|
150
|
+
private getDefaultMethodSourceValue;
|
|
151
|
+
private getExportSourceValue;
|
|
152
|
+
private addExportVariableMap;
|
|
153
|
+
getExportVariableMap(src: Local): Local[];
|
|
154
|
+
addEdgesFromInterFuncPag(interFuncPag: InterFuncPag, cid: ContextID): boolean;
|
|
126
155
|
}
|
|
127
156
|
//# sourceMappingURL=PagBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PagBuilder.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PagBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAiB,QAAQ,EAAE,WAAW,EAAqB,MAAM,oBAAoB,CAAC;AAChH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,IAAI,EAA+C,MAAM,sBAAsB,CAAA;AAExF,OAAO,
|
|
1
|
+
{"version":3,"file":"PagBuilder.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PagBuilder.ts"],"names":[],"mappings":"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"}
|