arkanalyzer 1.0.35 → 1.0.37
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/lib/Scene.js +5 -5
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +1 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.js +9 -6
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts +2 -1
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +3 -3
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +1 -2
- package/lib/callgraph/common/Statistics.d.ts +1 -0
- package/lib/callgraph/common/Statistics.d.ts.map +1 -1
- package/lib/callgraph/common/Statistics.js +4 -1
- package/lib/callgraph/model/CallGraph.d.ts +4 -24
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +8 -37
- package/lib/callgraph/model/CallSite.d.ts +29 -0
- package/lib/callgraph/model/CallSite.d.ts.map +1 -0
- package/lib/callgraph/model/CallSite.js +42 -0
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +1 -0
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -1
- package/lib/callgraph/model/builder/CallGraphBuilder.js +15 -7
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +2 -2
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +11 -3
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +1 -2
- package/lib/core/base/Expr.d.ts +1 -0
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +30 -7
- package/lib/core/base/Local.d.ts.map +1 -1
- package/lib/core/base/Local.js +5 -0
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +0 -10
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +1 -0
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +3 -4
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +29 -1
- package/lib/core/common/TypeInference.d.ts +2 -1
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +8 -4
- package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -1
- package/lib/core/dataflow/DataflowSolver.js +2 -1
- package/lib/core/graph/builder/TrapBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/TrapBuilder.js +20 -15
- package/lib/core/model/ArkImport.js +1 -1
- package/lib/core/model/ArkMethod.d.ts +2 -0
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +37 -28
- package/lib/core/model/builder/ArkClassBuilder.js +12 -3
- package/lib/core/model/builder/ArkFieldBuilder.js +2 -2
- package/lib/core/model/builder/ArkFileBuilder.js +2 -2
- package/lib/core/model/builder/ArkNamespaceBuilder.js +4 -4
- package/lib/save/JsonPrinter.d.ts.map +1 -1
- package/lib/save/JsonPrinter.js +50 -32
- package/package.json +2 -2
package/lib/Scene.js
CHANGED
|
@@ -322,7 +322,7 @@ class Scene {
|
|
|
322
322
|
}
|
|
323
323
|
genArkFiles() {
|
|
324
324
|
this.projectFiles.forEach(file => {
|
|
325
|
-
logger.
|
|
325
|
+
logger.trace('=== parse file:', file);
|
|
326
326
|
try {
|
|
327
327
|
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.fileLanguages));
|
|
328
328
|
arkFile.setScene(this);
|
|
@@ -461,7 +461,7 @@ class Scene {
|
|
|
461
461
|
findDependenciesByRule(originPath, arkFile) {
|
|
462
462
|
const extNameArray = ['.ets', '.ts', '.d.ets', '.d.ts'];
|
|
463
463
|
if (!this.findFilesByPathArray(originPath, this.indexPathArray, arkFile) && !this.findFilesByExtNameArray(originPath, extNameArray, arkFile)) {
|
|
464
|
-
logger.
|
|
464
|
+
logger.trace(originPath + 'module mapperInfo is not found!');
|
|
465
465
|
}
|
|
466
466
|
}
|
|
467
467
|
findFilesByPathArray(originPath, pathArray, arkFile) {
|
|
@@ -523,7 +523,7 @@ class Scene {
|
|
|
523
523
|
this.addFileNode2DependencyGrap(originPath, arkFile);
|
|
524
524
|
}
|
|
525
525
|
if (!this.findFilesByPathArray(originPath, this.indexPathArray, arkFile)) {
|
|
526
|
-
logger.
|
|
526
|
+
logger.trace(originPath + 'module mapperInfo is not found!');
|
|
527
527
|
}
|
|
528
528
|
}
|
|
529
529
|
}
|
|
@@ -551,7 +551,7 @@ class Scene {
|
|
|
551
551
|
buildSdk(sdkName, sdkPath) {
|
|
552
552
|
const allFiles = (0, getAllFiles_1.getAllFiles)(sdkPath, this.options.supportFileExts, this.options.ignoreFileNames);
|
|
553
553
|
allFiles.forEach(file => {
|
|
554
|
-
logger.
|
|
554
|
+
logger.trace('=== parse sdk file:', file);
|
|
555
555
|
try {
|
|
556
556
|
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.fileLanguages));
|
|
557
557
|
arkFile.setScene(this);
|
|
@@ -1354,7 +1354,7 @@ class ModuleScene {
|
|
|
1354
1354
|
}
|
|
1355
1355
|
genArkFiles(supportFileExts) {
|
|
1356
1356
|
(0, getAllFiles_1.getAllFiles)(this.modulePath, supportFileExts, this.projectScene.getOptions().ignoreFileNames).forEach(file => {
|
|
1357
|
-
logger.
|
|
1357
|
+
logger.trace('=== parse file:', file);
|
|
1358
1358
|
try {
|
|
1359
1359
|
const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.projectScene.getFileLanguages()));
|
|
1360
1360
|
arkFile.setScene(this.projectScene);
|
|
@@ -14,7 +14,7 @@ export declare abstract class AbstractAnalysis {
|
|
|
14
14
|
protected cgBuilder: CallGraphBuilder;
|
|
15
15
|
protected workList: FuncID[];
|
|
16
16
|
protected processedMethod: IPtsCollection<FuncID>;
|
|
17
|
-
constructor(s: Scene);
|
|
17
|
+
constructor(s: Scene, cg: CallGraph);
|
|
18
18
|
getScene(): Scene;
|
|
19
19
|
getCallGraph(): CallGraph;
|
|
20
20
|
protected abstract resolveCall(sourceMethod: NodeID, invokeStmt: Stmt): CallSite[];
|
|
@@ -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;AACrE,OAAO,EAA2B,cAAc,EAAqB,MAAM,0BAA0B,CAAC;AAItG,8BAAsB,gBAAgB;IAClC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,
|
|
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;AACrE,OAAO,EAA2B,cAAc,EAAqB,MAAM,0BAA0B,CAAC;AAItG,8BAAsB,gBAAgB;IAClC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC;IACxB,SAAS,CAAC,SAAS,EAAG,gBAAgB,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAM;IAClC,SAAS,CAAC,eAAe,EAAG,cAAc,CAAC,MAAM,CAAC,CAAC;gBAEvC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS;IAK5B,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;IAQxE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAgBjD,KAAK,CAAC,sBAAsB,EAAE,OAAO,GAAG,IAAI;IAqB5C,YAAY,CAAC,sBAAsB,EAAE,OAAO,GAAG,IAAI;IAoB1D,OAAO,CAAC,eAAe;IAqBvB,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"}
|
|
@@ -43,9 +43,10 @@ const logger_1 = __importStar(require("../../utils/logger"));
|
|
|
43
43
|
const PtsDS_1 = require("../pointerAnalysis/PtsDS");
|
|
44
44
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'CG');
|
|
45
45
|
class AbstractAnalysis {
|
|
46
|
-
constructor(s) {
|
|
46
|
+
constructor(s, cg) {
|
|
47
47
|
this.workList = [];
|
|
48
48
|
this.scene = s;
|
|
49
|
+
this.cg = cg;
|
|
49
50
|
}
|
|
50
51
|
getScene() {
|
|
51
52
|
return this.scene;
|
|
@@ -91,16 +92,18 @@ class AbstractAnalysis {
|
|
|
91
92
|
}
|
|
92
93
|
}
|
|
93
94
|
projectStart(displayGeneratedMethod) {
|
|
94
|
-
this.scene.getMethods()
|
|
95
|
-
|
|
95
|
+
this.cgBuilder.buildCGNodes(this.scene.getMethods());
|
|
96
|
+
for (let n of this.cg.getNodesIter()) {
|
|
97
|
+
let cgNode = n;
|
|
96
98
|
if (cgNode.isSdkMethod()) {
|
|
97
|
-
|
|
99
|
+
continue;
|
|
98
100
|
}
|
|
99
101
|
this.preProcessMethod(cgNode.getID());
|
|
100
102
|
this.processMethod(cgNode.getID()).forEach((cs) => {
|
|
101
103
|
this.processCallSite(cgNode.getID(), cs, displayGeneratedMethod, true);
|
|
102
104
|
});
|
|
103
|
-
}
|
|
105
|
+
}
|
|
106
|
+
this.cgBuilder.setEntries();
|
|
104
107
|
}
|
|
105
108
|
processCallSite(method, cs, displayGeneratedMethod, isProject = false) {
|
|
106
109
|
var _a;
|
|
@@ -116,7 +119,7 @@ class AbstractAnalysis {
|
|
|
116
119
|
}
|
|
117
120
|
if (displayGeneratedMethod || !(me === null || me === void 0 ? void 0 : me.isGenerated())) {
|
|
118
121
|
this.workList.push(cs.calleeFuncID);
|
|
119
|
-
logger.
|
|
122
|
+
logger.trace(`New workList item ${cs.calleeFuncID}: ${(_a = this.cg.getArkMethodByFuncID(cs.calleeFuncID)) === null || _a === void 0 ? void 0 : _a.getSignature().toString()}`);
|
|
120
123
|
}
|
|
121
124
|
}
|
|
122
125
|
init() {
|
|
@@ -3,8 +3,9 @@ import { Stmt } from '../../core/base/Stmt';
|
|
|
3
3
|
import { NodeID } from '../../core/graph/BaseExplicitGraph';
|
|
4
4
|
import { CallGraph, CallSite } from '../model/CallGraph';
|
|
5
5
|
import { AbstractAnalysis } from './AbstractAnalysis';
|
|
6
|
+
import { CallGraphBuilder } from '../model/builder/CallGraphBuilder';
|
|
6
7
|
export declare class ClassHierarchyAnalysis extends AbstractAnalysis {
|
|
7
|
-
constructor(scene: Scene, cg: CallGraph);
|
|
8
|
+
constructor(scene: Scene, cg: CallGraph, cb: CallGraphBuilder);
|
|
8
9
|
resolveCall(callerMethod: NodeID, invokeStmt: Stmt): CallSite[];
|
|
9
10
|
protected preProcessMethod(): CallSite[];
|
|
10
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassHierarchyAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/ClassHierarchyAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ClassHierarchyAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/ClassHierarchyAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,qBAAa,sBAAuB,SAAQ,gBAAgB;gBAC5C,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB;IAKtD,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAkDtE,SAAS,CAAC,gBAAgB,IAAI,QAAQ,EAAE;CAI3C"}
|
|
@@ -19,9 +19,9 @@ const Expr_1 = require("../../core/base/Expr");
|
|
|
19
19
|
const CallGraph_1 = require("../model/CallGraph");
|
|
20
20
|
const AbstractAnalysis_1 = require("./AbstractAnalysis");
|
|
21
21
|
class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
22
|
-
constructor(scene, cg) {
|
|
23
|
-
super(scene);
|
|
24
|
-
this.
|
|
22
|
+
constructor(scene, cg, cb) {
|
|
23
|
+
super(scene, cg);
|
|
24
|
+
this.cgBuilder = cb;
|
|
25
25
|
}
|
|
26
26
|
resolveCall(callerMethod, invokeStmt) {
|
|
27
27
|
let invokeExpr = invokeStmt.getInvokeExpr();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RapidTypeAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/RapidTypeAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAMtD,qBAAa,iBAAkB,SAAQ,gBAAgB;IAEnD,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO,CAAC,YAAY,CAA2F;gBAEnG,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"RapidTypeAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/RapidTypeAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAMtD,qBAAa,iBAAkB,SAAQ,gBAAgB;IAEnD,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO,CAAC,YAAY,CAA2F;gBAEnG,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS;IAIhC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IA8DtE,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAmBtD,OAAO,CAAC,+BAA+B;IA4BhC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI;CAK/G"}
|
|
@@ -45,12 +45,11 @@ const logger_1 = __importStar(require("../../utils/logger"));
|
|
|
45
45
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'RTA');
|
|
46
46
|
class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
47
47
|
constructor(scene, cg) {
|
|
48
|
-
super(scene);
|
|
48
|
+
super(scene, cg);
|
|
49
49
|
// TODO: signature duplicated check
|
|
50
50
|
this.instancedClasses = new Set();
|
|
51
51
|
// TODO: Set duplicated check
|
|
52
52
|
this.ignoredCalls = new Map();
|
|
53
|
-
this.cg = cg;
|
|
54
53
|
}
|
|
55
54
|
resolveCall(callerMethod, invokeStmt) {
|
|
56
55
|
let invokeExpr = invokeStmt.getInvokeExpr();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Statistics.d.ts","sourceRoot":"","sources":["../../../src/callgraph/common/Statistics.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAKrE,uBAAe,UAAU;IACrB,SAAS,EAAE,MAAM,CAAK;IACtB,SAAS,EAAE,MAAM,CAAK;IACtB,OAAO,EAAE,MAAM,CAAK;IAEb,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,OAAQ,SAAQ,UAAU;IACnC,GAAG,EAAE,eAAe,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAK;IAC7B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,iBAAiB,EAAE,MAAM,CAAK;IAC9B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,YAAY,EAAE,MAAM,CAAK;IACzB,WAAW,EAAE,MAAM,CAAK;IAExB,eAAe,EAAE,MAAM,CAAK;IAC5B,yBAAyB,EAAE,MAAM,CAAK;IACtC,oBAAoB,EAAE,MAAM,CAAK;IAGjC,sBAAsB,EAAE,MAAM,CAAK;IAEnC,uBAAuB,EAAE,MAAM,CAAK;IAEpC,wBAAwB,EAAE,MAAM,CAAK;IAErC,yBAAyB,EAAE,MAAM,CAAK;IACtC,gBAAgB,EAAE,MAAM,CAAK;IAE7B,SAAS,EAAE,MAAM,CAAK;IAEtB,aAAa,EAAE,GAAG,CAAC;IACnB,WAAW,EAAE,GAAG,CAAC;IACjB,OAAO,EAAE,MAAM,CAAK;IACpB,QAAQ,EAAE,MAAM,CAAK;gBAET,GAAG,EAAE,eAAe;IAKzB,SAAS,IAAI,IAAI;IAKjB,OAAO,IAAI,IAAI;IAUf,MAAM,IAAI,MAAM;IAIvB,OAAO,CAAC,cAAc;IAuCtB,OAAO,CAAC,oBAAoB;IAerB,OAAO,IAAI,MAAM;IAqBjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,OAAQ,SAAQ,UAAU;IACnC,cAAc,EAAE,MAAM,CAAK;IAC3B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,YAAY,EAAE,MAAM,CAAK;IAElB,OAAO,IAAI,MAAM;IASjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,MAAO,SAAQ,UAAU;IAElC,YAAY,EAAE,MAAM,CAAK;IACzB,OAAO,EAAE,MAAM,CAAK;IACpB,UAAU,EAAE,MAAM,CAAK;IACvB,YAAY,EAAE,MAAM,CAAK;IACzB,cAAc,EAAE,MAAM,CAAK;
|
|
1
|
+
{"version":3,"file":"Statistics.d.ts","sourceRoot":"","sources":["../../../src/callgraph/common/Statistics.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAKrE,uBAAe,UAAU;IACrB,SAAS,EAAE,MAAM,CAAK;IACtB,SAAS,EAAE,MAAM,CAAK;IACtB,OAAO,EAAE,MAAM,CAAK;IAEb,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,OAAQ,SAAQ,UAAU;IACnC,GAAG,EAAE,eAAe,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAK;IAC7B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,iBAAiB,EAAE,MAAM,CAAK;IAC9B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,YAAY,EAAE,MAAM,CAAK;IACzB,WAAW,EAAE,MAAM,CAAK;IAExB,eAAe,EAAE,MAAM,CAAK;IAC5B,yBAAyB,EAAE,MAAM,CAAK;IACtC,oBAAoB,EAAE,MAAM,CAAK;IAGjC,sBAAsB,EAAE,MAAM,CAAK;IAEnC,uBAAuB,EAAE,MAAM,CAAK;IAEpC,wBAAwB,EAAE,MAAM,CAAK;IAErC,yBAAyB,EAAE,MAAM,CAAK;IACtC,gBAAgB,EAAE,MAAM,CAAK;IAE7B,SAAS,EAAE,MAAM,CAAK;IAEtB,aAAa,EAAE,GAAG,CAAC;IACnB,WAAW,EAAE,GAAG,CAAC;IACjB,OAAO,EAAE,MAAM,CAAK;IACpB,QAAQ,EAAE,MAAM,CAAK;gBAET,GAAG,EAAE,eAAe;IAKzB,SAAS,IAAI,IAAI;IAKjB,OAAO,IAAI,IAAI;IAUf,MAAM,IAAI,MAAM;IAIvB,OAAO,CAAC,cAAc;IAuCtB,OAAO,CAAC,oBAAoB;IAerB,OAAO,IAAI,MAAM;IAqBjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,OAAQ,SAAQ,UAAU;IACnC,cAAc,EAAE,MAAM,CAAK;IAC3B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,YAAY,EAAE,MAAM,CAAK;IAElB,OAAO,IAAI,MAAM;IASjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,MAAO,SAAQ,UAAU;IAElC,YAAY,EAAE,MAAM,CAAK;IACzB,OAAO,EAAE,MAAM,CAAK;IACpB,UAAU,EAAE,MAAM,CAAK;IACvB,YAAY,EAAE,MAAM,CAAK;IACzB,cAAc,EAAE,MAAM,CAAK;IAC3B,QAAQ,EAAE,MAAM,CAAK;IAEd,SAAS,IAAI,IAAI;IAIjB,OAAO,IAAI,IAAI;IAKf,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAoB1C,OAAO,IAAI,MAAM;CAY3B"}
|
|
@@ -200,6 +200,7 @@ class CGStat extends StatTraits {
|
|
|
200
200
|
this.numVirtual = 0;
|
|
201
201
|
this.numIntrinsic = 0;
|
|
202
202
|
this.numConstructor = 0;
|
|
203
|
+
this.numBlank = 0;
|
|
203
204
|
}
|
|
204
205
|
startStat() {
|
|
205
206
|
this.startTime = new Date().getTime();
|
|
@@ -223,6 +224,7 @@ class CGStat extends StatTraits {
|
|
|
223
224
|
this.numIntrinsic++;
|
|
224
225
|
break;
|
|
225
226
|
default:
|
|
227
|
+
this.numBlank++;
|
|
226
228
|
}
|
|
227
229
|
this.numTotalNode++;
|
|
228
230
|
}
|
|
@@ -233,7 +235,8 @@ class CGStat extends StatTraits {
|
|
|
233
235
|
output = output + `Real function\t\t${this.numReal}\n`;
|
|
234
236
|
output = output + `Intrinsic function\t${this.numIntrinsic}\n`;
|
|
235
237
|
output = output + `Constructor function\t${this.numConstructor}\n`;
|
|
236
|
-
output = output + `
|
|
238
|
+
output = output + `Virtual function\t\t${this.numVirtual}\n`;
|
|
239
|
+
output = output + `Blank function\t\t${this.numBlank}\n`;
|
|
237
240
|
output = output + `Total\t\t\t${this.numTotalNode}\n`;
|
|
238
241
|
return output;
|
|
239
242
|
}
|
|
@@ -1,36 +1,18 @@
|
|
|
1
1
|
import { MethodSignature } from '../../core/model/ArkSignature';
|
|
2
2
|
import { Stmt } from '../../core/base/Stmt';
|
|
3
|
-
import { Value } from '../../core/base/Value';
|
|
4
3
|
import { Scene } from '../../Scene';
|
|
5
4
|
import { ArkMethod } from '../../core/model/ArkMethod';
|
|
6
5
|
import { BaseEdge, BaseNode, BaseExplicitGraph, NodeID } from '../../core/graph/BaseExplicitGraph';
|
|
7
|
-
import {
|
|
6
|
+
import { CallSite, DynCallSite, ICallSite } from './CallSite';
|
|
8
7
|
export type Method = MethodSignature;
|
|
9
|
-
export type CallSiteID = number;
|
|
10
8
|
export type FuncID = number;
|
|
9
|
+
export { CallSite, DynCallSite, ICallSite };
|
|
11
10
|
export declare enum CallGraphNodeKind {
|
|
12
11
|
real = 0,
|
|
13
12
|
vitual = 1,
|
|
14
13
|
intrinsic = 2,
|
|
15
|
-
constructor = 3
|
|
16
|
-
|
|
17
|
-
export declare class CallSite {
|
|
18
|
-
callStmt: Stmt;
|
|
19
|
-
args: Value[] | undefined;
|
|
20
|
-
calleeFuncID: FuncID;
|
|
21
|
-
callerFuncID: FuncID;
|
|
22
|
-
constructor(s: Stmt, a: Value[] | undefined, ce: FuncID, cr: FuncID);
|
|
23
|
-
}
|
|
24
|
-
export declare class DynCallSite {
|
|
25
|
-
callerFuncID: FuncID;
|
|
26
|
-
callStmt: Stmt;
|
|
27
|
-
args: Value[] | undefined;
|
|
28
|
-
protentialCalleeFuncID: FuncID | undefined;
|
|
29
|
-
constructor(caller: FuncID, s: Stmt, a: Value[] | undefined, ptcCallee: FuncID | undefined);
|
|
30
|
-
}
|
|
31
|
-
export declare class CSCallSite extends CallSite {
|
|
32
|
-
cid: ContextID;
|
|
33
|
-
constructor(id: ContextID, cs: CallSite);
|
|
14
|
+
constructor = 3,
|
|
15
|
+
blank = 4
|
|
34
16
|
}
|
|
35
17
|
export declare class CallGraphEdge extends BaseEdge {
|
|
36
18
|
private directCalls;
|
|
@@ -45,13 +27,11 @@ export declare class CallGraphEdge extends BaseEdge {
|
|
|
45
27
|
export declare class CallGraphNode extends BaseNode {
|
|
46
28
|
private method;
|
|
47
29
|
private ifSdkMethod;
|
|
48
|
-
private isBlank;
|
|
49
30
|
constructor(id: number, m: Method, k?: CallGraphNodeKind);
|
|
50
31
|
getMethod(): Method;
|
|
51
32
|
setSdkMethod(v: boolean): void;
|
|
52
33
|
isSdkMethod(): boolean;
|
|
53
34
|
get isBlankMethod(): boolean;
|
|
54
|
-
set isBlankMethod(is: boolean);
|
|
55
35
|
getDotAttr(): string;
|
|
56
36
|
getDotLabel(): string;
|
|
57
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAGnG,OAAO,EAAE,QAAQ,EAAc,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,MAAM,MAAM,GAAG,eAAe,CAAC;AACrC,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAG5B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAE5C,oBAAY,iBAAiB;IACzB,IAAI,IAAA;IACJ,MAAM,IAAA;IACN,SAAS,IAAA;IACT,WAAW,IAAA;IACX,KAAK,IAAA;CACR;AAED,qBAAa,aAAc,SAAQ,QAAQ;IACvC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,aAAa,CAAsB;gBAG/B,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa;IAI3C,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAInC,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIpC,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIrC,UAAU,IAAI,MAAM;CAkB9B;AAED,qBAAa,aAAc,SAAQ,QAAQ;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAkB;gBAEzB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,iBAA0C;IAKzE,SAAS,IAAI,MAAM;IAInB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAI9B,WAAW,IAAI,OAAO;IAI7B,IAAW,aAAa,IAAI,OAAO,CAElC;IAEM,UAAU,IAAI,MAAM;IAOpB,WAAW,IAAI,MAAM;CAK/B;AAED,qBAAa,SAAU,SAAQ,iBAAiB;IAC5C,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,iBAAiB,CAAoC;IAC7D,OAAO,CAAC,oBAAoB,CAAqC;IACjE,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,mBAAmB,CAAyC;IACpE,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,iBAAiB,CAAqB;gBAElC,CAAC,EAAE,KAAK;IAMpB,OAAO,CAAC,iBAAiB;IAIlB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAK1E,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,iBAA0C,GAAG,aAAa;IAYjG,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASzC,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa;IAgBvD,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAE,OAAc,GAAG,IAAI;IAkC9G,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAYzC,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI;IAYnF,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI;IAc5E,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,SAAS;IAIzD,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,GAAG,OAAO;IAUvD,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE;IAIzC,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI;IAQ1D,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,GAAG,CAAC,QAAQ,CAAC;IAWnE,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,EAAE;IAU7D,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAkBvC,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ5C,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAUlD,UAAU,IAAI,MAAM,EAAE;IAItB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAI7B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAQxC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IA0BvD,SAAS,IAAI,IAAI;IAIjB,OAAO,IAAI,IAAI;IAIf,SAAS,IAAI,IAAI;IAIjB,OAAO,IAAI,MAAM;IAIjB,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAInD,kBAAkB,IAAI,MAAM,GAAG,SAAS;IAIxC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAYxC,YAAY,IAAI,MAAM;CAGhC"}
|
|
@@ -14,45 +14,24 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.CallGraph = exports.CallGraphNode = exports.CallGraphEdge = exports.
|
|
17
|
+
exports.CallGraph = exports.CallGraphNode = exports.CallGraphEdge = exports.CallGraphNodeKind = exports.DynCallSite = exports.CallSite = void 0;
|
|
18
18
|
const ArkSignature_1 = require("../../core/model/ArkSignature");
|
|
19
19
|
const GraphPrinter_1 = require("../../save/GraphPrinter");
|
|
20
20
|
const PrinterBuilder_1 = require("../../save/PrinterBuilder");
|
|
21
21
|
const BaseExplicitGraph_1 = require("../../core/graph/BaseExplicitGraph");
|
|
22
22
|
const Statistics_1 = require("../common/Statistics");
|
|
23
23
|
const Const_1 = require("../../core/common/Const");
|
|
24
|
+
const CallSite_1 = require("./CallSite");
|
|
25
|
+
Object.defineProperty(exports, "CallSite", { enumerable: true, get: function () { return CallSite_1.CallSite; } });
|
|
26
|
+
Object.defineProperty(exports, "DynCallSite", { enumerable: true, get: function () { return CallSite_1.DynCallSite; } });
|
|
24
27
|
var CallGraphNodeKind;
|
|
25
28
|
(function (CallGraphNodeKind) {
|
|
26
29
|
CallGraphNodeKind[CallGraphNodeKind["real"] = 0] = "real";
|
|
27
30
|
CallGraphNodeKind[CallGraphNodeKind["vitual"] = 1] = "vitual";
|
|
28
31
|
CallGraphNodeKind[CallGraphNodeKind["intrinsic"] = 2] = "intrinsic";
|
|
29
32
|
CallGraphNodeKind[CallGraphNodeKind["constructor"] = 3] = "constructor";
|
|
33
|
+
CallGraphNodeKind[CallGraphNodeKind["blank"] = 4] = "blank";
|
|
30
34
|
})(CallGraphNodeKind = exports.CallGraphNodeKind || (exports.CallGraphNodeKind = {}));
|
|
31
|
-
class CallSite {
|
|
32
|
-
constructor(s, a, ce, cr) {
|
|
33
|
-
this.callStmt = s;
|
|
34
|
-
this.args = a;
|
|
35
|
-
this.calleeFuncID = ce;
|
|
36
|
-
this.callerFuncID = cr;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
exports.CallSite = CallSite;
|
|
40
|
-
class DynCallSite {
|
|
41
|
-
constructor(caller, s, a, ptcCallee) {
|
|
42
|
-
this.callerFuncID = caller;
|
|
43
|
-
this.callStmt = s;
|
|
44
|
-
this.args = a;
|
|
45
|
-
this.protentialCalleeFuncID = ptcCallee;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
exports.DynCallSite = DynCallSite;
|
|
49
|
-
class CSCallSite extends CallSite {
|
|
50
|
-
constructor(id, cs) {
|
|
51
|
-
super(cs.callStmt, cs.args, cs.calleeFuncID, cs.callerFuncID);
|
|
52
|
-
this.cid = id;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
exports.CSCallSite = CSCallSite;
|
|
56
35
|
class CallGraphEdge extends BaseExplicitGraph_1.BaseEdge {
|
|
57
36
|
// private callSiteID: CallSiteID;
|
|
58
37
|
constructor(src, dst) {
|
|
@@ -96,7 +75,6 @@ class CallGraphNode extends BaseExplicitGraph_1.BaseNode {
|
|
|
96
75
|
constructor(id, m, k = CallGraphNodeKind.real) {
|
|
97
76
|
super(id, k);
|
|
98
77
|
this.ifSdkMethod = false;
|
|
99
|
-
this.isBlank = false;
|
|
100
78
|
this.method = m;
|
|
101
79
|
}
|
|
102
80
|
getMethod() {
|
|
@@ -109,10 +87,7 @@ class CallGraphNode extends BaseExplicitGraph_1.BaseNode {
|
|
|
109
87
|
return this.ifSdkMethod;
|
|
110
88
|
}
|
|
111
89
|
get isBlankMethod() {
|
|
112
|
-
return this.
|
|
113
|
-
}
|
|
114
|
-
set isBlankMethod(is) {
|
|
115
|
-
this.isBlank = is;
|
|
90
|
+
return this.kind === CallGraphNodeKind.blank;
|
|
116
91
|
}
|
|
117
92
|
getDotAttr() {
|
|
118
93
|
if ([CallGraphNodeKind.intrinsic, CallGraphNodeKind.constructor].includes(this.getKind())) {
|
|
@@ -153,10 +128,6 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
153
128
|
let cgNode = new CallGraphNode(id, method, kind);
|
|
154
129
|
// check if sdk method
|
|
155
130
|
cgNode.setSdkMethod(this.scene.hasSdkFile(method.getDeclaringClassSignature().getDeclaringFileSignature()));
|
|
156
|
-
let arkMethod = this.scene.getMethod(method);
|
|
157
|
-
if (!arkMethod || !arkMethod.getCfg()) {
|
|
158
|
-
cgNode.isBlankMethod = true;
|
|
159
|
-
}
|
|
160
131
|
this.addNode(cgNode);
|
|
161
132
|
this.methodToCGNodeMap.set(method.toString(), cgNode.getID());
|
|
162
133
|
this.cgStat.addNodeStat(kind);
|
|
@@ -189,7 +160,7 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
189
160
|
let callerNode = this.getCallGraphNodeByMethod(caller);
|
|
190
161
|
let calleeNode = this.getCallGraphNodeByMethod(callee);
|
|
191
162
|
let args = (_a = callStmt.getInvokeExpr()) === null || _a === void 0 ? void 0 : _a.getArgs();
|
|
192
|
-
let cs = new CallSite(callStmt, args, calleeNode.getID(), callerNode.getID());
|
|
163
|
+
let cs = new CallSite_1.CallSite(callStmt, args, calleeNode.getID(), callerNode.getID());
|
|
193
164
|
let csID;
|
|
194
165
|
if (!this.callSiteToIdMap.has(cs)) {
|
|
195
166
|
csID = this.callSiteNum++;
|
|
@@ -234,7 +205,7 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
234
205
|
calleeNode = this.getCallGraphNodeByMethod(protentialCallee);
|
|
235
206
|
}
|
|
236
207
|
let args = (_a = callStmt.getInvokeExpr()) === null || _a === void 0 ? void 0 : _a.getArgs();
|
|
237
|
-
let cs = new DynCallSite(
|
|
208
|
+
let cs = new CallSite_1.DynCallSite(callStmt, args, calleeNode === null || calleeNode === void 0 ? void 0 : calleeNode.getID(), callerNode.getID());
|
|
238
209
|
this.stmtToDynCallSitemap.set(callStmt, cs);
|
|
239
210
|
}
|
|
240
211
|
addDynamicCallEdge(callerID, calleeID, callStmt) {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Stmt } from '../../core/base/Stmt';
|
|
2
|
+
import { Value } from '../../core/base/Value';
|
|
3
|
+
import { ContextID } from '../pointerAnalysis/Context';
|
|
4
|
+
import { FuncID } from './CallGraph';
|
|
5
|
+
export type CallSiteID = number;
|
|
6
|
+
export interface ICallSite {
|
|
7
|
+
callStmt: Stmt;
|
|
8
|
+
args: Value[] | undefined;
|
|
9
|
+
callerFuncID: FuncID;
|
|
10
|
+
}
|
|
11
|
+
export declare class CallSite implements ICallSite {
|
|
12
|
+
callStmt: Stmt;
|
|
13
|
+
args: Value[] | undefined;
|
|
14
|
+
calleeFuncID: FuncID;
|
|
15
|
+
callerFuncID: FuncID;
|
|
16
|
+
constructor(s: Stmt, a: Value[] | undefined, ce: FuncID, cr: FuncID);
|
|
17
|
+
}
|
|
18
|
+
export declare class DynCallSite implements ICallSite {
|
|
19
|
+
callStmt: Stmt;
|
|
20
|
+
args: Value[] | undefined;
|
|
21
|
+
protentialCalleeFuncID: FuncID | undefined;
|
|
22
|
+
callerFuncID: FuncID;
|
|
23
|
+
constructor(s: Stmt, a: Value[] | undefined, ptcCallee: FuncID | undefined, caller: FuncID);
|
|
24
|
+
}
|
|
25
|
+
export declare class CSCallSite extends CallSite {
|
|
26
|
+
cid: ContextID;
|
|
27
|
+
constructor(id: ContextID, cs: CallSite);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=CallSite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CallSite.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallSite.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,WAAW,SAAS;IACtB,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,QAAS,YAAW,SAAS;IAC/B,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;gBAEhB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;CAMtE;AAED,qBAAa,WAAY,YAAW,SAAS;IAClC,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,YAAY,EAAE,MAAM,CAAC;gBAEhB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM;CAM7F;AAED,qBAAa,UAAW,SAAQ,QAAQ;IAC7B,GAAG,EAAE,SAAS,CAAC;gBAEV,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ;CAI1C"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2025 Huawei Device Co., Ltd.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.CSCallSite = exports.DynCallSite = exports.CallSite = void 0;
|
|
18
|
+
class CallSite {
|
|
19
|
+
constructor(s, a, ce, cr) {
|
|
20
|
+
this.callStmt = s;
|
|
21
|
+
this.args = a;
|
|
22
|
+
this.calleeFuncID = ce;
|
|
23
|
+
this.callerFuncID = cr;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.CallSite = CallSite;
|
|
27
|
+
class DynCallSite {
|
|
28
|
+
constructor(s, a, ptcCallee, caller) {
|
|
29
|
+
this.callerFuncID = caller;
|
|
30
|
+
this.callStmt = s;
|
|
31
|
+
this.args = a;
|
|
32
|
+
this.protentialCalleeFuncID = ptcCallee;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.DynCallSite = DynCallSite;
|
|
36
|
+
class CSCallSite extends CallSite {
|
|
37
|
+
constructor(id, cs) {
|
|
38
|
+
super(cs.callStmt, cs.args, cs.calleeFuncID, cs.callerFuncID);
|
|
39
|
+
this.cid = id;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.CSCallSite = CSCallSite;
|
|
@@ -6,6 +6,7 @@ export declare class CallGraphBuilder {
|
|
|
6
6
|
private scene;
|
|
7
7
|
constructor(c: CallGraph, s: Scene);
|
|
8
8
|
buildDirectCallGraphForScene(): void;
|
|
9
|
+
buildCGNodes(methods: ArkMethod[]): void;
|
|
9
10
|
buildDirectCallGraph(methods: ArkMethod[]): void;
|
|
10
11
|
buildClassHierarchyCallGraph(entries: Method[], displayGeneratedMethod?: boolean): void;
|
|
11
12
|
buildCHA4WholeProject(displayGeneratedMethod?: boolean): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallGraphBuilder.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/model/builder/CallGraphBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAoC,MAAM,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAKvC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,qBAAa,gBAAgB;IACzB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,KAAK,CAAQ;gBAET,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK;IAK3B,4BAA4B,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"CallGraphBuilder.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/model/builder/CallGraphBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAoC,MAAM,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAKvC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,qBAAa,gBAAgB;IACzB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,KAAK,CAAQ;gBAET,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK;IAK3B,4BAA4B,IAAI,IAAI;IAWpC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IAgBxC,oBAAoB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IAgChD,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAW9F,qBAAqB,CAAC,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAKpE,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAYhG,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,aAAa;IAId,UAAU,IAAI,IAAI;CAO5B"}
|
|
@@ -30,19 +30,28 @@ class CallGraphBuilder {
|
|
|
30
30
|
// set entries at end
|
|
31
31
|
this.setEntries();
|
|
32
32
|
}
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
/*
|
|
34
|
+
* Create CG Node for ArkMethods
|
|
35
|
+
*/
|
|
36
|
+
buildCGNodes(methods) {
|
|
35
37
|
for (const method of methods) {
|
|
36
38
|
let m = method.getSignature();
|
|
37
39
|
let kind = CallGraph_1.CallGraphNodeKind.real;
|
|
38
40
|
if (method.isGenerated()) {
|
|
39
41
|
kind = CallGraph_1.CallGraphNodeKind.intrinsic;
|
|
40
42
|
}
|
|
41
|
-
if (method.
|
|
43
|
+
else if (method.getBody() === undefined || method.getCfg() === undefined) {
|
|
44
|
+
kind = CallGraph_1.CallGraphNodeKind.blank;
|
|
45
|
+
}
|
|
46
|
+
else if (method.getName() === 'constructor') {
|
|
42
47
|
kind = CallGraph_1.CallGraphNodeKind.constructor;
|
|
43
48
|
}
|
|
44
49
|
this.cg.addCallGraphNode(m, kind);
|
|
45
50
|
}
|
|
51
|
+
}
|
|
52
|
+
buildDirectCallGraph(methods) {
|
|
53
|
+
var _a;
|
|
54
|
+
this.buildCGNodes(methods);
|
|
46
55
|
for (const method of methods) {
|
|
47
56
|
let cfg = method.getCfg();
|
|
48
57
|
if (cfg === undefined) {
|
|
@@ -60,8 +69,7 @@ class CallGraphBuilder {
|
|
|
60
69
|
if (callee && invokeExpr instanceof Expr_1.ArkStaticInvokeExpr) {
|
|
61
70
|
this.cg.addDirectOrSpecialCallEdge(method.getSignature(), callee, stmt);
|
|
62
71
|
}
|
|
63
|
-
else if (callee &&
|
|
64
|
-
invokeExpr instanceof Expr_1.ArkInstanceInvokeExpr &&
|
|
72
|
+
else if (callee && invokeExpr instanceof Expr_1.ArkInstanceInvokeExpr &&
|
|
65
73
|
(this.isConstructor(callee) || ((_a = this.scene.getMethod(callee)) === null || _a === void 0 ? void 0 : _a.isGenerated()))) {
|
|
66
74
|
this.cg.addDirectOrSpecialCallEdge(method.getSignature(), callee, stmt, false);
|
|
67
75
|
}
|
|
@@ -77,11 +85,11 @@ class CallGraphBuilder {
|
|
|
77
85
|
cgEntries.push(this.cg.getCallGraphNodeByMethod(entry).getID());
|
|
78
86
|
});
|
|
79
87
|
this.cg.setEntries(cgEntries);
|
|
80
|
-
let classHierarchyAnalysis = new ClassHierarchyAnalysis_1.ClassHierarchyAnalysis(this.scene, this.cg);
|
|
88
|
+
let classHierarchyAnalysis = new ClassHierarchyAnalysis_1.ClassHierarchyAnalysis(this.scene, this.cg, this);
|
|
81
89
|
classHierarchyAnalysis.start(displayGeneratedMethod);
|
|
82
90
|
}
|
|
83
91
|
buildCHA4WholeProject(displayGeneratedMethod = false) {
|
|
84
|
-
let classHierarchyAnalysis = new ClassHierarchyAnalysis_1.ClassHierarchyAnalysis(this.scene, this.cg);
|
|
92
|
+
let classHierarchyAnalysis = new ClassHierarchyAnalysis_1.ClassHierarchyAnalysis(this.scene, this.cg, this);
|
|
85
93
|
classHierarchyAnalysis.projectStart(displayGeneratedMethod);
|
|
86
94
|
}
|
|
87
95
|
buildRapidTypeCallGraph(entries, displayGeneratedMethod = false) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CallGraph, CallSite, DynCallSite, FuncID } from '../model/CallGraph';
|
|
1
|
+
import { CallGraph, CallSite, DynCallSite, FuncID, ICallSite } from '../model/CallGraph';
|
|
2
2
|
import { Scene } from '../../Scene';
|
|
3
3
|
import { Stmt } from '../../core/base/Stmt';
|
|
4
4
|
import { ArkThisRef } from '../../core/base/Ref';
|
|
@@ -64,7 +64,7 @@ export declare class PagBuilder {
|
|
|
64
64
|
addCallsEdgesFromFuncPag(funcPag: FuncPag, cid: ContextID): boolean;
|
|
65
65
|
addDynamicCallSite(funcPag: FuncPag, funcID: FuncID, cid: ContextID): void;
|
|
66
66
|
addUnknownCallSite(funcPag: FuncPag, funcID: FuncID): void;
|
|
67
|
-
addDynamicCallEdge(cs:
|
|
67
|
+
addDynamicCallEdge(cs: ICallSite, baseClassPTNode: NodeID, cid: ContextID): NodeID[];
|
|
68
68
|
/**
|
|
69
69
|
* all possible callee methods of a dynamic call site
|
|
70
70
|
* handle both PtrInvokeExpr and InstanceInvokeExpr
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PagBuilder.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PagBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAoC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"PagBuilder.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/PagBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAoC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3H,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAA+C,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAUzF,OAAO,EAA0F,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzI,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAM5D,OAAO,EAAE,SAAS,EAAuC,MAAM,WAAW,CAAC;AAC3E,OAAO,EACH,OAAO,EACP,YAAY,EAGZ,GAAG,EAMH,OAAO,EACP,WAAW,EAGX,WAAW,EACd,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzC,OAAO,EAAyB,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIlF,qBAAa,QAAQ;IACV,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;gBAEV,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM;CAI1C;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,aAAa,CAAC,CAA4B;IAClD,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,GAAG,CAA2B;IACtC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,2BAA2B,CAAiC;IACpE,OAAO,CAAC,6BAA6B,CAAiC;IACtE,OAAO,CAAC,gBAAgB,CAAqC;IAC7D,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,gBAAgB,CAAqC;IAC7D,OAAO,CAAC,uBAAuB,CAAyD;IAExF,OAAO,CAAC,mBAAmB,CAA8C;IACzE,OAAO,CAAC,+BAA+B,CAAyD;IAChG,OAAO,CAAC,oBAAoB,CAA0B;IACtD,OAAO,CAAC,qBAAqB,CAAkD;IAC/E,OAAO,CAAC,gBAAgB,CAAmC;IAC3D,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,kBAAkB,CAAmD;IAC7E,OAAO,CAAC,wBAAwB,CAAkC;IAClE,OAAO,CAAC,kBAAkB,CAA0B;gBAExC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB;IAUpF,OAAO,CAAC,4BAA4B;IAcpC,OAAO,CAAC,6BAA6B;IAQ9B,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAaxC,eAAe,IAAI,OAAO;IAe1B,KAAK,IAAI,IAAI;IAUb,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IA4C5C,OAAO,CAAC,2BAA2B;IAqBnC,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,2BAA2B;IA2BnC,OAAO,CAAC,yBAAyB;IAejC;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,qBAAqB;IAqC7B,OAAO,CAAC,wBAAwB;IAezB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI;IAsBzD,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAqC9E,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO;IAkCnE,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI;IA+C1E,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAgC1D,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,EAAE;IA8C3F;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAyDjB,8BAA8B,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE;IAiClI;;OAEG;IACI,+BAA+B,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE;IAkDnI,OAAO,CAAC,2BAA2B;IAiCnC,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,iBAAiB;IAclB,uBAAuB,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,EAAE;IAsDlE,0BAA0B,CAAC,kBAAkB,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,MAAM,EAAE;IAmCjF,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,iBAAiB;IA2BlB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE;IA2ClH;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6C3B;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IA6B9B;;OAEG;IACI,oBAAoB,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE;IA4BnH,0BAA0B,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE;IAkBrG,OAAO,CAAC,uBAAuB;IAwB/B,OAAO,CAAC,yBAAyB;IA6BjC,OAAO,CAAC,wBAAwB;IAsDzB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;IAyBzE;;;OAGG;IACI,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO;IAY3D,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO;IAWjE,sBAAsB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO;IAI/C,oBAAoB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAI/D;;;;;OAKG;IACI,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO;IAerF,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,SAAS;IAmBnG;;;;;OAKG;IACI,mBAAmB,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IA6BpH,kBAAkB,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK;IAkC1C;;;OAGG;IACI,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IA6BnD,OAAO,CAAC,gBAAgB;IA2CxB,OAAO,CAAC,UAAU;IAyBX,kBAAkB,IAAI,KAAK;IAIlC,OAAO,CAAC,wBAAwB;IAoBhC;;;OAGG;IACH,OAAO,CAAC,cAAc;IA4BtB,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,eAAe;IAavB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmB9B,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,cAAc;IAUf,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI;IAO7D,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,IAAI;IAQzE,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK;IAqBrD,MAAM,IAAI,IAAI;IAId,SAAS,IAAI,IAAI;IAIjB,OAAO,IAAI,MAAM;IAIjB,iBAAiB,IAAI,MAAM,EAAE;IAQ7B,eAAe,IAAI,MAAM,EAAE;IAIlC;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;IAyBpC,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,+BAA+B;IAWvC,OAAO,CAAC,2BAA2B;IA2BnC,OAAO,CAAC,oBAAoB;IAwB5B,OAAO,CAAC,oBAAoB;IAQrB,oBAAoB,CAAC,GAAG,EAAE,KAAK,GAAG,KAAK,EAAE;IAKzC,wBAAwB,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO;IAsB7E,iBAAiB,IAAI,MAAM,EAAE;IAM7B,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI;IAOpE,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAItD,iBAAiB,IAAI,IAAI;IAIhC,OAAO,CAAC,mBAAmB;CAqB9B"}
|
|
@@ -556,7 +556,9 @@ class PagBuilder {
|
|
|
556
556
|
// Pass base's pts to callee's this pointer
|
|
557
557
|
if (!dstCGNode.isSdkMethod() && ivkExpr instanceof Expr_1.ArkInstanceInvokeExpr) {
|
|
558
558
|
let srcBaseNode = this.addThisRefCallEdge(baseClassPTNode, cid, ivkExpr.getBase(), callee, calleeCid, staticCS.callerFuncID);
|
|
559
|
-
|
|
559
|
+
if (srcBaseNode !== -1) {
|
|
560
|
+
srcNodes.push(srcBaseNode);
|
|
561
|
+
}
|
|
560
562
|
}
|
|
561
563
|
else if (!dstCGNode.isSdkMethod() && ivkExpr instanceof Expr_1.ArkPtrInvokeExpr) {
|
|
562
564
|
let originCS = ptNode.getCS();
|
|
@@ -673,7 +675,10 @@ class PagBuilder {
|
|
|
673
675
|
}
|
|
674
676
|
addThisEdge(staticCS, cid, realCallee, srcNodes, baseClassPTNode, calleeCid) {
|
|
675
677
|
if (!(staticCS.args[0] instanceof Constant_1.NullConstant) && !realCallee.isStatic()) {
|
|
676
|
-
|
|
678
|
+
let srcNodeID = this.addThisRefCallEdge(baseClassPTNode, cid, staticCS.args[0], realCallee, calleeCid, staticCS.callerFuncID);
|
|
679
|
+
if (srcNodeID !== -1) {
|
|
680
|
+
srcNodes.push(srcNodeID);
|
|
681
|
+
}
|
|
677
682
|
}
|
|
678
683
|
}
|
|
679
684
|
setFunctionThisPt(staticCS, srcNode, cid) {
|
|
@@ -769,6 +774,9 @@ class PagBuilder {
|
|
|
769
774
|
}
|
|
770
775
|
addThisRefCallEdge(baseClassPTNode, cid, baseLocal, callee, calleeCid, callerFunID) {
|
|
771
776
|
let thisRefNodeID = this.recordThisRefNode(baseClassPTNode, callee, calleeCid);
|
|
777
|
+
if (thisRefNodeID === -1) {
|
|
778
|
+
return -1;
|
|
779
|
+
}
|
|
772
780
|
let thisRefNode = this.pag.getNode(thisRefNodeID);
|
|
773
781
|
let srcBaseLocal = baseLocal;
|
|
774
782
|
srcBaseLocal = this.getRealThisLocal(srcBaseLocal, callerFunID);
|
|
@@ -1043,7 +1051,7 @@ class PagBuilder {
|
|
|
1043
1051
|
dstPagNode.setSdkParam();
|
|
1044
1052
|
let sdkParamInvokeStmt = new Stmt_1.ArkInvokeStmt(new Expr_1.ArkPtrInvokeExpr(arg.getType().getMethodSignature(), paramValue, []));
|
|
1045
1053
|
// create new DynCallSite
|
|
1046
|
-
let sdkParamCallSite = new CallGraph_1.DynCallSite(
|
|
1054
|
+
let sdkParamCallSite = new CallGraph_1.DynCallSite(sdkParamInvokeStmt, undefined, undefined, funcID);
|
|
1047
1055
|
dstPagNode.addRelatedDynCallSite(sdkParamCallSite);
|
|
1048
1056
|
}
|
|
1049
1057
|
this.pag.addPagEdge(srcPagNode, dstPagNode, Pag_1.PagEdgeKind.Copy, cs.callStmt);
|