arkanalyzer 1.0.27 → 1.0.28

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.
Files changed (42) hide show
  1. package/config/arkanalyzer.json +1 -0
  2. package/lib/VFG/DVFG.d.ts +43 -0
  3. package/lib/VFG/DVFG.d.ts.map +1 -0
  4. package/lib/VFG/DVFG.js +109 -0
  5. package/lib/VFG/builder/DVFGBuilder.d.ts +17 -0
  6. package/lib/VFG/builder/DVFGBuilder.d.ts.map +1 -0
  7. package/lib/VFG/builder/DVFGBuilder.js +111 -0
  8. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
  9. package/lib/callgraph/algorithm/AbstractAnalysis.js +1 -0
  10. package/lib/callgraph/model/CallGraph.d.ts +4 -0
  11. package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
  12. package/lib/callgraph/model/CallGraph.js +29 -0
  13. package/lib/callgraph/pointerAnalysis/Pag.js +3 -3
  14. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +10 -3
  15. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  16. package/lib/callgraph/pointerAnalysis/PagBuilder.js +141 -62
  17. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +2 -0
  18. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
  19. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +33 -7
  20. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +7 -2
  21. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts.map +1 -1
  22. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +10 -4
  23. package/lib/core/base/Ref.d.ts +0 -1
  24. package/lib/core/base/Ref.d.ts.map +1 -1
  25. package/lib/core/base/Ref.js +0 -11
  26. package/lib/core/base/Type.d.ts.map +1 -1
  27. package/lib/core/common/IRInference.d.ts +3 -0
  28. package/lib/core/common/IRInference.d.ts.map +1 -1
  29. package/lib/core/common/IRInference.js +62 -23
  30. package/lib/core/common/SdkUtils.js +1 -1
  31. package/lib/core/common/TypeInference.d.ts +5 -3
  32. package/lib/core/common/TypeInference.d.ts.map +1 -1
  33. package/lib/core/common/TypeInference.js +92 -59
  34. package/lib/core/dataflow/ReachingDef.d.ts.map +1 -1
  35. package/lib/core/dataflow/ReachingDef.js +1 -0
  36. package/lib/core/graph/BaseImplicitGraph.d.ts +1 -0
  37. package/lib/core/graph/BaseImplicitGraph.d.ts.map +1 -1
  38. package/lib/core/graph/BaseImplicitGraph.js +6 -0
  39. package/lib/index.d.ts +2 -0
  40. package/lib/index.d.ts.map +1 -1
  41. package/lib/index.js +6 -2
  42. package/package.json +2 -2
@@ -9,6 +9,7 @@
9
9
  "ignoreFileNames": [
10
10
  "oh_modules",
11
11
  "node_modules",
12
+ "build-tools",
12
13
  "hvigorfile.ts"
13
14
  ],
14
15
  "sdkGlobalFolders": [
@@ -0,0 +1,43 @@
1
+ import { BaseEdge, BaseExplicitGraph, BaseNode, NodeID } from '../core/graph/BaseExplicitGraph';
2
+ import { CallGraph } from '../callgraph/model/CallGraph';
3
+ import { Stmt } from '../core/base/Stmt';
4
+ /**
5
+ * Direct value flow graph
6
+ * Consist of stmt(node) and direct Def-Use edge
7
+ * Is basic of VFG. And VFG is building on DVFG
8
+ */
9
+ export declare class DVFG extends BaseExplicitGraph {
10
+ private cg;
11
+ private stmtToVFGMap;
12
+ constructor(cg: CallGraph);
13
+ getCG(): CallGraph;
14
+ getGraphName(): string;
15
+ getOrNewDVFGNode(stmt: Stmt): DVFGNode;
16
+ addDVFGNode(stmt: Stmt, kind: DVFGNodeKind): DVFGNode;
17
+ addDVFGEdge(src: DVFGNode, dst: DVFGNode): boolean;
18
+ dump(name: string): void;
19
+ }
20
+ export declare enum DVFGNodeKind {
21
+ assign = 0,
22
+ copy = 1,
23
+ write = 2,
24
+ load = 3,
25
+ addr = 4,
26
+ if = 5,
27
+ actualParm = 6,
28
+ formalParm = 7,
29
+ actualRet = 8,
30
+ formalRet = 9,
31
+ unary = 10,
32
+ binary = 11,
33
+ normal = 12
34
+ }
35
+ export declare class DVFGNode extends BaseNode {
36
+ private stmt;
37
+ constructor(i: NodeID, k: DVFGNodeKind, s: Stmt);
38
+ getDotLabel(): string;
39
+ getStmt(): Stmt;
40
+ }
41
+ export declare class DVFGEdge extends BaseEdge {
42
+ }
43
+ //# sourceMappingURL=DVFG.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DVFG.d.ts","sourceRoot":"","sources":["../../src/VFG/DVFG.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAChG,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAiB,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAIxD;;;;GAIG;AACH,qBAAa,IAAK,SAAQ,iBAAiB;IACvC,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,YAAY,CAAoB;gBAC5B,EAAE,EAAE,SAAS;IAMlB,KAAK,IAAI,SAAS;IAIlB,YAAY,IAAI,MAAM;IAItB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ;IAiBtC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,GAAG,QAAQ;IASrD,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO;IAalD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAIlC;AAED,oBAAY,YAAY;IACpB,MAAM,IAAA;IAAE,IAAI,IAAA;IAAE,KAAK,IAAA;IAAE,IAAI,IAAA;IAAE,IAAI,IAAA;IAAE,EAAE,IAAA;IAAE,UAAU,IAAA;IAAE,UAAU,IAAA;IAAE,SAAS,IAAA;IACtE,SAAS,IAAA;IAAE,KAAK,KAAA;IAAE,MAAM,KAAA;IAAE,MAAM,KAAA;CACnC;AAED,qBAAa,QAAS,SAAQ,QAAQ;IAClC,OAAO,CAAC,IAAI,CAAO;gBAEP,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI;IAKxC,WAAW,IAAI,MAAM;IAMrB,OAAO,IAAI,IAAI;CAGzB;AAED,qBAAa,QAAS,SAAQ,QAAQ;CAAG"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DVFGEdge = exports.DVFGNode = exports.DVFGNodeKind = exports.DVFG = void 0;
4
+ /*
5
+ * Copyright (c) 2025 Huawei Device Co., Ltd.
6
+ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ const BaseExplicitGraph_1 = require("../core/graph/BaseExplicitGraph");
18
+ const Stmt_1 = require("../core/base/Stmt");
19
+ const GraphPrinter_1 = require("../save/GraphPrinter");
20
+ const PrinterBuilder_1 = require("../save/PrinterBuilder");
21
+ /**
22
+ * Direct value flow graph
23
+ * Consist of stmt(node) and direct Def-Use edge
24
+ * Is basic of VFG. And VFG is building on DVFG
25
+ */
26
+ class DVFG extends BaseExplicitGraph_1.BaseExplicitGraph {
27
+ constructor(cg) {
28
+ super();
29
+ this.cg = cg;
30
+ this.stmtToVFGMap = new Map();
31
+ }
32
+ getCG() {
33
+ return this.cg;
34
+ }
35
+ getGraphName() {
36
+ return 'Direct-VFG';
37
+ }
38
+ getOrNewDVFGNode(stmt) {
39
+ let node = this.stmtToVFGMap.get(stmt);
40
+ if (node) {
41
+ return this.getNode(node);
42
+ }
43
+ let kind = DVFGNodeKind.normal;
44
+ if (stmt instanceof Stmt_1.ArkAssignStmt) {
45
+ //TODO: split assign to copy, write, load
46
+ kind = DVFGNodeKind.assign;
47
+ }
48
+ else {
49
+ // TODO: handle other type of stmt
50
+ }
51
+ return this.addDVFGNode(stmt, kind);
52
+ }
53
+ addDVFGNode(stmt, kind) {
54
+ let id = this.nodeNum;
55
+ let dvfgNode = new DVFGNode(id, kind, stmt);
56
+ this.addNode(dvfgNode);
57
+ this.stmtToVFGMap.set(stmt, dvfgNode.getID());
58
+ return dvfgNode;
59
+ }
60
+ addDVFGEdge(src, dst) {
61
+ let kind = 0; //common kind
62
+ let edge = new DVFGEdge(src, dst, kind);
63
+ if (this.ifEdgeExisting(edge)) {
64
+ return false;
65
+ }
66
+ src.addOutgoingEdge(edge);
67
+ dst.addIncomingEdge(edge);
68
+ return true;
69
+ }
70
+ dump(name) {
71
+ let printer = new GraphPrinter_1.GraphPrinter(this);
72
+ PrinterBuilder_1.PrinterBuilder.dump(printer, name);
73
+ }
74
+ }
75
+ exports.DVFG = DVFG;
76
+ var DVFGNodeKind;
77
+ (function (DVFGNodeKind) {
78
+ DVFGNodeKind[DVFGNodeKind["assign"] = 0] = "assign";
79
+ DVFGNodeKind[DVFGNodeKind["copy"] = 1] = "copy";
80
+ DVFGNodeKind[DVFGNodeKind["write"] = 2] = "write";
81
+ DVFGNodeKind[DVFGNodeKind["load"] = 3] = "load";
82
+ DVFGNodeKind[DVFGNodeKind["addr"] = 4] = "addr";
83
+ DVFGNodeKind[DVFGNodeKind["if"] = 5] = "if";
84
+ DVFGNodeKind[DVFGNodeKind["actualParm"] = 6] = "actualParm";
85
+ DVFGNodeKind[DVFGNodeKind["formalParm"] = 7] = "formalParm";
86
+ DVFGNodeKind[DVFGNodeKind["actualRet"] = 8] = "actualRet";
87
+ DVFGNodeKind[DVFGNodeKind["formalRet"] = 9] = "formalRet";
88
+ DVFGNodeKind[DVFGNodeKind["unary"] = 10] = "unary";
89
+ DVFGNodeKind[DVFGNodeKind["binary"] = 11] = "binary";
90
+ DVFGNodeKind[DVFGNodeKind["normal"] = 12] = "normal";
91
+ })(DVFGNodeKind = exports.DVFGNodeKind || (exports.DVFGNodeKind = {}));
92
+ class DVFGNode extends BaseExplicitGraph_1.BaseNode {
93
+ constructor(i, k, s) {
94
+ super(i, k);
95
+ this.stmt = s;
96
+ }
97
+ getDotLabel() {
98
+ let label = 'ID: ' + this.getID() + '\n';
99
+ label = label + this.stmt.toString();
100
+ return label;
101
+ }
102
+ getStmt() {
103
+ return this.stmt;
104
+ }
105
+ }
106
+ exports.DVFGNode = DVFGNode;
107
+ class DVFGEdge extends BaseExplicitGraph_1.BaseEdge {
108
+ }
109
+ exports.DVFGEdge = DVFGEdge;
@@ -0,0 +1,17 @@
1
+ import { Stmt } from '../../core/base/Stmt';
2
+ import { ArkMethod } from '../../core/model/ArkMethod';
3
+ import { Scene } from '../../Scene';
4
+ import { DVFG } from '../DVFG';
5
+ export declare class DVFGBuilder {
6
+ private dvfg;
7
+ private scene;
8
+ constructor(dvfg: DVFG, s: Scene);
9
+ build(): void;
10
+ buildForSingleMethod(m: ArkMethod): void;
11
+ private getStmtUsedValues;
12
+ private getUsedValues;
13
+ getOrNewDVFGNode(stmt: Stmt): import("../DVFG").DVFGNode;
14
+ addDVFGNodes(): void;
15
+ addDVFGEdges(): void;
16
+ }
17
+ //# sourceMappingURL=DVFGBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DVFGBuilder.d.ts","sourceRoot":"","sources":["../../../src/VFG/builder/DVFGBuilder.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAwE,IAAI,EAA6C,MAAM,sBAAsB,CAAC;AAK7J,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,qBAAa,WAAW;IACpB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,KAAK,CAAQ;gBAET,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK;IAKzB,KAAK;IAIL,oBAAoB,CAAC,CAAC,EAAE,SAAS;IAsCxC,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,aAAa;IAcd,gBAAgB,CAAC,IAAI,EAAE,IAAI;IAI3B,YAAY,IAAI,IAAI;IAEpB,YAAY,IAAI,IAAI;CAC9B"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2025 Huawei Device Co., Ltd.
4
+ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License.
5
+ * You may obtain a copy of the License at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software
10
+ * distributed under the License is distributed on an "AS IS" BASIS,
11
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ * See the License for the specific language governing permissions and
13
+ * limitations under the License.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.DVFGBuilder = void 0;
17
+ const Constant_1 = require("../../core/base/Constant");
18
+ const Expr_1 = require("../../core/base/Expr");
19
+ const Ref_1 = require("../../core/base/Ref");
20
+ const Stmt_1 = require("../../core/base/Stmt");
21
+ const ArkIRTransformer_1 = require("../../core/common/ArkIRTransformer");
22
+ const GenericDataFlow_1 = require("../../core/dataflow/GenericDataFlow");
23
+ const ReachingDef_1 = require("../../core/dataflow/ReachingDef");
24
+ class DVFGBuilder {
25
+ constructor(dvfg, s) {
26
+ this.dvfg = dvfg;
27
+ this.scene = s;
28
+ }
29
+ build() {
30
+ this.scene.getMethods().map(m => this.buildForSingleMethod(m));
31
+ }
32
+ buildForSingleMethod(m) {
33
+ let problem = new ReachingDef_1.ReachingDefProblem(m);
34
+ let solver = new GenericDataFlow_1.MFPDataFlowSolver();
35
+ let solution = solver.calculateMopSolutionForwards(problem);
36
+ let defMap = new Map();
37
+ m.getCfg().getStmts().forEach((s) => {
38
+ var _a;
39
+ let def = s.getDef();
40
+ if (def != null) {
41
+ if (def instanceof Ref_1.AbstractFieldRef) {
42
+ def = def.getFieldSignature();
43
+ }
44
+ let defStmts = (_a = defMap.get(def)) !== null && _a !== void 0 ? _a : new Set();
45
+ defStmts.add(s);
46
+ defMap.set(def, defStmts);
47
+ }
48
+ });
49
+ solution.in.forEach((defs, reach) => {
50
+ const reachStmt = problem.flowGraph.getNode(reach);
51
+ this.getStmtUsedValues(reachStmt).forEach(use => {
52
+ var _a;
53
+ let target = use;
54
+ if (target instanceof Ref_1.AbstractFieldRef) {
55
+ target = target.getFieldSignature();
56
+ }
57
+ (_a = defMap.get(target)) === null || _a === void 0 ? void 0 : _a.forEach((defStmt) => {
58
+ let defId = problem.flowGraph.getNodeID(defStmt);
59
+ if (defs.test(defId)) {
60
+ let srcNode = this.dvfg.getOrNewDVFGNode(defStmt);
61
+ let dstNode = this.dvfg.getOrNewDVFGNode(reachStmt);
62
+ this.dvfg.addDVFGEdge(srcNode, dstNode);
63
+ }
64
+ });
65
+ });
66
+ });
67
+ }
68
+ getStmtUsedValues(stmt) {
69
+ if (stmt instanceof Stmt_1.ArkAssignStmt) {
70
+ return this.getUsedValues(stmt.getRightOp());
71
+ }
72
+ else if (stmt instanceof Stmt_1.ArkInvokeStmt) {
73
+ return this.getUsedValues(stmt.getInvokeExpr());
74
+ }
75
+ else if (stmt instanceof Stmt_1.ArkIfStmt) {
76
+ return this.getUsedValues(stmt.getConditionExpr());
77
+ }
78
+ else if (stmt instanceof Stmt_1.ArkReturnStmt) {
79
+ return this.getUsedValues(stmt.getOp());
80
+ }
81
+ else if (stmt instanceof Stmt_1.ArkThrowStmt) {
82
+ return this.getUsedValues(stmt.getOp());
83
+ }
84
+ else if (stmt instanceof Stmt_1.ArkReturnVoidStmt || stmt instanceof Stmt_1.ArkAliasTypeDefineStmt || stmt instanceof ArkIRTransformer_1.DummyStmt) {
85
+ return [];
86
+ }
87
+ else {
88
+ throw new Error('unsupported stmt');
89
+ }
90
+ }
91
+ getUsedValues(val) {
92
+ if (val instanceof Expr_1.AbstractExpr) {
93
+ if (val instanceof Expr_1.AbstractInvokeExpr) {
94
+ return val.getArgs().flatMap((current) => { return this.getUsedValues(current); }, []);
95
+ }
96
+ else {
97
+ return val.getUses().flatMap((current) => { return this.getUsedValues(current); }, []);
98
+ }
99
+ }
100
+ if (val instanceof Constant_1.Constant) {
101
+ return [];
102
+ }
103
+ return [val];
104
+ }
105
+ getOrNewDVFGNode(stmt) {
106
+ return this.dvfg.getOrNewDVFGNode(stmt);
107
+ }
108
+ addDVFGNodes() { }
109
+ addDVFGEdges() { }
110
+ }
111
+ exports.DVFGBuilder = DVFGBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/AbstractAnalysis.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAiB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAIrE,8BAAsB,gBAAgB;IAClC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,EAAG,SAAS,CAAC;IACzB,SAAS,CAAC,SAAS,EAAG,gBAAgB,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAM;IAClC,SAAS,CAAC,eAAe,EAAG,GAAG,CAAC,MAAM,CAAC,CAAC;gBAE5B,CAAC,EAAE,KAAK;IAIb,QAAQ,IAAI,KAAK;IAIjB,YAAY,IAAI,SAAS;IAIhC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAClF,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAExD,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,GAAG,SAAS;IAOxE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAgBjD,KAAK,CAAC,sBAAsB,EAAE,OAAO,GAAG,IAAI;IA8BnD,SAAS,CAAC,IAAI,IAAI,IAAI;IAOtB,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;IAyBrD,SAAS,CAAC,uBAAuB,CAAC,UAAU,EAAE,kBAAkB,GAAG,eAAe,EAAE;IAapF,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,GAAG,IAAI;CAU5H"}
1
+ {"version":3,"file":"AbstractAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/AbstractAnalysis.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAiB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAIrE,8BAAsB,gBAAgB;IAClC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,EAAG,SAAS,CAAC;IACzB,SAAS,CAAC,SAAS,EAAG,gBAAgB,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAM;IAClC,SAAS,CAAC,eAAe,EAAG,GAAG,CAAC,MAAM,CAAC,CAAC;gBAE5B,CAAC,EAAE,KAAK;IAIb,QAAQ,IAAI,KAAK;IAIjB,YAAY,IAAI,SAAS;IAIhC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAClF,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAExD,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,GAAG,SAAS;IAOxE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAgBjD,KAAK,CAAC,sBAAsB,EAAE,OAAO,GAAG,IAAI;IA8BnD,SAAS,CAAC,IAAI,IAAI,IAAI;IAOtB,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;IA0BrD,SAAS,CAAC,uBAAuB,CAAC,UAAU,EAAE,kBAAkB,GAAG,eAAe,EAAE;IAapF,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,GAAG,IAAI;CAU5H"}
@@ -117,6 +117,7 @@ class AbstractAnalysis {
117
117
  this.resolveCall(cgNode.getID(), stmt).forEach((callSite) => {
118
118
  calleeMethods.push(callSite);
119
119
  this.cg.addStmtToCallSiteMap(stmt, callSite);
120
+ this.cg.addMethodToCallSiteMap(callSite.calleeFuncID, callSite);
120
121
  });
121
122
  }
122
123
  });
@@ -63,6 +63,7 @@ export declare class CallGraph extends BaseExplicitGraph {
63
63
  private stmtToDynCallSitemap;
64
64
  private methodToCGNodeMap;
65
65
  private callPairToEdgeMap;
66
+ private methodToCallSiteMap;
66
67
  private callSiteNum;
67
68
  private entries;
68
69
  private cgStat;
@@ -80,6 +81,9 @@ export declare class CallGraph extends BaseExplicitGraph {
80
81
  getDynCallsiteByStmt(stmt: Stmt): DynCallSite | undefined;
81
82
  addStmtToCallSiteMap(stmt: Stmt, cs: CallSite): boolean;
82
83
  getCallSiteByStmt(stmt: Stmt): CallSite | undefined;
84
+ addMethodToCallSiteMap(funcID: FuncID, cs: CallSite): void;
85
+ getCallSitesByMethod(func: FuncID | MethodSignature): Set<CallSite>;
86
+ getInvokeStmtByMethod(func: FuncID | MethodSignature): Stmt[];
83
87
  getDynEdges(): Map<Method, Set<Method>>;
84
88
  getMethodByFuncID(id: FuncID): Method | null;
85
89
  getArkMethodByFuncID(id: FuncID): ArkMethod | null;
@@ -1 +1 @@
1
- {"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@
15
15
  */
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.CallGraph = exports.CallGraphNode = exports.CallGraphEdge = exports.CSCallSite = exports.DynCallSite = exports.CallSite = exports.CallGraphNodeKind = void 0;
18
+ const ArkSignature_1 = require("../../core/model/ArkSignature");
18
19
  const GraphPrinter_1 = require("../../save/GraphPrinter");
19
20
  const PrinterBuilder_1 = require("../../save/PrinterBuilder");
20
21
  const BaseExplicitGraph_1 = require("../../core/graph/BaseExplicitGraph");
@@ -135,6 +136,7 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
135
136
  this.stmtToDynCallSitemap = new Map();
136
137
  this.methodToCGNodeMap = new Map();
137
138
  this.callPairToEdgeMap = new Map();
139
+ this.methodToCallSiteMap = new Map();
138
140
  this.callSiteNum = 0;
139
141
  this.scene = s;
140
142
  this.cgStat = new Statistics_1.CGStat();
@@ -260,6 +262,33 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
260
262
  getCallSiteByStmt(stmt) {
261
263
  return this.stmtToCallSitemap.get(stmt);
262
264
  }
265
+ addMethodToCallSiteMap(funcID, cs) {
266
+ if (this.methodToCallSiteMap.has(funcID)) {
267
+ this.methodToCallSiteMap.get(funcID).add(cs);
268
+ }
269
+ else {
270
+ this.methodToCallSiteMap.set(funcID, new Set([cs]));
271
+ }
272
+ }
273
+ getCallSitesByMethod(func) {
274
+ var _a;
275
+ let funcID;
276
+ if (func instanceof ArkSignature_1.MethodSignature) {
277
+ funcID = this.getCallGraphNodeByMethod(func).getID();
278
+ }
279
+ else {
280
+ funcID = func;
281
+ }
282
+ return (_a = this.methodToCallSiteMap.get(funcID)) !== null && _a !== void 0 ? _a : new Set();
283
+ }
284
+ getInvokeStmtByMethod(func) {
285
+ let callSites = this.getCallSitesByMethod(func);
286
+ let invokeStmts = [];
287
+ callSites.forEach((cs) => {
288
+ invokeStmts.push(cs.callStmt);
289
+ });
290
+ return invokeStmts;
291
+ }
263
292
  getDynEdges() {
264
293
  let callMap = new Map();
265
294
  this.callPairToEdgeMap.forEach((edge) => {
@@ -610,7 +610,7 @@ class Pag extends BaseExplicitGraph_1.BaseExplicitGraph {
610
610
  return undefined;
611
611
  }
612
612
  addPagNode(cid, value, stmt, refresh = true) {
613
- let id = this.nodeNum;
613
+ let id = this.nodeNum + 1;
614
614
  let pagNode;
615
615
  if (value instanceof Local_1.Local) {
616
616
  pagNode = this.handleLocalNode(id, cid, value, stmt);
@@ -738,13 +738,13 @@ class Pag extends BaseExplicitGraph_1.BaseExplicitGraph {
738
738
  * but point to node info
739
739
  */
740
740
  addPagThisRefNode(value) {
741
- let id = this.nodeNum;
741
+ let id = this.nodeNum + 1;
742
742
  let pagNode = new PagThisRefNode(id, value);
743
743
  this.addNode(pagNode);
744
744
  return pagNode;
745
745
  }
746
746
  addPagThisLocalNode(ptNode, value) {
747
- let id = this.nodeNum;
747
+ let id = this.nodeNum + 1;
748
748
  let pagNode = new PagLocalNode(id, ptNode, value);
749
749
  this.addNode(pagNode);
750
750
  return pagNode;
@@ -8,6 +8,7 @@ import { NodeID } from '../../core/graph/BaseExplicitGraph';
8
8
  import { ContextID } from './Context';
9
9
  import { FuncPag, InterFuncPag, Pag, PagNode, PagNodeType, StorageType } from './Pag';
10
10
  import { IPtsCollection } from './PtsDS';
11
+ import { PtaAnalysisScale } from './PointerAnalysisConfig';
11
12
  export declare class CSFuncID {
12
13
  cid: ContextID;
13
14
  funcID: FuncID;
@@ -16,6 +17,7 @@ export declare class CSFuncID {
16
17
  export declare class PagBuilder {
17
18
  private pag;
18
19
  private cg;
20
+ private scale;
19
21
  private funcPags;
20
22
  private interFuncPags?;
21
23
  private handledFunc;
@@ -29,7 +31,7 @@ export declare class PagBuilder {
29
31
  private cid2ThisRefMap;
30
32
  private cid2ThisLocalMap;
31
33
  private sdkMethodReturnValueMap;
32
- private sdkMethodParamValueMap;
34
+ private methodParamValueMap;
33
35
  private fakeSdkMethodParamDeclaringStmt;
34
36
  private funcHandledThisRound;
35
37
  private updatedNodesThisRound;
@@ -38,19 +40,23 @@ export declare class PagBuilder {
38
40
  private globalThisPagNode?;
39
41
  private storagePropertyMap;
40
42
  private externalScopeVariableMap;
41
- constructor(p: Pag, cg: CallGraph, s: Scene, kLimit: number);
43
+ constructor(p: Pag, cg: CallGraph, s: Scene, kLimit: number, scale: PtaAnalysisScale);
42
44
  private buildFuncPagAndAddToWorklist;
43
45
  private addToFuncHandledListThisRound;
44
46
  buildForEntries(funcIDs: FuncID[]): void;
45
47
  handleReachable(): boolean;
46
48
  build(): void;
47
49
  buildFuncPag(funcID: FuncID): boolean;
50
+ private buildInvokeExprInAssignStmt;
51
+ private buildInvokeExprInInvokeStmt;
48
52
  /**
49
53
  * will not create real funcPag, only create param values
50
54
  */
51
55
  private buildSDKFuncPag;
56
+ private createDummyParamValue;
57
+ private createDummyParamPagNodes;
52
58
  buildPagFromFuncPag(funcID: FuncID, cid: ContextID): void;
53
- addEdgesFromFuncPag(funcPag: FuncPag, cid: ContextID): boolean;
59
+ addEdgesFromFuncPag(funcPag: FuncPag, cid: ContextID, funcID: FuncID): boolean;
54
60
  addCallsEdgesFromFuncPag(funcPag: FuncPag, cid: ContextID): boolean;
55
61
  /**
56
62
  * process Storage API
@@ -74,6 +80,7 @@ export declare class PagBuilder {
74
80
  handleUnprocessedCallSites(processedCallSites: Set<DynCallSite>): NodeID[];
75
81
  private addThisRefCallEdge;
76
82
  addStaticPagCallEdge(cs: CallSite, callerCid: ContextID, calleeCid?: ContextID): NodeID[];
83
+ addStaticPagCallReturnEdge(cs: CallSite, callerCid: ContextID, calleeCid: ContextID): NodeID[];
77
84
  addCallParamPagEdge(params: Value[], cs: CallSite, callerCid: ContextID, calleeCid: ContextID): NodeID[];
78
85
  private addSDKMethodPagCallEdge;
79
86
  private addSDKMethodReturnPagEdge;
@@ -1 +1 @@
1
- {"version":3,"file":"PagBuilder.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PagBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PagBuilder.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PagBuilder.ts"],"names":[],"mappings":"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"}