arkanalyzer 1.0.7 → 1.0.9
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/lib/Config.d.ts +9 -1
- package/lib/Config.d.ts.map +1 -1
- package/lib/Config.js +24 -11
- package/lib/Scene.d.ts +49 -42
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +124 -93
- package/lib/callgraph/algorithm/AbstractAnalysis.js +1 -1
- package/lib/callgraph/common/Statistics.js +1 -1
- 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 +15 -5
- package/lib/callgraph/model/builder/CallGraphBuilder.js +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +35 -8
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +89 -8
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +32 -5
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +378 -83
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +3 -0
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +71 -18
- package/lib/core/base/Constant.d.ts +25 -5
- package/lib/core/base/Constant.d.ts.map +1 -1
- package/lib/core/base/Constant.js +46 -8
- package/lib/core/base/Expr.d.ts +45 -40
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +236 -150
- package/lib/core/base/Local.d.ts +2 -2
- package/lib/core/base/Local.d.ts.map +1 -1
- package/lib/core/base/Local.js +2 -2
- package/lib/core/base/Ref.d.ts +38 -37
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +102 -70
- package/lib/core/base/Stmt.d.ts +4 -0
- package/lib/core/base/Stmt.d.ts.map +1 -1
- package/lib/core/base/Stmt.js +12 -1
- package/lib/core/base/Type.d.ts +4 -0
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +41 -17
- 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 +1 -1
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +24 -8
- package/lib/core/common/CfgBuilder.d.ts.map +1 -1
- package/lib/core/common/CfgBuilder.js +5 -0
- 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 +2 -1
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +28 -15
- 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/IRUtils.d.ts +6 -0
- package/lib/core/common/IRUtils.d.ts.map +1 -1
- package/lib/core/common/IRUtils.js +29 -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 +32 -32
- 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 +218 -87
- 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 +8 -25
- package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -1
- package/lib/core/dataflow/DataflowSolver.js +2 -4
- package/lib/core/dataflow/TiantAnalysis.js +2 -1
- package/lib/core/dataflow/Util.d.ts +1 -1
- package/lib/core/dataflow/Util.d.ts.map +1 -1
- package/lib/core/dataflow/Util.js +8 -7
- package/lib/core/graph/BasicBlock.d.ts +41 -0
- package/lib/core/graph/BasicBlock.d.ts.map +1 -1
- package/lib/core/graph/BasicBlock.js +132 -1
- 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 +129 -6
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +3 -2
- package/lib/core/model/ArkBaseModel.d.ts +8 -0
- package/lib/core/model/ArkBaseModel.d.ts.map +1 -1
- package/lib/core/model/ArkBaseModel.js +55 -3
- package/lib/core/model/ArkClass.d.ts +36 -30
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +78 -39
- package/lib/core/model/ArkExport.d.ts +3 -0
- package/lib/core/model/ArkExport.d.ts.map +1 -1
- package/lib/core/model/ArkExport.js +10 -0
- package/lib/core/model/ArkField.d.ts +2 -0
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +3 -0
- package/lib/core/model/ArkFile.d.ts +4 -0
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +20 -0
- package/lib/core/model/ArkImport.d.ts +2 -0
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +3 -0
- 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 +156 -53
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +309 -54
- package/lib/core/model/ArkNamespace.d.ts +4 -0
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +13 -0
- package/lib/core/model/ArkSignature.d.ts +11 -5
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +38 -18
- package/lib/core/model/builder/ArkClassBuilder.d.ts +0 -1
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +9 -34
- package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkExportBuilder.js +6 -1
- package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFieldBuilder.js +3 -0
- package/lib/core/model/builder/ArkFileBuilder.js +1 -1
- 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 +12 -5
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +2 -1
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +87 -47
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkNamespaceBuilder.js +2 -0
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +25 -2
- package/lib/save/source/SourceClass.d.ts.map +1 -1
- package/lib/save/source/SourceClass.js +4 -0
- package/lib/save/source/SourceField.d.ts.map +1 -1
- package/lib/save/source/SourceField.js +4 -0
- package/lib/save/source/SourceMethod.d.ts.map +1 -1
- package/lib/save/source/SourceMethod.js +7 -0
- package/lib/save/source/SourceModule.d.ts.map +1 -1
- package/lib/save/source/SourceModule.js +14 -9
- 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.map +1 -1
- package/lib/save/source/SourceStmt.js +15 -3
- 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 +72 -41
- package/lib/save/source/SourceUtils.d.ts.map +1 -1
- package/lib/save/source/SourceUtils.js +3 -2
- package/lib/transformer/StaticSingleAssignmentFormer.js +1 -1
- package/lib/utils/CfgStructualAnalysis.d.ts +1 -0
- package/lib/utils/CfgStructualAnalysis.d.ts.map +1 -1
- package/lib/utils/CfgStructualAnalysis.js +41 -7
- 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/getAllFiles.d.ts +1 -1
- package/lib/utils/getAllFiles.d.ts.map +1 -1
- package/lib/utils/getAllFiles.js +4 -5
- package/package.json +3 -2
|
@@ -7,13 +7,16 @@ import { AbstractFieldRef, ArkArrayRef, ArkInstanceFieldRef, ArkParameterRef, Ar
|
|
|
7
7
|
import { Local } from '../../core/base/Local';
|
|
8
8
|
import { MethodSignature } from '../../core/model/ArkSignature';
|
|
9
9
|
import { ContextID } from './Context';
|
|
10
|
+
import { ExportInfo } from '../../core/model/ArkExport';
|
|
11
|
+
export type PagNodeType = Value;
|
|
10
12
|
export declare enum PagEdgeKind {
|
|
11
13
|
Address = 0,
|
|
12
14
|
Copy = 1,
|
|
13
15
|
Load = 2,
|
|
14
16
|
Write = 3,
|
|
15
17
|
This = 4,
|
|
16
|
-
Unknown = 5
|
|
18
|
+
Unknown = 5,
|
|
19
|
+
InterProceduralCopy = 6
|
|
17
20
|
}
|
|
18
21
|
export declare enum StorageType {
|
|
19
22
|
APP_STORAGE = 0,
|
|
@@ -25,7 +28,6 @@ export declare enum StorageLinkEdgeType {
|
|
|
25
28
|
Local2Property = 1,
|
|
26
29
|
TwoWay = 2
|
|
27
30
|
}
|
|
28
|
-
export declare const GLOBAL_THIS: string;
|
|
29
31
|
export declare class PagEdge extends BaseEdge {
|
|
30
32
|
private stmt;
|
|
31
33
|
constructor(n: PagNode, d: PagNode, k: PagEdgeKind, s?: Stmt);
|
|
@@ -54,7 +56,8 @@ export declare enum PagNodeKind {
|
|
|
54
56
|
Param = 3,
|
|
55
57
|
ThisRef = 4,
|
|
56
58
|
Function = 5,
|
|
57
|
-
GlobalThis = 6
|
|
59
|
+
GlobalThis = 6,
|
|
60
|
+
ExportInfo = 7
|
|
58
61
|
}
|
|
59
62
|
export declare class PagNode extends BaseNode {
|
|
60
63
|
private cid;
|
|
@@ -114,19 +117,25 @@ export declare class PagNode extends BaseNode {
|
|
|
114
117
|
getDotLabel(): string;
|
|
115
118
|
}
|
|
116
119
|
export declare class PagLocalNode extends PagNode {
|
|
117
|
-
private relatedDynamicCallSite
|
|
120
|
+
private relatedDynamicCallSite?;
|
|
121
|
+
private relatedUnknownCallSite?;
|
|
118
122
|
private storageLinked;
|
|
119
123
|
private storageType?;
|
|
120
124
|
private propertyName?;
|
|
125
|
+
private sdkParam;
|
|
121
126
|
constructor(id: NodeID, cid: number | undefined, value: Local, stmt?: Stmt);
|
|
122
127
|
addRelatedDynCallSite(cs: DynCallSite): void;
|
|
123
128
|
getRelatedDynCallSites(): Set<DynCallSite>;
|
|
129
|
+
addRelatedUnknownCallSite(cs: CallSite): void;
|
|
130
|
+
getRelatedUnknownCallSites(): Set<CallSite>;
|
|
124
131
|
setStorageLink(storageType: StorageType, propertyName: string): void;
|
|
125
132
|
getStorage(): {
|
|
126
133
|
StorageType: StorageType;
|
|
127
134
|
PropertyName: string;
|
|
128
135
|
};
|
|
129
136
|
isStorageLinked(): boolean;
|
|
137
|
+
setSdkParam(): void;
|
|
138
|
+
isSdkParam(): boolean;
|
|
130
139
|
}
|
|
131
140
|
export declare class PagInstanceFieldNode extends PagNode {
|
|
132
141
|
constructor(id: NodeID, cid: number | undefined, instanceFieldRef: ArkInstanceFieldRef, stmt?: Stmt);
|
|
@@ -182,6 +191,7 @@ export declare class PagGlobalThisNode extends PagNode {
|
|
|
182
191
|
export declare class Pag extends BaseGraph {
|
|
183
192
|
private cg;
|
|
184
193
|
private contextValueToIdMap;
|
|
194
|
+
private ExportInfoToIdMap?;
|
|
185
195
|
private contextBaseToIdMap;
|
|
186
196
|
private stashAddrEdge;
|
|
187
197
|
private addrEdge;
|
|
@@ -190,15 +200,17 @@ export declare class Pag extends BaseGraph {
|
|
|
190
200
|
getOrClonePagNode(src: PagNode, basePt: NodeID): PagNode;
|
|
191
201
|
getOrClonePagFieldNode(src: PagInstanceFieldNode, basePt: NodeID): PagInstanceFieldNode | undefined;
|
|
192
202
|
getOrClonePagArrayFieldNode(src: PagArrayNode, basePt: NodeID): PagInstanceFieldNode;
|
|
193
|
-
addPagNode(cid: ContextID, value:
|
|
203
|
+
addPagNode(cid: ContextID, value: PagNodeType, stmt?: Stmt, refresh?: boolean): PagNode;
|
|
204
|
+
private addExportInfoMap;
|
|
194
205
|
private addContextMap;
|
|
195
206
|
addPagThisRefNode(value: ArkThisRef): PagNode;
|
|
196
207
|
addPagThisLocalNode(ptNode: NodeID, value: Local): PagNode;
|
|
197
208
|
getOrNewThisRefNode(thisRefNodeID: NodeID, value: ArkThisRef): PagNode;
|
|
198
209
|
getOrNewThisLocalNode(cid: ContextID, ptNode: NodeID, value: Local, s?: Stmt): PagNode;
|
|
210
|
+
hasExportNode(v: ExportInfo): NodeID | undefined;
|
|
199
211
|
hasCtxNode(cid: ContextID, v: Value): NodeID | undefined;
|
|
200
212
|
hasCtxRetNode(cid: ContextID, v: Value): NodeID | undefined;
|
|
201
|
-
getOrNewNode(cid: ContextID, v:
|
|
213
|
+
getOrNewNode(cid: ContextID, v: PagNodeType, s?: Stmt): PagNode;
|
|
202
214
|
getNodesByValue(v: Value): Map<ContextID, NodeID> | undefined;
|
|
203
215
|
getNodesByBaseValue(v: Value): Map<ContextID, NodeID[]> | undefined;
|
|
204
216
|
addPagEdge(src: PagNode, dst: PagNode, kind: PagEdgeKind, stmt?: Stmt): boolean;
|
|
@@ -207,22 +219,37 @@ export declare class Pag extends BaseGraph {
|
|
|
207
219
|
getGraphName(): string;
|
|
208
220
|
dump(name: string): void;
|
|
209
221
|
}
|
|
210
|
-
export type
|
|
222
|
+
export type InterProceduralSrcType = Local;
|
|
223
|
+
export type IntraProceduralEdge = {
|
|
211
224
|
src: Value;
|
|
212
225
|
dst: Value;
|
|
213
226
|
kind: PagEdgeKind;
|
|
214
227
|
stmt: Stmt;
|
|
215
228
|
};
|
|
229
|
+
export type InterProceduralEdge = {
|
|
230
|
+
src: InterProceduralSrcType;
|
|
231
|
+
dst: Value;
|
|
232
|
+
kind: PagEdgeKind;
|
|
233
|
+
};
|
|
216
234
|
export declare class FuncPag {
|
|
217
235
|
private internalEdges;
|
|
218
236
|
private normalCallSites;
|
|
219
237
|
private dynamicCallSites;
|
|
220
|
-
|
|
238
|
+
private unknownCallSites;
|
|
239
|
+
getInternalEdges(): Set<IntraProceduralEdge> | undefined;
|
|
221
240
|
addNormalCallSite(cs: CallSite): void;
|
|
222
241
|
getNormalCallSites(): Set<CallSite>;
|
|
223
242
|
addDynamicCallSite(cs: DynCallSite): void;
|
|
224
243
|
getDynamicCallSites(): Set<DynCallSite>;
|
|
244
|
+
addUnknownCallSite(cs: CallSite): void;
|
|
245
|
+
getUnknownCallSites(): Set<CallSite>;
|
|
225
246
|
addInternalEdge(stmt: ArkAssignStmt, k: PagEdgeKind): boolean;
|
|
226
247
|
}
|
|
248
|
+
export declare class InterFuncPag {
|
|
249
|
+
private interFuncEdges;
|
|
250
|
+
constructor();
|
|
251
|
+
getInterProceduralEdges(): Set<InterProceduralEdge>;
|
|
252
|
+
addToInterProceduralEdgeSet(e: InterProceduralEdge): void;
|
|
253
|
+
}
|
|
227
254
|
export {};
|
|
228
255
|
//# sourceMappingURL=Pag.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pag.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/Pag.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAiB,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,eAAe,EAAc,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzI,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAK9C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"Pag.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/Pag.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,6 +63,7 @@ var PagEdgeKind;
|
|
|
61
63
|
PagEdgeKind[PagEdgeKind["Write"] = 3] = "Write";
|
|
62
64
|
PagEdgeKind[PagEdgeKind["This"] = 4] = "This";
|
|
63
65
|
PagEdgeKind[PagEdgeKind["Unknown"] = 5] = "Unknown";
|
|
66
|
+
PagEdgeKind[PagEdgeKind["InterProceduralCopy"] = 6] = "InterProceduralCopy";
|
|
64
67
|
})(PagEdgeKind || (exports.PagEdgeKind = PagEdgeKind = {}));
|
|
65
68
|
;
|
|
66
69
|
var StorageType;
|
|
@@ -76,7 +79,6 @@ var StorageLinkEdgeType;
|
|
|
76
79
|
StorageLinkEdgeType[StorageLinkEdgeType["Local2Property"] = 1] = "Local2Property";
|
|
77
80
|
StorageLinkEdgeType[StorageLinkEdgeType["TwoWay"] = 2] = "TwoWay";
|
|
78
81
|
})(StorageLinkEdgeType || (exports.StorageLinkEdgeType = StorageLinkEdgeType = {}));
|
|
79
|
-
exports.GLOBAL_THIS = 'globaThis';
|
|
80
82
|
class PagEdge extends BaseGraph_1.BaseEdge {
|
|
81
83
|
constructor(n, d, k, s) {
|
|
82
84
|
super(n, d, k);
|
|
@@ -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,6 +153,7 @@ var PagNodeKind;
|
|
|
149
153
|
PagNodeKind[PagNodeKind["ThisRef"] = 4] = "ThisRef";
|
|
150
154
|
PagNodeKind[PagNodeKind["Function"] = 5] = "Function";
|
|
151
155
|
PagNodeKind[PagNodeKind["GlobalThis"] = 6] = "GlobalThis";
|
|
156
|
+
PagNodeKind[PagNodeKind["ExportInfo"] = 7] = "ExportInfo";
|
|
152
157
|
})(PagNodeKind || (exports.PagNodeKind = PagNodeKind = {}));
|
|
153
158
|
class PagNode extends BaseGraph_1.BaseNode {
|
|
154
159
|
constructor(id, cid = undefined, value, k, s) {
|
|
@@ -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
|
}
|
|
@@ -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 {
|
|
@@ -568,8 +594,8 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
568
594
|
else {
|
|
569
595
|
// judge 'globalThis' is a redefined Local or real globalThis with its declaring stmt
|
|
570
596
|
// value has been replaced in param
|
|
571
|
-
if (value.getName() ===
|
|
572
|
-
pagNode = new PagGlobalThisNode(id,
|
|
597
|
+
if (value.getName() === TSConst_1.GLOBAL_THIS && value.getDeclaringStmt() == null) {
|
|
598
|
+
pagNode = new PagGlobalThisNode(id, -1, value);
|
|
573
599
|
}
|
|
574
600
|
else {
|
|
575
601
|
pagNode = new PagLocalNode(id, cid, value, stmt);
|
|
@@ -615,9 +641,21 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
615
641
|
throw new Error('unsupported Value type ' + value.getType().toString());
|
|
616
642
|
}
|
|
617
643
|
this.addNode(pagNode);
|
|
618
|
-
|
|
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
|
+
}
|
|
619
652
|
return pagNode;
|
|
620
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
|
+
}
|
|
621
659
|
addContextMap(refresh, cid, id, value, stmt, pagNode) {
|
|
622
660
|
var _a;
|
|
623
661
|
if (!refresh) {
|
|
@@ -631,7 +669,7 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
631
669
|
ctx2NdMap.set(cid, id);
|
|
632
670
|
if (value instanceof Ref_1.ArkInstanceFieldRef || value instanceof Ref_1.ArkArrayRef) {
|
|
633
671
|
let base = value.getBase();
|
|
634
|
-
//TODO: remove below once this Local is not uniq in
|
|
672
|
+
//TODO: remove below once this Local is not uniq in %instInit is fix
|
|
635
673
|
if (base instanceof Local_1.Local && base.getName() === 'this') {
|
|
636
674
|
(_a = stmt === null || stmt === void 0 ? void 0 : stmt.getCfg()) === null || _a === void 0 ? void 0 : _a.getStmts().forEach(s => {
|
|
637
675
|
if (s instanceof Stmt_1.ArkAssignStmt &&
|
|
@@ -691,6 +729,11 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
691
729
|
return this.getOrNewNode(cid, value, s);
|
|
692
730
|
}
|
|
693
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
|
+
}
|
|
694
737
|
hasCtxNode(cid, v) {
|
|
695
738
|
let ctx2nd = this.contextValueToIdMap.get(v);
|
|
696
739
|
if (!ctx2nd) {
|
|
@@ -714,7 +757,15 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
714
757
|
return ndId;
|
|
715
758
|
}
|
|
716
759
|
getOrNewNode(cid, v, s) {
|
|
717
|
-
let nodeId =
|
|
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
|
+
}
|
|
718
769
|
if (nodeId !== undefined) {
|
|
719
770
|
return this.getNode(nodeId);
|
|
720
771
|
}
|
|
@@ -734,8 +785,16 @@ class Pag extends BaseGraph_1.BaseGraph {
|
|
|
734
785
|
}
|
|
735
786
|
switch (kind) {
|
|
736
787
|
case PagEdgeKind.Copy:
|
|
788
|
+
case PagEdgeKind.InterProceduralCopy:
|
|
737
789
|
src.addCopyOutEdge(edge);
|
|
738
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
|
+
}
|
|
739
798
|
break;
|
|
740
799
|
case PagEdgeKind.Address:
|
|
741
800
|
src.addAddressOutEdge(edge);
|
|
@@ -799,6 +858,16 @@ class FuncPag {
|
|
|
799
858
|
this.dynamicCallSites = (_a = this.dynamicCallSites) !== null && _a !== void 0 ? _a : new Set();
|
|
800
859
|
return this.dynamicCallSites;
|
|
801
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
|
+
}
|
|
802
871
|
addInternalEdge(stmt, k) {
|
|
803
872
|
this.internalEdges === undefined ? this.internalEdges = new Set() : undefined;
|
|
804
873
|
let lhOp = stmt.getLeftOp();
|
|
@@ -812,3 +881,15 @@ class FuncPag {
|
|
|
812
881
|
}
|
|
813
882
|
}
|
|
814
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;
|
|
@@ -54,8 +63,9 @@ export declare class PagBuilder {
|
|
|
54
63
|
private processStorageSet;
|
|
55
64
|
private processStorageGet;
|
|
56
65
|
private getPropertyName;
|
|
57
|
-
addDynamicCallSite(funcPag: FuncPag): void;
|
|
58
|
-
|
|
66
|
+
addDynamicCallSite(funcPag: FuncPag, funcID: FuncID): void;
|
|
67
|
+
addUnknownCallSite(funcPag: FuncPag, funcID: FuncID): void;
|
|
68
|
+
addDynamicCallEdge(cs: DynCallSite | CallSite, baseClassPTNode: NodeID, cid: ContextID): NodeID[];
|
|
59
69
|
private getDynamicCallee;
|
|
60
70
|
addUpdatedNode(nodeID: NodeID, diffPT: PtsSet<NodeID>): void;
|
|
61
71
|
getUpdatedNodes(): Map<number, PtsSet<number>>;
|
|
@@ -64,7 +74,10 @@ export declare class PagBuilder {
|
|
|
64
74
|
handleUnprocessedCallSites(processedCallSites: Set<DynCallSite>): NodeID[];
|
|
65
75
|
private addThisRefCallEdge;
|
|
66
76
|
addStaticPagCallEdge(cs: CallSite, callerCid: ContextID, calleeCid?: ContextID): NodeID[];
|
|
67
|
-
|
|
77
|
+
private addSDKMethodPagCallEdge;
|
|
78
|
+
private addSDKMethodReturnPagEdge;
|
|
79
|
+
private addSDKMethodParamPagEdge;
|
|
80
|
+
getOrNewPagNode(cid: ContextID, v: PagNodeType, s?: Stmt): PagNode;
|
|
68
81
|
/**
|
|
69
82
|
* return ThisRef PAG node according to cid, a cid has a unique ThisRef node
|
|
70
83
|
* @param cid: current contextID
|
|
@@ -125,5 +138,19 @@ export declare class PagBuilder {
|
|
|
125
138
|
printStat(): void;
|
|
126
139
|
getUnhandledFuncs(): FuncID[];
|
|
127
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;
|
|
128
155
|
}
|
|
129
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,EAA0F,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzI,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG9C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAM5C,OAAO,EAAE,SAAS,EAAuC,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,OAAO,EAA6B,OAAO,
|
|
1
|
+
{"version":3,"file":"PagBuilder.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PagBuilder.ts"],"names":[],"mappings":"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"}
|