arkanalyzer 1.0.40 → 1.0.41
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/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +3 -4
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +7 -8
- package/lib/callgraph/model/CallGraph.d.ts +5 -5
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +18 -21
- package/lib/callgraph/model/CallSite.d.ts +16 -6
- package/lib/callgraph/model/CallSite.d.ts.map +1 -1
- package/lib/callgraph/model/CallSite.js +48 -8
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +0 -1
- package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -1
- package/lib/callgraph/model/builder/CallGraphBuilder.js +0 -8
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +3 -6
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +6 -29
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +6 -15
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +56 -80
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +2 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +12 -8
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +9 -3
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +12 -5
- package/lib/callgraph/pointerAnalysis/context/Context.d.ts +69 -0
- package/lib/callgraph/pointerAnalysis/context/Context.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/context/Context.js +202 -0
- package/lib/callgraph/pointerAnalysis/context/ContextItem.d.ts +40 -0
- package/lib/callgraph/pointerAnalysis/context/ContextItem.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/context/ContextItem.js +99 -0
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts +46 -0
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.d.ts.map +1 -0
- package/lib/callgraph/pointerAnalysis/context/ContextSelector.js +138 -0
- package/lib/core/common/ArkIRTransformer.d.ts +1 -0
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +58 -2
- package/lib/core/common/ArkValueTransformer.d.ts +1 -1
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +12 -2
- package/lib/core/graph/BaseExplicitGraph.d.ts +1 -0
- package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
- package/lib/core/graph/BaseExplicitGraph.js +3 -0
- package/lib/core/graph/builder/CfgBuilder.d.ts +2 -1
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +51 -7
- package/lib/core/model/builder/ArkClassBuilder.js +18 -1
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +2 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -4
- package/lib/save/arkir/ArkIRMethodPrinter.d.ts.map +1 -1
- package/lib/save/arkir/ArkIRMethodPrinter.js +13 -5
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +9 -1
- package/package.json +2 -2
- package/lib/callgraph/pointerAnalysis/Context.d.ts +0 -38
- package/lib/callgraph/pointerAnalysis/Context.d.ts.map +0 -1
- package/lib/callgraph/pointerAnalysis/Context.js +0 -154
|
@@ -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;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;
|
|
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;IA2DtE,SAAS,CAAC,gBAAgB,IAAI,QAAQ,EAAE;CAI3C"}
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.ClassHierarchyAnalysis = void 0;
|
|
18
18
|
const Expr_1 = require("../../core/base/Expr");
|
|
19
|
-
const CallGraph_1 = require("../model/CallGraph");
|
|
20
19
|
const AbstractAnalysis_1 = require("./AbstractAnalysis");
|
|
21
20
|
class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
22
21
|
constructor(scene, cg, cb) {
|
|
@@ -31,7 +30,7 @@ class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
31
30
|
}
|
|
32
31
|
// process anonymous method call
|
|
33
32
|
this.getParamAnonymousMethod(invokeExpr).forEach(method => {
|
|
34
|
-
resolveResult.push(
|
|
33
|
+
resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(method).getID(), callerMethod));
|
|
35
34
|
});
|
|
36
35
|
let calleeMethod = this.resolveInvokeExpr(invokeExpr);
|
|
37
36
|
if (!calleeMethod) {
|
|
@@ -39,7 +38,7 @@ class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
39
38
|
}
|
|
40
39
|
if (invokeExpr instanceof Expr_1.ArkStaticInvokeExpr) {
|
|
41
40
|
// get specific method
|
|
42
|
-
resolveResult.push(
|
|
41
|
+
resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(calleeMethod.getSignature()).getID(), callerMethod));
|
|
43
42
|
}
|
|
44
43
|
else {
|
|
45
44
|
let declareClass = calleeMethod.getDeclaringArkClass();
|
|
@@ -56,7 +55,7 @@ class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
56
55
|
return;
|
|
57
56
|
}
|
|
58
57
|
if (possibleCalleeMethod && !possibleCalleeMethod.isAbstract()) {
|
|
59
|
-
resolveResult.push(
|
|
58
|
+
resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(possibleCalleeMethod.getSignature()).getID(), callerMethod));
|
|
60
59
|
}
|
|
61
60
|
});
|
|
62
61
|
}
|
|
@@ -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;IAIhC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;
|
|
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;IAgEtE,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAqBtD,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"}
|
|
@@ -39,7 +39,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
39
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
40
|
exports.RapidTypeAnalysis = void 0;
|
|
41
41
|
const Expr_1 = require("../../core/base/Expr");
|
|
42
|
-
const CallGraph_1 = require("../model/CallGraph");
|
|
43
42
|
const AbstractAnalysis_1 = require("./AbstractAnalysis");
|
|
44
43
|
const logger_1 = __importStar(require("../../utils/logger"));
|
|
45
44
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'RTA');
|
|
@@ -59,7 +58,7 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
59
58
|
}
|
|
60
59
|
// process anonymous method call
|
|
61
60
|
this.getParamAnonymousMethod(invokeExpr).forEach(method => {
|
|
62
|
-
resolveResult.push(
|
|
61
|
+
resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(method).getID(), callerMethod));
|
|
63
62
|
});
|
|
64
63
|
let calleeMethod = this.resolveInvokeExpr(invokeExpr);
|
|
65
64
|
if (!calleeMethod) {
|
|
@@ -67,7 +66,7 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
67
66
|
}
|
|
68
67
|
if (invokeExpr instanceof Expr_1.ArkStaticInvokeExpr) {
|
|
69
68
|
// get specific method
|
|
70
|
-
resolveResult.push(
|
|
69
|
+
resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(calleeMethod.getSignature()).getID(), callerMethod));
|
|
71
70
|
}
|
|
72
71
|
else {
|
|
73
72
|
let declareClass = calleeMethod.getDeclaringArkClass();
|
|
@@ -77,8 +76,7 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
77
76
|
return;
|
|
78
77
|
}
|
|
79
78
|
let possibleCalleeMethod = arkClass.getMethodWithName(calleeMethod.getName());
|
|
80
|
-
if (possibleCalleeMethod &&
|
|
81
|
-
possibleCalleeMethod.isGenerated() &&
|
|
79
|
+
if (possibleCalleeMethod && possibleCalleeMethod.isGenerated() &&
|
|
82
80
|
arkClass.getSignature().toString() !== declareClass.getSignature().toString()) {
|
|
83
81
|
// remove the generated method in extended classes
|
|
84
82
|
return;
|
|
@@ -86,11 +84,12 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
86
84
|
if (!(possibleCalleeMethod && !possibleCalleeMethod.isAbstract())) {
|
|
87
85
|
return;
|
|
88
86
|
}
|
|
87
|
+
let calleeNode = this.cg.getCallGraphNodeByMethod(possibleCalleeMethod.getSignature());
|
|
89
88
|
if (!this.instancedClasses.has(arkClass.getSignature())) {
|
|
90
|
-
this.addIgnoredCalls(arkClass.getSignature(), callerMethod,
|
|
89
|
+
this.addIgnoredCalls(arkClass.getSignature(), callerMethod, calleeNode.getID(), invokeStmt);
|
|
91
90
|
}
|
|
92
91
|
else {
|
|
93
|
-
resolveResult.push(
|
|
92
|
+
resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, calleeNode.getID(), callerMethod));
|
|
94
93
|
}
|
|
95
94
|
});
|
|
96
95
|
}
|
|
@@ -105,7 +104,7 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
|
|
|
105
104
|
if (ignoredCalls) {
|
|
106
105
|
ignoredCalls.forEach(call => {
|
|
107
106
|
this.cg.addDynamicCallEdge(call.caller, call.callee, call.callStmt);
|
|
108
|
-
newCallSites.push(
|
|
107
|
+
newCallSites.push(this.cg.getCallSiteManager().newCallSite(call.callStmt, undefined, call.callee, call.caller));
|
|
109
108
|
});
|
|
110
109
|
}
|
|
111
110
|
this.instancedClasses.add(sig);
|
|
@@ -3,7 +3,7 @@ import { Stmt } from '../../core/base/Stmt';
|
|
|
3
3
|
import { Scene } from '../../Scene';
|
|
4
4
|
import { ArkMethod } from '../../core/model/ArkMethod';
|
|
5
5
|
import { BaseEdge, BaseNode, BaseExplicitGraph, NodeID } from '../../core/graph/BaseExplicitGraph';
|
|
6
|
-
import { CallSite, DynCallSite, ICallSite } from './CallSite';
|
|
6
|
+
import { CallSite, CallSiteID, CallSiteManager, DynCallSite, ICallSite } from './CallSite';
|
|
7
7
|
export type Method = MethodSignature;
|
|
8
8
|
export type FuncID = number;
|
|
9
9
|
export { CallSite, DynCallSite, ICallSite };
|
|
@@ -37,14 +37,12 @@ export declare class CallGraphNode extends BaseNode {
|
|
|
37
37
|
}
|
|
38
38
|
export declare class CallGraph extends BaseExplicitGraph {
|
|
39
39
|
private scene;
|
|
40
|
-
private
|
|
41
|
-
private callSiteToIdMap;
|
|
40
|
+
private csManager;
|
|
42
41
|
private stmtToCallSitemap;
|
|
43
42
|
private stmtToDynCallSitemap;
|
|
44
43
|
private methodToCGNodeMap;
|
|
45
44
|
private callPairToEdgeMap;
|
|
46
45
|
private methodToCallSiteMap;
|
|
47
|
-
private callSiteNum;
|
|
48
46
|
private entries;
|
|
49
47
|
private cgStat;
|
|
50
48
|
private dummyMainMethodID;
|
|
@@ -58,7 +56,7 @@ export declare class CallGraph extends BaseExplicitGraph {
|
|
|
58
56
|
removeCallGraphEdge(nodeID: NodeID): void;
|
|
59
57
|
addDynamicCallInfo(callStmt: Stmt, caller: Method, protentialCallee?: Method): void;
|
|
60
58
|
addDynamicCallEdge(callerID: NodeID, calleeID: NodeID, callStmt: Stmt): void;
|
|
61
|
-
|
|
59
|
+
getDynCallSiteByStmt(stmt: Stmt): DynCallSite | undefined;
|
|
62
60
|
addStmtToCallSiteMap(stmt: Stmt, cs: CallSite): boolean;
|
|
63
61
|
getCallSiteByStmt(stmt: Stmt): CallSite[];
|
|
64
62
|
addMethodToCallSiteMap(funcID: FuncID, cs: CallSite): void;
|
|
@@ -79,5 +77,7 @@ export declare class CallGraph extends BaseExplicitGraph {
|
|
|
79
77
|
getDummyMainFuncID(): FuncID | undefined;
|
|
80
78
|
isUnknownMethod(funcID: FuncID): boolean;
|
|
81
79
|
getGraphName(): string;
|
|
80
|
+
getCallSiteManager(): CallSiteManager;
|
|
81
|
+
getCallSiteInfo(csID: CallSiteID): string;
|
|
82
82
|
}
|
|
83
83
|
//# sourceMappingURL=CallGraph.d.ts.map
|
|
@@ -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,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,
|
|
1
|
+
{"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,9 +53,6 @@ class CallGraphEdge extends BaseExplicitGraph_1.BaseEdge {
|
|
|
53
53
|
const indirectCallNums = this.indirectCalls.size;
|
|
54
54
|
const directCallNums = this.directCalls.size;
|
|
55
55
|
const specialCallNums = this.specialCalls.size;
|
|
56
|
-
if ([CallGraphNodeKind.intrinsic, CallGraphNodeKind.constructor].includes(this.getDstNode().getKind())) {
|
|
57
|
-
return '';
|
|
58
|
-
}
|
|
59
56
|
if (indirectCallNums !== 0 && directCallNums === 0) {
|
|
60
57
|
return 'color=red';
|
|
61
58
|
}
|
|
@@ -90,9 +87,6 @@ class CallGraphNode extends BaseExplicitGraph_1.BaseNode {
|
|
|
90
87
|
return this.kind === CallGraphNodeKind.blank;
|
|
91
88
|
}
|
|
92
89
|
getDotAttr() {
|
|
93
|
-
if ([CallGraphNodeKind.intrinsic, CallGraphNodeKind.constructor].includes(this.getKind())) {
|
|
94
|
-
return '';
|
|
95
|
-
}
|
|
96
90
|
return 'shape=box';
|
|
97
91
|
}
|
|
98
92
|
getDotLabel() {
|
|
@@ -105,14 +99,12 @@ exports.CallGraphNode = CallGraphNode;
|
|
|
105
99
|
class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
106
100
|
constructor(s) {
|
|
107
101
|
super();
|
|
108
|
-
this.
|
|
109
|
-
this.callSiteToIdMap = new Map();
|
|
102
|
+
this.csManager = new CallSite_1.CallSiteManager();
|
|
110
103
|
this.stmtToCallSitemap = new Map();
|
|
111
104
|
this.stmtToDynCallSitemap = new Map();
|
|
112
105
|
this.methodToCGNodeMap = new Map();
|
|
113
106
|
this.callPairToEdgeMap = new Map();
|
|
114
107
|
this.methodToCallSiteMap = new Map();
|
|
115
|
-
this.callSiteNum = 0;
|
|
116
108
|
this.scene = s;
|
|
117
109
|
this.cgStat = new Statistics_1.CGStat();
|
|
118
110
|
}
|
|
@@ -160,16 +152,7 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
160
152
|
let callerNode = this.getCallGraphNodeByMethod(caller);
|
|
161
153
|
let calleeNode = this.getCallGraphNodeByMethod(callee);
|
|
162
154
|
let args = (_a = callStmt.getInvokeExpr()) === null || _a === void 0 ? void 0 : _a.getArgs();
|
|
163
|
-
let cs =
|
|
164
|
-
let csID;
|
|
165
|
-
if (!this.callSiteToIdMap.has(cs)) {
|
|
166
|
-
csID = this.callSiteNum++;
|
|
167
|
-
this.idToCallSiteMap.set(csID, cs);
|
|
168
|
-
this.callSiteToIdMap.set(cs, csID);
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
csID = this.callSiteToIdMap.get(cs);
|
|
172
|
-
}
|
|
155
|
+
let cs = this.csManager.newCallSite(callStmt, args, calleeNode.getID(), callerNode.getID());
|
|
173
156
|
if (this.addStmtToCallSiteMap(callStmt, cs)) {
|
|
174
157
|
// TODO: check stmt exists
|
|
175
158
|
}
|
|
@@ -180,6 +163,7 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
180
163
|
callEdge.getSrcNode().addOutgoingEdge(callEdge);
|
|
181
164
|
callEdge.getDstNode().addIncomingEdge(callEdge);
|
|
182
165
|
this.callPairToEdgeMap.set(this.getCallPairString(callerNode.getID(), calleeNode.getID()), callEdge);
|
|
166
|
+
this.edgeNum++;
|
|
183
167
|
}
|
|
184
168
|
if (isDirectCall) {
|
|
185
169
|
callEdge.addDirectCallSite(callStmt);
|
|
@@ -205,7 +189,7 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
205
189
|
calleeNode = this.getCallGraphNodeByMethod(protentialCallee);
|
|
206
190
|
}
|
|
207
191
|
let args = (_a = callStmt.getInvokeExpr()) === null || _a === void 0 ? void 0 : _a.getArgs();
|
|
208
|
-
let cs =
|
|
192
|
+
let cs = this.csManager.newDynCallSite(callStmt, args, calleeNode === null || calleeNode === void 0 ? void 0 : calleeNode.getID(), callerNode.getID());
|
|
209
193
|
this.stmtToDynCallSitemap.set(callStmt, cs);
|
|
210
194
|
}
|
|
211
195
|
addDynamicCallEdge(callerID, calleeID, callStmt) {
|
|
@@ -217,10 +201,11 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
217
201
|
callEdge.getSrcNode().addOutgoingEdge(callEdge);
|
|
218
202
|
callEdge.getDstNode().addIncomingEdge(callEdge);
|
|
219
203
|
this.callPairToEdgeMap.set(this.getCallPairString(callerNode.getID(), calleeNode.getID()), callEdge);
|
|
204
|
+
this.edgeNum++;
|
|
220
205
|
}
|
|
221
206
|
callEdge.addInDirectCallSite(callStmt);
|
|
222
207
|
}
|
|
223
|
-
|
|
208
|
+
getDynCallSiteByStmt(stmt) {
|
|
224
209
|
return this.stmtToDynCallSitemap.get(stmt);
|
|
225
210
|
}
|
|
226
211
|
addStmtToCallSiteMap(stmt, cs) {
|
|
@@ -359,5 +344,17 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
359
344
|
getGraphName() {
|
|
360
345
|
return 'CG';
|
|
361
346
|
}
|
|
347
|
+
getCallSiteManager() {
|
|
348
|
+
return this.csManager;
|
|
349
|
+
}
|
|
350
|
+
getCallSiteInfo(csID) {
|
|
351
|
+
const callSite = this.csManager.getCallSiteById(csID);
|
|
352
|
+
if (!callSite) {
|
|
353
|
+
return '';
|
|
354
|
+
}
|
|
355
|
+
const callerMethod = this.getMethodByFuncID(callSite.callerFuncID);
|
|
356
|
+
const calleeMethod = this.getMethodByFuncID(callSite.getCalleeFuncID());
|
|
357
|
+
return `CS[${csID}]: {${callerMethod.toString()} -> ${calleeMethod.toString()}}`;
|
|
358
|
+
}
|
|
362
359
|
}
|
|
363
360
|
exports.CallGraph = CallGraph;
|
|
@@ -1,29 +1,39 @@
|
|
|
1
1
|
import { Stmt } from '../../core/base/Stmt';
|
|
2
2
|
import { Value } from '../../core/base/Value';
|
|
3
|
-
import { ContextID } from '../pointerAnalysis/Context';
|
|
4
3
|
import { FuncID } from './CallGraph';
|
|
5
4
|
export type CallSiteID = number;
|
|
6
5
|
export interface ICallSite {
|
|
6
|
+
id: CallSiteID;
|
|
7
7
|
callStmt: Stmt;
|
|
8
8
|
args: Value[] | undefined;
|
|
9
9
|
callerFuncID: FuncID;
|
|
10
|
+
getCalleeFuncID(): FuncID | undefined;
|
|
10
11
|
}
|
|
11
12
|
export declare class CallSite implements ICallSite {
|
|
13
|
+
id: CallSiteID;
|
|
12
14
|
callStmt: Stmt;
|
|
13
15
|
args: Value[] | undefined;
|
|
14
16
|
calleeFuncID: FuncID;
|
|
15
17
|
callerFuncID: FuncID;
|
|
16
|
-
constructor(s: Stmt, a: Value[] | undefined, ce: FuncID, cr: FuncID);
|
|
18
|
+
constructor(id: CallSiteID, s: Stmt, a: Value[] | undefined, ce: FuncID, cr: FuncID);
|
|
19
|
+
getCalleeFuncID(): FuncID | undefined;
|
|
17
20
|
}
|
|
18
21
|
export declare class DynCallSite implements ICallSite {
|
|
22
|
+
id: CallSiteID;
|
|
19
23
|
callStmt: Stmt;
|
|
20
24
|
args: Value[] | undefined;
|
|
21
25
|
protentialCalleeFuncID: FuncID | undefined;
|
|
22
26
|
callerFuncID: FuncID;
|
|
23
|
-
constructor(s: Stmt, a: Value[] | undefined, ptcCallee: FuncID | undefined, caller: FuncID);
|
|
27
|
+
constructor(id: CallSiteID, s: Stmt, a: Value[] | undefined, ptcCallee: FuncID | undefined, caller: FuncID);
|
|
28
|
+
getCalleeFuncID(): FuncID | undefined;
|
|
24
29
|
}
|
|
25
|
-
export declare class
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
export declare class CallSiteManager {
|
|
31
|
+
private idToCallSiteMap;
|
|
32
|
+
private callSiteToIdMap;
|
|
33
|
+
private dynToStaticMap;
|
|
34
|
+
newCallSite(s: Stmt, a: Value[] | undefined, ce: FuncID, cr: FuncID): CallSite;
|
|
35
|
+
newDynCallSite(s: Stmt, a: Value[] | undefined, ptcCallee: FuncID | undefined, caller: FuncID): DynCallSite;
|
|
36
|
+
cloneCallSiteFromDyn(dynCallSite: DynCallSite, calleeFuncID: FuncID): CallSite;
|
|
37
|
+
getCallSiteById(id: CallSiteID): ICallSite | undefined;
|
|
28
38
|
}
|
|
29
39
|
//# sourceMappingURL=CallSite.d.ts.map
|
|
@@ -1 +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,
|
|
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,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,UAAU,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,IAAI,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,qBAAa,QAAS,YAAW,SAAS;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;gBAEhB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAQ5E,eAAe,IAAI,MAAM,GAAG,SAAS;CAG/C;AAED,qBAAa,WAAY,YAAW,SAAS;IAClC,EAAE,EAAE,UAAU,CAAC;IACf,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,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM;IAQnG,eAAe,IAAI,MAAM,GAAG,SAAS;CAG/C;AAED,qBAAa,eAAe;IACxB,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,cAAc,CAA4C;IAE3D,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ;IAQ9E,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW;IAQ3G,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ;IAkB9E,eAAe,CAAC,EAAE,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS;CAGhE"}
|
|
@@ -14,29 +14,69 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
17
|
+
exports.CallSiteManager = exports.DynCallSite = exports.CallSite = void 0;
|
|
18
18
|
class CallSite {
|
|
19
|
-
constructor(s, a, ce, cr) {
|
|
19
|
+
constructor(id, s, a, ce, cr) {
|
|
20
|
+
this.id = id;
|
|
20
21
|
this.callStmt = s;
|
|
21
22
|
this.args = a;
|
|
22
23
|
this.calleeFuncID = ce;
|
|
23
24
|
this.callerFuncID = cr;
|
|
24
25
|
}
|
|
26
|
+
getCalleeFuncID() {
|
|
27
|
+
return this.calleeFuncID;
|
|
28
|
+
}
|
|
25
29
|
}
|
|
26
30
|
exports.CallSite = CallSite;
|
|
27
31
|
class DynCallSite {
|
|
28
|
-
constructor(s, a, ptcCallee, caller) {
|
|
32
|
+
constructor(id, s, a, ptcCallee, caller) {
|
|
33
|
+
this.id = id;
|
|
29
34
|
this.callerFuncID = caller;
|
|
30
35
|
this.callStmt = s;
|
|
31
36
|
this.args = a;
|
|
32
37
|
this.protentialCalleeFuncID = ptcCallee;
|
|
33
38
|
}
|
|
39
|
+
getCalleeFuncID() {
|
|
40
|
+
return this.protentialCalleeFuncID;
|
|
41
|
+
}
|
|
34
42
|
}
|
|
35
43
|
exports.DynCallSite = DynCallSite;
|
|
36
|
-
class
|
|
37
|
-
constructor(
|
|
38
|
-
|
|
39
|
-
this.
|
|
44
|
+
class CallSiteManager {
|
|
45
|
+
constructor() {
|
|
46
|
+
this.idToCallSiteMap = new Map();
|
|
47
|
+
this.callSiteToIdMap = new Map();
|
|
48
|
+
this.dynToStaticMap = new Map();
|
|
49
|
+
}
|
|
50
|
+
newCallSite(s, a, ce, cr) {
|
|
51
|
+
let id = this.idToCallSiteMap.size;
|
|
52
|
+
let callSite = new CallSite(id, s, a, ce, cr);
|
|
53
|
+
this.idToCallSiteMap.set(id, callSite);
|
|
54
|
+
this.callSiteToIdMap.set(callSite, id);
|
|
55
|
+
return callSite;
|
|
56
|
+
}
|
|
57
|
+
newDynCallSite(s, a, ptcCallee, caller) {
|
|
58
|
+
let id = this.idToCallSiteMap.size;
|
|
59
|
+
let callSite = new DynCallSite(id, s, a, ptcCallee, caller);
|
|
60
|
+
this.idToCallSiteMap.set(id, callSite);
|
|
61
|
+
this.callSiteToIdMap.set(callSite, id);
|
|
62
|
+
return callSite;
|
|
63
|
+
}
|
|
64
|
+
cloneCallSiteFromDyn(dynCallSite, calleeFuncID) {
|
|
65
|
+
var _a;
|
|
66
|
+
let clonedCS = (_a = this.dynToStaticMap.get(dynCallSite.id)) !== null && _a !== void 0 ? _a : [];
|
|
67
|
+
let foundCS = clonedCS
|
|
68
|
+
.map(id => this.idToCallSiteMap.get(id))
|
|
69
|
+
.find(cs => cs.calleeFuncID === calleeFuncID);
|
|
70
|
+
if (foundCS) {
|
|
71
|
+
return foundCS;
|
|
72
|
+
}
|
|
73
|
+
let staticCS = this.newCallSite(dynCallSite.callStmt, dynCallSite.args, calleeFuncID, dynCallSite.callerFuncID);
|
|
74
|
+
clonedCS.push(staticCS.id);
|
|
75
|
+
this.dynToStaticMap.set(dynCallSite.id, clonedCS);
|
|
76
|
+
return staticCS;
|
|
77
|
+
}
|
|
78
|
+
getCallSiteById(id) {
|
|
79
|
+
return this.idToCallSiteMap.get(id);
|
|
40
80
|
}
|
|
41
81
|
}
|
|
42
|
-
exports.
|
|
82
|
+
exports.CallSiteManager = CallSiteManager;
|
|
@@ -12,7 +12,6 @@ export declare class CallGraphBuilder {
|
|
|
12
12
|
buildCHA4WholeProject(displayGeneratedMethod?: boolean): void;
|
|
13
13
|
buildRapidTypeCallGraph(entries: Method[], displayGeneratedMethod?: boolean): void;
|
|
14
14
|
private getDCCallee;
|
|
15
|
-
private isConstructor;
|
|
16
15
|
setEntries(): void;
|
|
17
16
|
}
|
|
18
17
|
//# sourceMappingURL=CallGraphBuilder.d.ts.map
|
|
@@ -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;IAWpC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IAgBxC,oBAAoB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,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;IA2BhD,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;IAIZ,UAAU,IAAI,IAAI;CAO5B"}
|
|
@@ -50,7 +50,6 @@ class CallGraphBuilder {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
buildDirectCallGraph(methods) {
|
|
53
|
-
var _a;
|
|
54
53
|
this.buildCGNodes(methods);
|
|
55
54
|
for (const method of methods) {
|
|
56
55
|
let cfg = method.getCfg();
|
|
@@ -69,10 +68,6 @@ class CallGraphBuilder {
|
|
|
69
68
|
if (callee && invokeExpr instanceof Expr_1.ArkStaticInvokeExpr) {
|
|
70
69
|
this.cg.addDirectOrSpecialCallEdge(method.getSignature(), callee, stmt);
|
|
71
70
|
}
|
|
72
|
-
else if (callee && invokeExpr instanceof Expr_1.ArkInstanceInvokeExpr &&
|
|
73
|
-
(this.isConstructor(callee) || ((_a = this.scene.getMethod(callee)) === null || _a === void 0 ? void 0 : _a.isGenerated()))) {
|
|
74
|
-
this.cg.addDirectOrSpecialCallEdge(method.getSignature(), callee, stmt, false);
|
|
75
|
-
}
|
|
76
71
|
else {
|
|
77
72
|
this.cg.addDynamicCallInfo(stmt, method.getSignature(), callee);
|
|
78
73
|
}
|
|
@@ -105,9 +100,6 @@ class CallGraphBuilder {
|
|
|
105
100
|
getDCCallee(invokeExpr) {
|
|
106
101
|
return invokeExpr.getMethodSignature();
|
|
107
102
|
}
|
|
108
|
-
isConstructor(m) {
|
|
109
|
-
return m.getMethodSubSignature().getMethodName() === 'constructor';
|
|
110
|
-
}
|
|
111
103
|
setEntries() {
|
|
112
104
|
let nodesIter = this.cg.getNodesIter();
|
|
113
105
|
let entries = Array.from(nodesIter)
|
|
@@ -6,10 +6,10 @@ import { AbstractExpr } from '../../core/base/Expr';
|
|
|
6
6
|
import { AbstractFieldRef, ArkArrayRef, ArkInstanceFieldRef, ArkParameterRef, ArkStaticFieldRef, ArkThisRef } from '../../core/base/Ref';
|
|
7
7
|
import { Local } from '../../core/base/Local';
|
|
8
8
|
import { MethodSignature } from '../../core/model/ArkSignature';
|
|
9
|
-
import { ContextID } from './Context';
|
|
10
9
|
import { ExportInfo } from '../../core/model/ArkExport';
|
|
11
10
|
import { BuiltApiType } from './PTAUtils';
|
|
12
11
|
import { IPtsCollection } from './PtsDS';
|
|
12
|
+
import { ContextID } from './context/Context';
|
|
13
13
|
export type PagNodeType = Value;
|
|
14
14
|
export declare enum PagEdgeKind {
|
|
15
15
|
Address = 0,
|
|
@@ -147,7 +147,7 @@ export declare class PagStaticFieldNode extends PagNode {
|
|
|
147
147
|
}
|
|
148
148
|
export declare class PagThisRefNode extends PagNode {
|
|
149
149
|
pointToNode: NodeID[];
|
|
150
|
-
constructor(id: NodeID, thisRef: ArkThisRef);
|
|
150
|
+
constructor(id: NodeID, cid: number | undefined, thisRef: ArkThisRef);
|
|
151
151
|
getThisPTNode(): NodeID[];
|
|
152
152
|
addPTNode(ptNode: NodeID): void;
|
|
153
153
|
}
|
|
@@ -186,7 +186,7 @@ export declare class PagFuncNode extends PagNode {
|
|
|
186
186
|
getMethod(): MethodSignature;
|
|
187
187
|
setThisPt(thisPt: NodeID): void;
|
|
188
188
|
getThisPt(): NodeID;
|
|
189
|
-
setCS(
|
|
189
|
+
setCS(callSite: CallSite): void;
|
|
190
190
|
getCS(): CallSite;
|
|
191
191
|
setArgsOffset(offset: number): void;
|
|
192
192
|
getArgsOffset(): number;
|
|
@@ -226,9 +226,6 @@ export declare class Pag extends BaseExplicitGraph {
|
|
|
226
226
|
private addContextOrExportInfoMap;
|
|
227
227
|
private addExportInfoMap;
|
|
228
228
|
private addContextMap;
|
|
229
|
-
addPagThisRefNode(value: ArkThisRef): PagNode;
|
|
230
|
-
addPagThisLocalNode(ptNode: NodeID, value: Local): PagNode;
|
|
231
|
-
getOrNewThisRefNode(thisRefNodeID: NodeID, value: ArkThisRef): PagNode;
|
|
232
229
|
getOrNewThisLocalNode(cid: ContextID, ptNode: NodeID, value: Local, s?: Stmt): PagNode;
|
|
233
230
|
hasExportNode(v: ExportInfo): NodeID | undefined;
|
|
234
231
|
hasCtxNode(cid: ContextID, v: Value): NodeID | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pag.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/Pag.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACzG,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAiB,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAA+B,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzI,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAK9C,OAAO,EAAiD,eAAe,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"Pag.d.ts","sourceRoot":"","sources":["../../../src/callgraph/pointerAnalysis/Pag.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,7 +57,6 @@ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER,
|
|
|
57
57
|
/*
|
|
58
58
|
* Implementation of pointer-to assignment graph for pointer analysis
|
|
59
59
|
*/
|
|
60
|
-
const DUMMY_PAG_NODE_ID = -1;
|
|
61
60
|
var PagEdgeKind;
|
|
62
61
|
(function (PagEdgeKind) {
|
|
63
62
|
PagEdgeKind[PagEdgeKind["Address"] = 0] = "Address";
|
|
@@ -398,8 +397,8 @@ class PagStaticFieldNode extends PagNode {
|
|
|
398
397
|
}
|
|
399
398
|
exports.PagStaticFieldNode = PagStaticFieldNode;
|
|
400
399
|
class PagThisRefNode extends PagNode {
|
|
401
|
-
constructor(id, thisRef) {
|
|
402
|
-
super(id,
|
|
400
|
+
constructor(id, cid = undefined, thisRef) {
|
|
401
|
+
super(id, cid, thisRef, PagNodeKind.ThisRef);
|
|
403
402
|
this.pointToNode = [];
|
|
404
403
|
}
|
|
405
404
|
getThisPTNode() {
|
|
@@ -498,8 +497,8 @@ class PagFuncNode extends PagNode {
|
|
|
498
497
|
getThisPt() {
|
|
499
498
|
return this.thisPt;
|
|
500
499
|
}
|
|
501
|
-
setCS(
|
|
502
|
-
this.originCallSite =
|
|
500
|
+
setCS(callSite) {
|
|
501
|
+
this.originCallSite = callSite;
|
|
503
502
|
}
|
|
504
503
|
getCS() {
|
|
505
504
|
return this.originCallSite;
|
|
@@ -673,7 +672,7 @@ class Pag extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
673
672
|
pagNode = new PagParamNode(id, cid, value, stmt);
|
|
674
673
|
}
|
|
675
674
|
else if (value instanceof Ref_1.ArkThisRef) {
|
|
676
|
-
|
|
675
|
+
pagNode = new PagThisRefNode(id, cid, value);
|
|
677
676
|
}
|
|
678
677
|
else {
|
|
679
678
|
throw new Error('unsupported Value type ' + value.getType().toString());
|
|
@@ -771,29 +770,6 @@ class Pag extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
771
770
|
}
|
|
772
771
|
this.contextBaseToIdMap.set(base, ctxMap);
|
|
773
772
|
}
|
|
774
|
-
/*
|
|
775
|
-
* This node has no context info
|
|
776
|
-
* but point to node info
|
|
777
|
-
*/
|
|
778
|
-
addPagThisRefNode(value) {
|
|
779
|
-
let id = this.nodeNum + 1;
|
|
780
|
-
let pagNode = new PagThisRefNode(id, value);
|
|
781
|
-
this.addNode(pagNode);
|
|
782
|
-
return pagNode;
|
|
783
|
-
}
|
|
784
|
-
addPagThisLocalNode(ptNode, value) {
|
|
785
|
-
let id = this.nodeNum + 1;
|
|
786
|
-
let pagNode = new PagLocalNode(id, ptNode, value);
|
|
787
|
-
this.addNode(pagNode);
|
|
788
|
-
return pagNode;
|
|
789
|
-
}
|
|
790
|
-
getOrNewThisRefNode(thisRefNodeID, value) {
|
|
791
|
-
if (thisRefNodeID !== -1) {
|
|
792
|
-
return this.getNode(thisRefNodeID);
|
|
793
|
-
}
|
|
794
|
-
let thisRefNode = this.addPagThisRefNode(value);
|
|
795
|
-
return thisRefNode;
|
|
796
|
-
}
|
|
797
773
|
getOrNewThisLocalNode(cid, ptNode, value, s) {
|
|
798
774
|
if (ptNode !== -1) {
|
|
799
775
|
return this.getNode(ptNode);
|
|
@@ -886,6 +862,7 @@ class Pag extends BaseExplicitGraph_1.BaseExplicitGraph {
|
|
|
886
862
|
break;
|
|
887
863
|
default:
|
|
888
864
|
}
|
|
865
|
+
this.edgeNum++;
|
|
889
866
|
return true;
|
|
890
867
|
}
|
|
891
868
|
getAddrEdges() {
|