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
|
@@ -46,6 +46,8 @@ export declare class PointerAnalysis extends AbstractAnalysis {
|
|
|
46
46
|
* 3. 在addDynamicCall里对传入指针过滤(已处理指针和未处理指针)
|
|
47
47
|
*/
|
|
48
48
|
private onTheFlyDynamicCallSolve;
|
|
49
|
+
private processDynCallSite;
|
|
50
|
+
private processUnknownCallSite;
|
|
49
51
|
private addToReanalyze;
|
|
50
52
|
/**
|
|
51
53
|
* compare interface
|
|
@@ -63,5 +65,6 @@ export declare class PointerAnalysis extends AbstractAnalysis {
|
|
|
63
65
|
getHandledFuncs(): FuncID[];
|
|
64
66
|
getPTAConfig(): PointerAnalysisConfig;
|
|
65
67
|
private dumpUnhandledFunctions;
|
|
68
|
+
mergeInstanceFieldMap(src: Map<number, number[]>, dst: Map<number, number[]>): Map<number, number[]>;
|
|
66
69
|
}
|
|
67
70
|
//# sourceMappingURL=PointerAnalysis.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PointerAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PointerAnalysis.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAiB,QAAQ,EAAe,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAa,IAAI,EAAe,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAI5C,OAAO,EAAE,GAAG,EAAgF,MAAM,OAAO,CAAC;AAE1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"PointerAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PointerAnalysis.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAiB,QAAQ,EAAe,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAa,IAAI,EAAe,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAI5C,OAAO,EAAE,GAAG,EAAgF,MAAM,OAAO,CAAC;AAE1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAMhE,qBAAa,eAAgB,SAAQ,gBAAgB;IACjD,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,GAAG,CAA6C;IACxD,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,QAAQ,CAAY;IAE5B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,MAAM,CAAwB;gBAE1B,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB;IAW1E,MAAM,CAAC,8BAA8B,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,qBAAqB,GAAG,eAAe;IAuB3G,SAAS,CAAC,IAAI;IAYP,KAAK;IAMZ,OAAO,CAAC,WAAW;IAgBnB,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAK/C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE;IAIhC,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,eAAe;IAkDvB,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,mBAAmB;IA0B3B;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,SAAS;IAoBjB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAuBhC,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACI,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,GAAG,OAAO;IAmCrD,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,GAAG,OAAO;IAItD,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IA6BhD,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,0BAA0B;IAYlC,OAAO,CAAC,0BAA0B;IAYlC,OAAO,CAAC,cAAc;IA2Cf,cAAc,IAAI,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAI9C,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAIlE,iBAAiB,IAAI,MAAM,EAAE;IAI7B,eAAe,IAAI,MAAM,EAAE;IAI3B,YAAY,IAAI,qBAAqB;IAI5C,OAAO,CAAC,sBAAsB;IAgCvB,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAU9G"}
|
|
@@ -54,6 +54,7 @@ const Pag_1 = require("./Pag");
|
|
|
54
54
|
const PagBuilder_1 = require("./PagBuilder");
|
|
55
55
|
const PointerAnalysisConfig_1 = require("./PointerAnalysisConfig");
|
|
56
56
|
const PtsDS_1 = require("./PtsDS");
|
|
57
|
+
const Local_1 = require("../../core/base/Local");
|
|
57
58
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'PTA');
|
|
58
59
|
class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
59
60
|
constructor(p, cg, s, config) {
|
|
@@ -181,19 +182,29 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
181
182
|
return true;
|
|
182
183
|
}
|
|
183
184
|
handleLoadWrite(nodeID) {
|
|
185
|
+
var _a;
|
|
184
186
|
let node = this.pag.getNode(nodeID);
|
|
187
|
+
let nodeValue = node.getValue();
|
|
185
188
|
let diffPts = this.ptd.getDiffPts(nodeID);
|
|
186
189
|
if (!diffPts || diffPts.count() === 0) {
|
|
187
190
|
return false;
|
|
188
191
|
}
|
|
189
192
|
// get related field node with current node's value
|
|
190
|
-
let instanceFieldNodeMap = this.pag.getNodesByBaseValue(
|
|
191
|
-
|
|
192
|
-
|
|
193
|
+
let instanceFieldNodeMap = (_a = this.pag.getNodesByBaseValue(nodeValue)) !== null && _a !== void 0 ? _a : new Map();
|
|
194
|
+
// get intra procedural field node by exportMap
|
|
195
|
+
let intraProceduralFieldNodeMap = new Map();
|
|
196
|
+
if (nodeValue instanceof Local_1.Local) {
|
|
197
|
+
this.pagBuilder.getExportVariableMap(nodeValue).forEach((dst) => {
|
|
198
|
+
var _a;
|
|
199
|
+
let temp = (_a = this.pag.getNodesByBaseValue(dst)) !== null && _a !== void 0 ? _a : new Map();
|
|
200
|
+
intraProceduralFieldNodeMap = this.mergeInstanceFieldMap(instanceFieldNodeMap, temp);
|
|
201
|
+
});
|
|
193
202
|
}
|
|
194
203
|
instanceFieldNodeMap.forEach((nodeIDs, cid) => {
|
|
195
204
|
// TODO: check cid
|
|
196
|
-
|
|
205
|
+
// cid === -1 will escape the check, mainly for globalThis
|
|
206
|
+
let baseCid = node.getCid();
|
|
207
|
+
if (baseCid !== -1 && cid !== baseCid) {
|
|
197
208
|
return;
|
|
198
209
|
}
|
|
199
210
|
nodeIDs.forEach((nodeID) => {
|
|
@@ -203,6 +214,15 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
203
214
|
this.handleFieldOutEdges(fieldNode, diffPts);
|
|
204
215
|
});
|
|
205
216
|
});
|
|
217
|
+
// without cid check, because closure and export is under different cid
|
|
218
|
+
intraProceduralFieldNodeMap.forEach((nodeIDs) => {
|
|
219
|
+
nodeIDs.forEach((nodeID) => {
|
|
220
|
+
// get abstract field node
|
|
221
|
+
let fieldNode = this.pag.getNode(nodeID);
|
|
222
|
+
this.handleFieldInEdges(fieldNode, diffPts);
|
|
223
|
+
this.handleFieldOutEdges(fieldNode, diffPts);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
206
226
|
return true;
|
|
207
227
|
}
|
|
208
228
|
handleFieldInEdges(fieldNode, diffPts) {
|
|
@@ -307,19 +327,8 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
307
327
|
logger.warn(`node ${nodeID} is not local node, value: ${node.getValue()}`);
|
|
308
328
|
return;
|
|
309
329
|
}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
logger.warn(`node ${nodeID} has no related dynamic call site`);
|
|
313
|
-
return;
|
|
314
|
-
}
|
|
315
|
-
logger.info(`[process dynamic callsite] node ${nodeID}`);
|
|
316
|
-
dynCallSites.forEach((dynCallsite) => {
|
|
317
|
-
for (let pt of pts) {
|
|
318
|
-
let srcNodes = this.pagBuilder.addDynamicCallEdge(dynCallsite, pt, node.getCid());
|
|
319
|
-
changed = this.addToReanalyze(srcNodes) || changed;
|
|
320
|
-
}
|
|
321
|
-
processedCallSites.add(dynCallsite);
|
|
322
|
-
});
|
|
330
|
+
changed = this.processDynCallSite(node, pts, processedCallSites) || changed;
|
|
331
|
+
changed = this.processUnknownCallSite(node, pts) || changed;
|
|
323
332
|
});
|
|
324
333
|
this.pagBuilder.resetUpdatedNodes();
|
|
325
334
|
let srcNodes = this.pagBuilder.handleUnprocessedCallSites(processedCallSites);
|
|
@@ -328,6 +337,39 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
328
337
|
this.initWorklist();
|
|
329
338
|
return changed;
|
|
330
339
|
}
|
|
340
|
+
processDynCallSite(node, pts, processedCallSites) {
|
|
341
|
+
let changed = false;
|
|
342
|
+
let dynCallSites = node.getRelatedDynCallSites();
|
|
343
|
+
if (!dynCallSites && !node.isSdkParam()) {
|
|
344
|
+
logger.warn(`node ${node.getID()} has no related dynamic call site`);
|
|
345
|
+
return changed;
|
|
346
|
+
}
|
|
347
|
+
logger.info(`[process dynamic callsite] node ${node.getID()}`);
|
|
348
|
+
dynCallSites.forEach((dynCallsite) => {
|
|
349
|
+
for (let pt of pts) {
|
|
350
|
+
let srcNodes = this.pagBuilder.addDynamicCallEdge(dynCallsite, pt, node.getCid());
|
|
351
|
+
changed = this.addToReanalyze(srcNodes) || changed;
|
|
352
|
+
}
|
|
353
|
+
processedCallSites.add(dynCallsite);
|
|
354
|
+
});
|
|
355
|
+
return changed;
|
|
356
|
+
}
|
|
357
|
+
processUnknownCallSite(node, pts) {
|
|
358
|
+
let changed = false;
|
|
359
|
+
let unknownCallSites = node.getRelatedUnknownCallSites();
|
|
360
|
+
if (!unknownCallSites) {
|
|
361
|
+
logger.warn(`node ${node.getID()} has no related unknown call site`);
|
|
362
|
+
return changed;
|
|
363
|
+
}
|
|
364
|
+
logger.info(`[process unknown callsite] node ${node.getID()}`);
|
|
365
|
+
unknownCallSites.forEach((unknownCallSite) => {
|
|
366
|
+
for (let pt of pts) {
|
|
367
|
+
let srcNodes = this.pagBuilder.addDynamicCallEdge(unknownCallSite, pt, node.getCid());
|
|
368
|
+
changed = this.addToReanalyze(srcNodes) || changed;
|
|
369
|
+
}
|
|
370
|
+
});
|
|
371
|
+
return changed;
|
|
372
|
+
}
|
|
331
373
|
addToReanalyze(startNodes) {
|
|
332
374
|
let flag = false;
|
|
333
375
|
for (let node of startNodes) {
|
|
@@ -493,7 +535,7 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
493
535
|
let updatedContent = '';
|
|
494
536
|
this.getUnhandledFuncs().forEach(funcID => {
|
|
495
537
|
let cgNode = this.cg.getNode(funcID);
|
|
496
|
-
if (cgNode.
|
|
538
|
+
if (cgNode.isSdkMethod()) {
|
|
497
539
|
return;
|
|
498
540
|
}
|
|
499
541
|
let f = this.cg.getArkMethodByFuncID(funcID);
|
|
@@ -508,5 +550,16 @@ class PointerAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
508
550
|
});
|
|
509
551
|
});
|
|
510
552
|
}
|
|
553
|
+
mergeInstanceFieldMap(src, dst) {
|
|
554
|
+
dst.forEach((value, key) => {
|
|
555
|
+
if (src.has(key)) {
|
|
556
|
+
src.set(key, [...src.get(key), ...value]);
|
|
557
|
+
}
|
|
558
|
+
else {
|
|
559
|
+
src.set(key, value);
|
|
560
|
+
}
|
|
561
|
+
});
|
|
562
|
+
return src;
|
|
563
|
+
}
|
|
511
564
|
}
|
|
512
565
|
exports.PointerAnalysis = PointerAnalysis;
|
|
@@ -4,26 +4,46 @@ import { Value } from './Value';
|
|
|
4
4
|
* @category core/base
|
|
5
5
|
*/
|
|
6
6
|
export declare class Constant implements Value {
|
|
7
|
-
private value;
|
|
8
|
-
private type;
|
|
9
|
-
constructor(value: string, type
|
|
7
|
+
private readonly value;
|
|
8
|
+
private readonly type;
|
|
9
|
+
constructor(value: string, type: Type);
|
|
10
10
|
/**
|
|
11
11
|
* Returns the constant's value as a **string**.
|
|
12
12
|
* @returns The constant's value.
|
|
13
13
|
*/
|
|
14
14
|
getValue(): string;
|
|
15
|
-
setValue(newValue: string): void;
|
|
16
15
|
getUses(): Value[];
|
|
17
16
|
/**
|
|
18
17
|
* Returns the type of this constant.
|
|
19
18
|
* @returns The type of this constant.
|
|
20
19
|
*/
|
|
21
20
|
getType(): Type;
|
|
22
|
-
setType(newType: Type): void;
|
|
23
21
|
/**
|
|
24
22
|
* Get a string of constant value in Constant.
|
|
25
23
|
* @returns The string of constant value.
|
|
26
24
|
*/
|
|
27
25
|
toString(): string;
|
|
28
26
|
}
|
|
27
|
+
export declare class BooleanConstant extends Constant {
|
|
28
|
+
private static readonly FALSE;
|
|
29
|
+
private static readonly TRUE;
|
|
30
|
+
constructor(value: boolean);
|
|
31
|
+
static getInstance(value: boolean): NullConstant;
|
|
32
|
+
}
|
|
33
|
+
export declare class NumberConstant extends Constant {
|
|
34
|
+
constructor(value: number);
|
|
35
|
+
}
|
|
36
|
+
export declare class StringConstant extends Constant {
|
|
37
|
+
constructor(value: string);
|
|
38
|
+
}
|
|
39
|
+
export declare class NullConstant extends Constant {
|
|
40
|
+
private static readonly INSTANCE;
|
|
41
|
+
constructor();
|
|
42
|
+
static getInstance(): NullConstant;
|
|
43
|
+
}
|
|
44
|
+
export declare class UndefinedConstant extends Constant {
|
|
45
|
+
private static readonly INSTANCE;
|
|
46
|
+
constructor();
|
|
47
|
+
static getInstance(): UndefinedConstant;
|
|
48
|
+
}
|
|
29
49
|
//# sourceMappingURL=Constant.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Constant.d.ts","sourceRoot":"","sources":["../../../src/core/base/Constant.ts"],"names":[],"mappings":"AAeA,OAAO,
|
|
1
|
+
{"version":3,"file":"Constant.d.ts","sourceRoot":"","sources":["../../../src/core/base/Constant.ts"],"names":[],"mappings":"AAeA,OAAO,EAAiD,IAAI,EAAiB,MAAM,QAAQ,CAAC;AAC5F,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC;;GAEG;AACH,qBAAa,QAAS,YAAW,KAAK;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;gBAEhB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;IAKrC;;;OAGG;IACI,QAAQ,IAAI,MAAM;IAIlB,OAAO,IAAI,KAAK,EAAE;IAIzB;;;OAGG;IACI,OAAO,IAAI,IAAI;IAItB;;;OAGG;IACI,QAAQ,IAAI,MAAM;CAS5B;AAED,qBAAa,eAAgB,SAAQ,QAAQ;IACzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAA8B;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAA6B;gBAE7C,KAAK,EAAE,OAAO;WAIZ,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY;CAG1D;AAED,qBAAa,cAAe,SAAQ,QAAQ;gBAC5B,KAAK,EAAE,MAAM;CAG5B;AAED,qBAAa,cAAe,SAAQ,QAAQ;gBAC5B,KAAK,EAAE,MAAM;CAG5B;AAED,qBAAa,YAAa,SAAQ,QAAQ;IACtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAsB;;WAMxC,WAAW,IAAI,YAAY;CAG5C;AAED,qBAAa,iBAAkB,SAAQ,QAAQ;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA2B;;WAM7C,WAAW,IAAI,iBAAiB;CAGjD"}
|
|
@@ -14,13 +14,14 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.Constant = void 0;
|
|
17
|
+
exports.UndefinedConstant = exports.NullConstant = exports.StringConstant = exports.NumberConstant = exports.BooleanConstant = exports.Constant = void 0;
|
|
18
18
|
const Type_1 = require("./Type");
|
|
19
|
+
const TSConst_1 = require("../common/TSConst");
|
|
19
20
|
/**
|
|
20
21
|
* @category core/base
|
|
21
22
|
*/
|
|
22
23
|
class Constant {
|
|
23
|
-
constructor(value, type
|
|
24
|
+
constructor(value, type) {
|
|
24
25
|
this.value = value;
|
|
25
26
|
this.type = type;
|
|
26
27
|
}
|
|
@@ -31,9 +32,6 @@ class Constant {
|
|
|
31
32
|
getValue() {
|
|
32
33
|
return this.value;
|
|
33
34
|
}
|
|
34
|
-
setValue(newValue) {
|
|
35
|
-
this.value = newValue;
|
|
36
|
-
}
|
|
37
35
|
getUses() {
|
|
38
36
|
return [];
|
|
39
37
|
}
|
|
@@ -44,9 +42,6 @@ class Constant {
|
|
|
44
42
|
getType() {
|
|
45
43
|
return this.type;
|
|
46
44
|
}
|
|
47
|
-
setType(newType) {
|
|
48
|
-
this.type = newType;
|
|
49
|
-
}
|
|
50
45
|
/**
|
|
51
46
|
* Get a string of constant value in Constant.
|
|
52
47
|
* @returns The string of constant value.
|
|
@@ -63,3 +58,46 @@ class Constant {
|
|
|
63
58
|
}
|
|
64
59
|
}
|
|
65
60
|
exports.Constant = Constant;
|
|
61
|
+
class BooleanConstant extends Constant {
|
|
62
|
+
constructor(value) {
|
|
63
|
+
super(value.toString(), Type_1.BooleanType.getInstance());
|
|
64
|
+
}
|
|
65
|
+
static getInstance(value) {
|
|
66
|
+
return value ? this.TRUE : this.FALSE;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.BooleanConstant = BooleanConstant;
|
|
70
|
+
BooleanConstant.FALSE = new BooleanConstant(false);
|
|
71
|
+
BooleanConstant.TRUE = new BooleanConstant(true);
|
|
72
|
+
class NumberConstant extends Constant {
|
|
73
|
+
constructor(value) {
|
|
74
|
+
super(value.toString(), Type_1.NumberType.getInstance());
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.NumberConstant = NumberConstant;
|
|
78
|
+
class StringConstant extends Constant {
|
|
79
|
+
constructor(value) {
|
|
80
|
+
super(value.toString(), Type_1.StringType.getInstance());
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.StringConstant = StringConstant;
|
|
84
|
+
class NullConstant extends Constant {
|
|
85
|
+
constructor() {
|
|
86
|
+
super(TSConst_1.NULL_KEYWORD, Type_1.NullType.getInstance());
|
|
87
|
+
}
|
|
88
|
+
static getInstance() {
|
|
89
|
+
return this.INSTANCE;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.NullConstant = NullConstant;
|
|
93
|
+
NullConstant.INSTANCE = new NullConstant();
|
|
94
|
+
class UndefinedConstant extends Constant {
|
|
95
|
+
constructor() {
|
|
96
|
+
super(TSConst_1.UNDEFINED_KEYWORD, Type_1.UndefinedType.getInstance());
|
|
97
|
+
}
|
|
98
|
+
static getInstance() {
|
|
99
|
+
return this.INSTANCE;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.UndefinedConstant = UndefinedConstant;
|
|
103
|
+
UndefinedConstant.INSTANCE = new UndefinedConstant();
|
package/lib/core/base/Expr.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { BasicBlock } from '../graph/BasicBlock';
|
|
2
|
-
import { ArkClass } from '../model/ArkClass';
|
|
3
2
|
import { MethodSignature } from '../model/ArkSignature';
|
|
4
3
|
import { Local } from './Local';
|
|
5
4
|
import { ArrayType, ClassType, Type } from './Type';
|
|
6
5
|
import { Value } from './Value';
|
|
7
6
|
import { AbstractFieldRef } from './Ref';
|
|
7
|
+
import { Scene } from '../../Scene';
|
|
8
|
+
import { ArkMethod } from '../model/ArkMethod';
|
|
8
9
|
/**
|
|
9
10
|
* @category core/base/expr
|
|
10
11
|
*/
|
|
@@ -12,7 +13,7 @@ export declare abstract class AbstractExpr implements Value {
|
|
|
12
13
|
abstract getUses(): Value[];
|
|
13
14
|
abstract getType(): Type;
|
|
14
15
|
abstract toString(): string;
|
|
15
|
-
inferType(
|
|
16
|
+
inferType(arkMethod: ArkMethod): AbstractExpr;
|
|
16
17
|
}
|
|
17
18
|
export declare abstract class AbstractInvokeExpr extends AbstractExpr {
|
|
18
19
|
private methodSignature;
|
|
@@ -26,12 +27,12 @@ export declare abstract class AbstractInvokeExpr extends AbstractExpr {
|
|
|
26
27
|
* @example
|
|
27
28
|
* 1. 3AC information composed of getMethodSignature ().
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
```typescript
|
|
31
|
+
let strs: string[] = [];
|
|
32
|
+
strs.push('staticinvoke <');
|
|
33
|
+
strs.push(this.getMethodSignature().toString());
|
|
34
|
+
strs.push('>(');
|
|
35
|
+
```
|
|
35
36
|
*/
|
|
36
37
|
getMethodSignature(): MethodSignature;
|
|
37
38
|
setMethodSignature(newMethodSignature: MethodSignature): void;
|
|
@@ -47,26 +48,30 @@ export declare abstract class AbstractInvokeExpr extends AbstractExpr {
|
|
|
47
48
|
* @example
|
|
48
49
|
* 1. get args number.
|
|
49
50
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
```typescript
|
|
52
|
+
const argsNum = expr.getArgs().length;
|
|
53
|
+
if (argsNum < 5) {
|
|
54
|
+
... ...
|
|
55
|
+
}
|
|
56
|
+
```
|
|
56
57
|
|
|
57
|
-
|
|
58
|
+
2. iterate arg based on expression
|
|
58
59
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
```typescript
|
|
61
|
+
for (const arg of this.getArgs()) {
|
|
62
|
+
strs.push(arg.toString());
|
|
63
|
+
strs.push(', ');
|
|
64
|
+
}
|
|
65
|
+
```
|
|
65
66
|
*/
|
|
66
67
|
getArgs(): Value[];
|
|
67
68
|
setArgs(newArgs: Value[]): void;
|
|
69
|
+
inferArgs(arkMethod: ArkMethod): void;
|
|
70
|
+
private inferArg;
|
|
68
71
|
getType(): Type;
|
|
69
72
|
getRealGenericTypes(): Type[] | undefined;
|
|
73
|
+
inferMethod(baseType: Type, methodName: string, scene: Scene): AbstractInvokeExpr | null;
|
|
74
|
+
private processClassMethod;
|
|
70
75
|
getUses(): Value[];
|
|
71
76
|
}
|
|
72
77
|
export declare class ArkInstanceInvokeExpr extends AbstractInvokeExpr {
|
|
@@ -86,15 +91,15 @@ export declare class ArkInstanceInvokeExpr extends AbstractInvokeExpr {
|
|
|
86
91
|
*/
|
|
87
92
|
getUses(): Value[];
|
|
88
93
|
toString(): string;
|
|
89
|
-
inferType(
|
|
94
|
+
inferType(arkMethod: ArkMethod): AbstractInvokeExpr;
|
|
90
95
|
private processForEach;
|
|
91
96
|
private tryInferFormGlobal;
|
|
92
|
-
private inferMethod;
|
|
93
97
|
}
|
|
94
98
|
export declare class ArkStaticInvokeExpr extends AbstractInvokeExpr {
|
|
95
99
|
constructor(methodSignature: MethodSignature, args: Value[], realGenericTypes?: Type[]);
|
|
96
100
|
toString(): string;
|
|
97
|
-
inferType(
|
|
101
|
+
inferType(arkMethod: ArkMethod): ArkStaticInvokeExpr;
|
|
102
|
+
private processDynamicImport;
|
|
98
103
|
}
|
|
99
104
|
export declare class ArkPtrInvokeExpr extends AbstractInvokeExpr {
|
|
100
105
|
private funPtrLocal;
|
|
@@ -102,7 +107,7 @@ export declare class ArkPtrInvokeExpr extends AbstractInvokeExpr {
|
|
|
102
107
|
setFunPtrLocal(ptr: Local): void;
|
|
103
108
|
getFuncPtrLocal(): Local;
|
|
104
109
|
toString(): string;
|
|
105
|
-
inferType(
|
|
110
|
+
inferType(arkMethod: ArkMethod): ArkPtrInvokeExpr;
|
|
106
111
|
}
|
|
107
112
|
export declare class ArkNewExpr extends AbstractExpr {
|
|
108
113
|
private classType;
|
|
@@ -111,7 +116,7 @@ export declare class ArkNewExpr extends AbstractExpr {
|
|
|
111
116
|
getUses(): Value[];
|
|
112
117
|
getType(): Type;
|
|
113
118
|
toString(): string;
|
|
114
|
-
inferType(
|
|
119
|
+
inferType(arkMethod: ArkMethod): ArkNewExpr;
|
|
115
120
|
}
|
|
116
121
|
export declare class ArkNewArrayExpr extends AbstractExpr {
|
|
117
122
|
private baseType;
|
|
@@ -124,7 +129,7 @@ export declare class ArkNewArrayExpr extends AbstractExpr {
|
|
|
124
129
|
getBaseType(): Type;
|
|
125
130
|
setBaseType(newType: Type): void;
|
|
126
131
|
isFromLiteral(): boolean;
|
|
127
|
-
inferType(
|
|
132
|
+
inferType(arkMethod: ArkMethod): ArkNewArrayExpr;
|
|
128
133
|
getUses(): Value[];
|
|
129
134
|
toString(): string;
|
|
130
135
|
}
|
|
@@ -143,7 +148,7 @@ export declare class ArkAwaitExpr extends AbstractExpr {
|
|
|
143
148
|
getPromise(): Value;
|
|
144
149
|
setPromise(newPromise: Value): void;
|
|
145
150
|
getType(): Type;
|
|
146
|
-
inferType(
|
|
151
|
+
inferType(arkMethod: ArkMethod): ArkAwaitExpr;
|
|
147
152
|
getUses(): Value[];
|
|
148
153
|
toString(): string;
|
|
149
154
|
}
|
|
@@ -210,26 +215,26 @@ export declare abstract class AbstractBinopExpr extends AbstractExpr {
|
|
|
210
215
|
* one is the normal binary operator and the other is relational binary operator.
|
|
211
216
|
* @returns The binary operator from the statement.
|
|
212
217
|
* @example
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
218
|
+
```typescript
|
|
219
|
+
if (expr instanceof AbstractBinopExpr) {
|
|
220
|
+
let op1: Value = expr.getOp1();
|
|
221
|
+
let op2: Value = expr.getOp2();
|
|
222
|
+
let operator: string = expr.getOperator();
|
|
223
|
+
... ...
|
|
224
|
+
}
|
|
225
|
+
```
|
|
221
226
|
*/
|
|
222
227
|
getOperator(): BinaryOperator;
|
|
223
228
|
getType(): Type;
|
|
224
229
|
getUses(): Value[];
|
|
225
230
|
toString(): string;
|
|
226
|
-
protected inferOpType(op: Value,
|
|
231
|
+
protected inferOpType(op: Value, arkMethod: ArkMethod): void;
|
|
227
232
|
protected setType(): void;
|
|
228
|
-
inferType(
|
|
233
|
+
inferType(arkMethod: ArkMethod): AbstractBinopExpr;
|
|
229
234
|
}
|
|
230
235
|
export declare class ArkConditionExpr extends AbstractBinopExpr {
|
|
231
236
|
constructor(op1: Value, op2: Value, operator: RelationalBinaryOperator);
|
|
232
|
-
inferType(
|
|
237
|
+
inferType(arkMethod: ArkMethod): ArkConditionExpr;
|
|
233
238
|
}
|
|
234
239
|
export declare class ArkNormalBinopExpr extends AbstractBinopExpr {
|
|
235
240
|
constructor(op1: Value, op2: Value, operator: NormalBinaryOperator);
|
|
@@ -262,7 +267,7 @@ export declare class ArkCastExpr extends AbstractExpr {
|
|
|
262
267
|
setOp(newOp: Value): void;
|
|
263
268
|
getUses(): Value[];
|
|
264
269
|
getType(): Type;
|
|
265
|
-
inferType(
|
|
270
|
+
inferType(arkMethod: ArkMethod): AbstractExpr;
|
|
266
271
|
toString(): string;
|
|
267
272
|
}
|
|
268
273
|
export declare class ArkPhiExpr extends AbstractExpr {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Expr.d.ts","sourceRoot":"","sources":["../../../src/core/base/Expr.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"Expr.d.ts","sourceRoot":"","sources":["../../../src/core/base/Expr.ts"],"names":[],"mappings":"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"}
|