arkanalyzer 1.0.28 → 1.0.30
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/Config.d.ts.map +1 -1
- package/lib/Config.js +9 -1
- package/lib/Scene.d.ts +7 -0
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +196 -173
- package/lib/VFG/builder/DVFGBuilder.d.ts.map +1 -1
- package/lib/VFG/builder/DVFGBuilder.js +11 -6
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +3 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.js +18 -10
- package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/RapidTypeAnalysis.js +8 -7
- package/lib/callgraph/common/Statistics.d.ts.map +1 -1
- package/lib/callgraph/common/Statistics.js +25 -24
- package/lib/callgraph/model/CallGraph.d.ts +1 -1
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +6 -3
- package/lib/callgraph/pointerAnalysis/Context.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Context.js +0 -1
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +26 -26
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +4 -0
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +138 -108
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +15 -14
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +6 -4
- package/lib/core/base/Type.d.ts +10 -1
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +18 -1
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +3 -1
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +17 -20
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +18 -10
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +13 -2
- package/lib/core/dataflow/DataflowSolver.d.ts +1 -0
- package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -1
- package/lib/core/dataflow/DataflowSolver.js +21 -17
- package/lib/core/dataflow/ReachingDef.d.ts.map +1 -1
- package/lib/core/dataflow/ReachingDef.js +6 -0
- package/lib/core/dataflow/UndefinedVariable.d.ts.map +1 -1
- package/lib/core/dataflow/UndefinedVariable.js +0 -25
- package/lib/core/graph/Cfg.d.ts +1 -0
- package/lib/core/graph/Cfg.d.ts.map +1 -1
- package/lib/core/graph/Cfg.js +49 -45
- package/lib/core/graph/DominanceFinder.js +19 -19
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts +1 -0
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +34 -31
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +13 -6
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +72 -63
- package/lib/save/serializeArkIR.d.ts.map +1 -1
- package/lib/save/serializeArkIR.js +11 -24
- package/lib/save/source/SourceBody.js +10 -10
- package/lib/save/source/SourceFilePrinter.d.ts +1 -0
- package/lib/save/source/SourceFilePrinter.d.ts.map +1 -1
- package/lib/save/source/SourceFilePrinter.js +11 -8
- package/lib/save/source/SourceNamespace.d.ts +1 -0
- package/lib/save/source/SourceNamespace.d.ts.map +1 -1
- package/lib/save/source/SourceNamespace.js +11 -8
- package/lib/save/source/SourceStmt.d.ts +1 -0
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +37 -35
- package/lib/save/source/SourceTransformer.d.ts +2 -0
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +64 -54
- package/lib/transformer/StaticSingleAssignmentFormer.d.ts +5 -0
- package/lib/transformer/StaticSingleAssignmentFormer.d.ts.map +1 -1
- package/lib/transformer/StaticSingleAssignmentFormer.js +119 -101
- package/lib/utils/CfgStructualAnalysis.d.ts +1 -0
- package/lib/utils/CfgStructualAnalysis.d.ts.map +1 -1
- package/lib/utils/CfgStructualAnalysis.js +28 -24
- package/lib/utils/FileUtils.d.ts.map +1 -1
- package/lib/utils/FileUtils.js +14 -12
- package/lib/utils/callGraphUtils.d.ts.map +1 -1
- package/lib/utils/callGraphUtils.js +26 -23
- package/lib/utils/entryMethodUtils.d.ts.map +1 -1
- package/lib/utils/entryMethodUtils.js +11 -8
- package/lib/utils/pathTransfer.d.ts +1 -0
- package/lib/utils/pathTransfer.d.ts.map +1 -1
- package/lib/utils/pathTransfer.js +10 -1
- package/package.json +2 -2
package/lib/Config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAKhD,MAAM,WAAW,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE;YACJ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;SAC3B,CAAC;KACL,CAAC;CAEL;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAC9G,MAAM,WAAW,YAAY;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sBAAsB,CAAC,EAAC,OAAO,CAAA;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC;CACvC;AAID,qBAAa,WAAW;IACpB,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,sBAAsB,CAAc;IAE5C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,OAAO,CAAa;IAE5B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,WAAW,CAAsD;IAEzE,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,aAAa,CAAoC;IAEzD,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,CAAC,EAAE,YAAY;IAK3B,UAAU,IAAI,YAAY;IAIjC;;;;;;;OAOG;IACI,WAAW,CACd,iBAAiB,EAAE,MAAM,EACzB,sBAAsB,EAAE,MAAM,EAC9B,IAAI,EAAE,GAAG,EAAE,EACX,YAAY,CAAC,EAAE,MAAM,EAAE;IAU3B;;;;;;;;;;;;OAYG;IACI,mBAAmB,CAAC,sBAAsB,EAAE,MAAM;IAUlD,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,EACnF,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI;IAgBxE,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,sBAAsB;IAiBvB,aAAa,CAAC,cAAc,EAAE,MAAM;IAmCpC,oBAAoB;IAIpB,yBAAyB;IAIzB,eAAe;IAIf,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IAIzC,WAAW;IAIX,cAAc;IAId,aAAa;IAIb,UAAU;IAIjB,OAAO,CAAC,iBAAiB;CAmB5B"}
|
package/lib/Config.js
CHANGED
|
@@ -45,6 +45,7 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
45
45
|
const path_1 = __importDefault(require("path"));
|
|
46
46
|
const logger_1 = __importStar(require("./utils/logger"));
|
|
47
47
|
const getAllFiles_1 = require("./utils/getAllFiles");
|
|
48
|
+
const pathTransfer_1 = require("./utils/pathTransfer");
|
|
48
49
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Config');
|
|
49
50
|
const CONFIG_FILENAME = 'arkanalyzer.json';
|
|
50
51
|
const DEFAULT_CONFIG_FILE = path_1.default.join(__dirname, '../config', CONFIG_FILENAME);
|
|
@@ -209,13 +210,20 @@ class SceneConfig {
|
|
|
209
210
|
}
|
|
210
211
|
loadDefaultConfig(options) {
|
|
211
212
|
let configFile = DEFAULT_CONFIG_FILE;
|
|
213
|
+
const modulePath = (0, pathTransfer_1.getArkAnalyzerModulePath)('arkanalyzer');
|
|
214
|
+
if (modulePath !== null) {
|
|
215
|
+
configFile = path_1.default.join(modulePath, 'config', CONFIG_FILENAME);
|
|
216
|
+
}
|
|
212
217
|
if (!fs_1.default.existsSync(configFile)) {
|
|
213
218
|
configFile = path_1.default.join(__dirname, 'config', CONFIG_FILENAME);
|
|
214
219
|
}
|
|
220
|
+
logger.info(`try to parse config file ${configFile}`);
|
|
215
221
|
try {
|
|
216
222
|
this.options = Object.assign(Object.assign({}, this.options), JSON.parse(fs_1.default.readFileSync(configFile, 'utf-8')));
|
|
217
223
|
}
|
|
218
|
-
catch (error) {
|
|
224
|
+
catch (error) {
|
|
225
|
+
logger.error(`Failed to parse config file with error: ${error}`);
|
|
226
|
+
}
|
|
219
227
|
if (options) {
|
|
220
228
|
this.options = Object.assign(Object.assign({}, this.options), options);
|
|
221
229
|
}
|
package/lib/Scene.d.ts
CHANGED
|
@@ -276,7 +276,14 @@ export declare class Scene {
|
|
|
276
276
|
```
|
|
277
277
|
*/
|
|
278
278
|
inferSimpleTypes(): void;
|
|
279
|
+
private addNSClasses;
|
|
280
|
+
private addNSExportedClasses;
|
|
281
|
+
private addFileImportedClasses;
|
|
279
282
|
getClassMap(): Map<FileSignature | NamespaceSignature, ArkClass[]>;
|
|
283
|
+
private addNSLocals;
|
|
284
|
+
private addNSExportedLocals;
|
|
285
|
+
private addFileImportLocals;
|
|
286
|
+
private handleNestedNSLocals;
|
|
280
287
|
getGlobalVariableMap(): Map<FileSignature | NamespaceSignature, Local[]>;
|
|
281
288
|
getStaticInitMethods(): ArkMethod[];
|
|
282
289
|
buildClassDone(): boolean;
|
package/lib/Scene.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"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"}
|
package/lib/Scene.js
CHANGED
|
@@ -986,8 +986,98 @@ class Scene {
|
|
|
986
986
|
}
|
|
987
987
|
}
|
|
988
988
|
}
|
|
989
|
-
|
|
989
|
+
addNSClasses(namespaceStack, finalNamespaces, classMap, parentMap) {
|
|
990
|
+
while (namespaceStack.length > 0) {
|
|
991
|
+
const ns = namespaceStack.shift();
|
|
992
|
+
const nsClass = [];
|
|
993
|
+
for (const arkClass of ns.getClasses()) {
|
|
994
|
+
nsClass.push(arkClass);
|
|
995
|
+
}
|
|
996
|
+
classMap.set(ns.getNamespaceSignature(), nsClass);
|
|
997
|
+
if (ns.getNamespaces().length === 0) {
|
|
998
|
+
finalNamespaces.push(ns);
|
|
999
|
+
}
|
|
1000
|
+
else {
|
|
1001
|
+
for (const nsns of ns.getNamespaces()) {
|
|
1002
|
+
namespaceStack.push(nsns);
|
|
1003
|
+
parentMap.set(nsns, ns);
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
addNSExportedClasses(finalNamespaces, classMap, parentMap) {
|
|
990
1009
|
var _a, _b, _c, _d;
|
|
1010
|
+
while (finalNamespaces.length > 0) {
|
|
1011
|
+
const finalNS = finalNamespaces.shift();
|
|
1012
|
+
const exportClass = [];
|
|
1013
|
+
for (const arkClass of finalNS.getClasses()) {
|
|
1014
|
+
if (arkClass.isExported()) {
|
|
1015
|
+
exportClass.push(arkClass);
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
const parent = parentMap.get(finalNS);
|
|
1019
|
+
if (parent instanceof ArkNamespace_1.ArkNamespace) {
|
|
1020
|
+
(_a = classMap.get(parent.getNamespaceSignature())) === null || _a === void 0 ? void 0 : _a.push(...exportClass);
|
|
1021
|
+
}
|
|
1022
|
+
else if (parent instanceof ArkFile_1.ArkFile) {
|
|
1023
|
+
(_b = classMap.get(parent.getFileSignature())) === null || _b === void 0 ? void 0 : _b.push(...exportClass);
|
|
1024
|
+
}
|
|
1025
|
+
let p = finalNS;
|
|
1026
|
+
while (!(parentMap.get(p) instanceof ArkFile_1.ArkFile) && p.isExported()) {
|
|
1027
|
+
const grandParent = parentMap.get(parentMap.get(p));
|
|
1028
|
+
if (grandParent instanceof ArkNamespace_1.ArkNamespace) {
|
|
1029
|
+
(_c = classMap.get(grandParent.getNamespaceSignature())) === null || _c === void 0 ? void 0 : _c.push(...exportClass);
|
|
1030
|
+
p = parentMap.get(p);
|
|
1031
|
+
}
|
|
1032
|
+
else if (grandParent instanceof ArkFile_1.ArkFile) {
|
|
1033
|
+
(_d = classMap.get(grandParent.getFileSignature())) === null || _d === void 0 ? void 0 : _d.push(...exportClass);
|
|
1034
|
+
break;
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
if (parent instanceof ArkNamespace_1.ArkNamespace && !finalNamespaces.includes(parent)) {
|
|
1038
|
+
finalNamespaces.push(parent);
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1042
|
+
addFileImportedClasses(file, classMap) {
|
|
1043
|
+
const importClasses = [];
|
|
1044
|
+
const importNameSpaces = [];
|
|
1045
|
+
for (const importInfo of file.getImportInfos()) {
|
|
1046
|
+
const importClass = ModelUtils_1.ModelUtils.getClassInImportInfoWithName(importInfo.getImportClauseName(), file);
|
|
1047
|
+
if (importClass && !importClasses.includes(importClass)) {
|
|
1048
|
+
importClasses.push(importClass);
|
|
1049
|
+
continue;
|
|
1050
|
+
}
|
|
1051
|
+
const importNameSpace = ModelUtils_1.ModelUtils.getNamespaceInImportInfoWithName(importInfo.getImportClauseName(), file);
|
|
1052
|
+
if (importNameSpace && !importNameSpaces.includes(importNameSpace)) {
|
|
1053
|
+
try {
|
|
1054
|
+
// 遗留问题:只统计了项目文件的namespace,没统计sdk文件内部的引入
|
|
1055
|
+
const importNameSpaceClasses = classMap.get(importNameSpace.getNamespaceSignature());
|
|
1056
|
+
importClasses.push(...importNameSpaceClasses.filter(c => !importClasses.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
|
|
1057
|
+
}
|
|
1058
|
+
catch (_a) {
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
const fileClasses = classMap.get(file.getFileSignature());
|
|
1063
|
+
fileClasses.push(...importClasses.filter(c => !fileClasses.includes(c)));
|
|
1064
|
+
// 子节点加上父节点的class
|
|
1065
|
+
const namespaceStack = [...file.getNamespaces()];
|
|
1066
|
+
for (const ns of namespaceStack) {
|
|
1067
|
+
const nsClasses = classMap.get(ns.getNamespaceSignature());
|
|
1068
|
+
nsClasses.push(...fileClasses.filter(c => !nsClasses.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
|
|
1069
|
+
}
|
|
1070
|
+
while (namespaceStack.length > 0) {
|
|
1071
|
+
const ns = namespaceStack.shift();
|
|
1072
|
+
const nsClasses = classMap.get(ns.getNamespaceSignature());
|
|
1073
|
+
for (const nsns of ns.getNamespaces()) {
|
|
1074
|
+
const nsnsClasses = classMap.get(nsns.getNamespaceSignature());
|
|
1075
|
+
nsnsClasses.push(...nsClasses.filter(c => !nsnsClasses.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
|
|
1076
|
+
namespaceStack.push(nsns);
|
|
1077
|
+
}
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
getClassMap() {
|
|
991
1081
|
const classMap = new Map();
|
|
992
1082
|
for (const file of this.getFiles()) {
|
|
993
1083
|
const fileClass = [];
|
|
@@ -1003,99 +1093,124 @@ class Scene {
|
|
|
1003
1093
|
}
|
|
1004
1094
|
classMap.set(file.getFileSignature(), fileClass);
|
|
1005
1095
|
// 第一轮遍历,加上每个namespace自己的class
|
|
1006
|
-
|
|
1007
|
-
const ns = namespaceStack.shift();
|
|
1008
|
-
const nsClass = [];
|
|
1009
|
-
for (const arkClass of ns.getClasses()) {
|
|
1010
|
-
nsClass.push(arkClass);
|
|
1011
|
-
}
|
|
1012
|
-
classMap.set(ns.getNamespaceSignature(), nsClass);
|
|
1013
|
-
if (ns.getNamespaces().length === 0) {
|
|
1014
|
-
finalNamespaces.push(ns);
|
|
1015
|
-
}
|
|
1016
|
-
else {
|
|
1017
|
-
for (const nsns of ns.getNamespaces()) {
|
|
1018
|
-
namespaceStack.push(nsns);
|
|
1019
|
-
parentMap.set(nsns, ns);
|
|
1020
|
-
}
|
|
1021
|
-
}
|
|
1022
|
-
}
|
|
1096
|
+
this.addNSClasses(namespaceStack, finalNamespaces, classMap, parentMap);
|
|
1023
1097
|
// 第二轮遍历,父节点加上子节点的export的class
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1098
|
+
this.addNSExportedClasses(finalNamespaces, classMap, parentMap);
|
|
1099
|
+
}
|
|
1100
|
+
for (const file of this.getFiles()) {
|
|
1101
|
+
// 文件加上import的class,包括ns的
|
|
1102
|
+
this.addFileImportedClasses(file, classMap);
|
|
1103
|
+
}
|
|
1104
|
+
return classMap;
|
|
1105
|
+
}
|
|
1106
|
+
addNSLocals(namespaceStack, finalNamespaces, parentMap, globalVariableMap) {
|
|
1107
|
+
var _a;
|
|
1108
|
+
while (namespaceStack.length > 0) {
|
|
1109
|
+
const ns = namespaceStack.shift();
|
|
1110
|
+
const nsGlobalLocals = [];
|
|
1111
|
+
(_a = ns.getDefaultClass().getDefaultArkMethod().getBody()) === null || _a === void 0 ? void 0 : _a.getLocals().forEach(local => {
|
|
1112
|
+
if (local.getDeclaringStmt() && local.getName() !== 'this' && local.getName()[0] !== '$') {
|
|
1113
|
+
nsGlobalLocals.push(local);
|
|
1031
1114
|
}
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1115
|
+
});
|
|
1116
|
+
globalVariableMap.set(ns.getNamespaceSignature(), nsGlobalLocals);
|
|
1117
|
+
if (ns.getNamespaces().length === 0) {
|
|
1118
|
+
finalNamespaces.push(ns);
|
|
1119
|
+
}
|
|
1120
|
+
else {
|
|
1121
|
+
for (const nsns of ns.getNamespaces()) {
|
|
1122
|
+
namespaceStack.push(nsns);
|
|
1123
|
+
parentMap.set(nsns, ns);
|
|
1035
1124
|
}
|
|
1036
|
-
|
|
1037
|
-
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
addNSExportedLocals(finalNamespaces, globalVariableMap, parentMap) {
|
|
1129
|
+
var _a, _b, _c, _d;
|
|
1130
|
+
while (finalNamespaces.length > 0) {
|
|
1131
|
+
const finalNS = finalNamespaces.shift();
|
|
1132
|
+
const exportLocal = [];
|
|
1133
|
+
for (const exportInfo of finalNS.getExportInfos()) {
|
|
1134
|
+
if (exportInfo.getExportClauseType() === ArkExport_1.ExportType.LOCAL && exportInfo.getArkExport()) {
|
|
1135
|
+
exportLocal.push(exportInfo.getArkExport());
|
|
1038
1136
|
}
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1137
|
+
}
|
|
1138
|
+
const parent = parentMap.get(finalNS);
|
|
1139
|
+
if (parent instanceof ArkNamespace_1.ArkNamespace) {
|
|
1140
|
+
(_a = globalVariableMap.get(parent.getNamespaceSignature())) === null || _a === void 0 ? void 0 : _a.push(...exportLocal);
|
|
1141
|
+
}
|
|
1142
|
+
else if (parent instanceof ArkFile_1.ArkFile) {
|
|
1143
|
+
(_b = globalVariableMap.get(parent.getFileSignature())) === null || _b === void 0 ? void 0 : _b.push(...exportLocal);
|
|
1144
|
+
}
|
|
1145
|
+
let p = finalNS;
|
|
1146
|
+
while (!(parentMap.get(p) instanceof ArkFile_1.ArkFile) && p.isExported()) {
|
|
1147
|
+
const grandParent = parentMap.get(parentMap.get(p));
|
|
1148
|
+
if (grandParent instanceof ArkNamespace_1.ArkNamespace) {
|
|
1149
|
+
(_c = globalVariableMap.get(grandParent.getNamespaceSignature())) === null || _c === void 0 ? void 0 : _c.push(...exportLocal);
|
|
1150
|
+
p = parentMap.get(p);
|
|
1050
1151
|
}
|
|
1051
|
-
if (
|
|
1052
|
-
|
|
1152
|
+
else if (grandParent instanceof ArkFile_1.ArkFile) {
|
|
1153
|
+
(_d = globalVariableMap.get(grandParent.getFileSignature())) === null || _d === void 0 ? void 0 : _d.push(...exportLocal);
|
|
1154
|
+
break;
|
|
1053
1155
|
}
|
|
1054
1156
|
}
|
|
1157
|
+
if (parent instanceof ArkNamespace_1.ArkNamespace && !finalNamespaces.includes(parent)) {
|
|
1158
|
+
finalNamespaces.push(parent);
|
|
1159
|
+
}
|
|
1055
1160
|
}
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1161
|
+
}
|
|
1162
|
+
addFileImportLocals(file, globalVariableMap) {
|
|
1163
|
+
const importLocals = [];
|
|
1164
|
+
const importNameSpaces = [];
|
|
1165
|
+
for (const importInfo of file.getImportInfos()) {
|
|
1166
|
+
const importLocal = ModelUtils_1.ModelUtils.getLocalInImportInfoWithName(importInfo.getImportClauseName(), file);
|
|
1167
|
+
if (importLocal && !importLocals.includes(importLocal)) {
|
|
1168
|
+
importLocals.push(importLocal);
|
|
1169
|
+
}
|
|
1170
|
+
const importNameSpace = ModelUtils_1.ModelUtils.getNamespaceInImportInfoWithName(importInfo.getImportClauseName(), file);
|
|
1171
|
+
if (importNameSpace && !importNameSpaces.includes(importNameSpace)) {
|
|
1172
|
+
try {
|
|
1173
|
+
// 遗留问题:只统计了项目文件,没统计sdk文件内部的引入
|
|
1174
|
+
const importNameSpaceClasses = globalVariableMap.get(importNameSpace.getNamespaceSignature());
|
|
1175
|
+
importLocals.push(...importNameSpaceClasses.filter(c => !importLocals.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
|
|
1065
1176
|
}
|
|
1066
|
-
|
|
1067
|
-
if (importNameSpace && !importNameSpaces.includes(importNameSpace)) {
|
|
1068
|
-
try {
|
|
1069
|
-
// 遗留问题:只统计了项目文件的namespace,没统计sdk文件内部的引入
|
|
1070
|
-
const importNameSpaceClasses = classMap.get(importNameSpace.getNamespaceSignature());
|
|
1071
|
-
importClasses.push(...importNameSpaceClasses.filter(c => !importClasses.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
|
|
1072
|
-
}
|
|
1073
|
-
catch (_e) {
|
|
1074
|
-
}
|
|
1177
|
+
catch (_a) {
|
|
1075
1178
|
}
|
|
1076
1179
|
}
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
for (const nsns of ns.getNamespaces()) {
|
|
1089
|
-
const nsnsClasses = classMap.get(nsns.getNamespaceSignature());
|
|
1090
|
-
nsnsClasses.push(...nsClasses.filter(c => !nsnsClasses.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
|
|
1091
|
-
namespaceStack.push(nsns);
|
|
1180
|
+
}
|
|
1181
|
+
const fileLocals = globalVariableMap.get(file.getFileSignature());
|
|
1182
|
+
fileLocals.push(...importLocals.filter(c => !fileLocals.includes(c)));
|
|
1183
|
+
// 子节点加上父节点的local
|
|
1184
|
+
const namespaceStack = [...file.getNamespaces()];
|
|
1185
|
+
for (const ns of namespaceStack) {
|
|
1186
|
+
const nsLocals = globalVariableMap.get(ns.getNamespaceSignature());
|
|
1187
|
+
const nsLocalNameSet = new Set(nsLocals.map(item => item.getName()));
|
|
1188
|
+
for (const local of fileLocals) {
|
|
1189
|
+
if (!nsLocalNameSet.has(local.getName())) {
|
|
1190
|
+
nsLocals.push(local);
|
|
1092
1191
|
}
|
|
1093
1192
|
}
|
|
1094
1193
|
}
|
|
1095
|
-
|
|
1194
|
+
while (namespaceStack.length > 0) {
|
|
1195
|
+
const ns = namespaceStack.shift();
|
|
1196
|
+
const nsLocals = globalVariableMap.get(ns.getNamespaceSignature());
|
|
1197
|
+
for (const nsns of ns.getNamespaces()) {
|
|
1198
|
+
this.handleNestedNSLocals(nsns, nsLocals, globalVariableMap);
|
|
1199
|
+
namespaceStack.push(nsns);
|
|
1200
|
+
}
|
|
1201
|
+
}
|
|
1202
|
+
}
|
|
1203
|
+
handleNestedNSLocals(nsns, nsLocals, globalVariableMap) {
|
|
1204
|
+
const nsnsLocals = globalVariableMap.get(nsns.getNamespaceSignature());
|
|
1205
|
+
const nsnsLocalNameSet = new Set(nsnsLocals.map(item => item.getName()));
|
|
1206
|
+
for (const local of nsLocals) {
|
|
1207
|
+
if (!nsnsLocalNameSet.has(local.getName())) {
|
|
1208
|
+
nsnsLocals.push(local);
|
|
1209
|
+
}
|
|
1210
|
+
}
|
|
1096
1211
|
}
|
|
1097
1212
|
getGlobalVariableMap() {
|
|
1098
|
-
var _a, _b
|
|
1213
|
+
var _a, _b;
|
|
1099
1214
|
const globalVariableMap = new Map();
|
|
1100
1215
|
for (const file of this.getFiles()) {
|
|
1101
1216
|
const namespaceStack = [];
|
|
@@ -1113,105 +1228,13 @@ class Scene {
|
|
|
1113
1228
|
parentMap.set(ns, file);
|
|
1114
1229
|
}
|
|
1115
1230
|
// 第一轮遍历,加上每个namespace自己的local
|
|
1116
|
-
|
|
1117
|
-
const ns = namespaceStack.shift();
|
|
1118
|
-
const nsGlobalLocals = [];
|
|
1119
|
-
(_c = ns.getDefaultClass().getDefaultArkMethod().getBody()) === null || _c === void 0 ? void 0 : _c.getLocals().forEach(local => {
|
|
1120
|
-
if (local.getDeclaringStmt() && local.getName() !== 'this' && local.getName()[0] !== '$') {
|
|
1121
|
-
nsGlobalLocals.push(local);
|
|
1122
|
-
}
|
|
1123
|
-
});
|
|
1124
|
-
globalVariableMap.set(ns.getNamespaceSignature(), nsGlobalLocals);
|
|
1125
|
-
if (ns.getNamespaces().length === 0) {
|
|
1126
|
-
finalNamespaces.push(ns);
|
|
1127
|
-
}
|
|
1128
|
-
else {
|
|
1129
|
-
for (const nsns of ns.getNamespaces()) {
|
|
1130
|
-
namespaceStack.push(nsns);
|
|
1131
|
-
parentMap.set(nsns, ns);
|
|
1132
|
-
}
|
|
1133
|
-
}
|
|
1134
|
-
}
|
|
1231
|
+
this.addNSLocals(namespaceStack, finalNamespaces, parentMap, globalVariableMap);
|
|
1135
1232
|
// 第二轮遍历,父节点加上子节点的export的local
|
|
1136
|
-
|
|
1137
|
-
const finalNS = finalNamespaces.shift();
|
|
1138
|
-
const exportLocal = [];
|
|
1139
|
-
for (const exportInfo of finalNS.getExportInfos()) {
|
|
1140
|
-
if (exportInfo.getExportClauseType() === ArkExport_1.ExportType.LOCAL && exportInfo.getArkExport()) {
|
|
1141
|
-
exportLocal.push(exportInfo.getArkExport());
|
|
1142
|
-
}
|
|
1143
|
-
}
|
|
1144
|
-
const parent = parentMap.get(finalNS);
|
|
1145
|
-
if (parent instanceof ArkNamespace_1.ArkNamespace) {
|
|
1146
|
-
(_d = globalVariableMap.get(parent.getNamespaceSignature())) === null || _d === void 0 ? void 0 : _d.push(...exportLocal);
|
|
1147
|
-
}
|
|
1148
|
-
else if (parent instanceof ArkFile_1.ArkFile) {
|
|
1149
|
-
(_e = globalVariableMap.get(parent.getFileSignature())) === null || _e === void 0 ? void 0 : _e.push(...exportLocal);
|
|
1150
|
-
}
|
|
1151
|
-
let p = finalNS;
|
|
1152
|
-
while (!(parentMap.get(p) instanceof ArkFile_1.ArkFile) && p.isExported()) {
|
|
1153
|
-
const grandParent = parentMap.get(parentMap.get(p));
|
|
1154
|
-
if (grandParent instanceof ArkNamespace_1.ArkNamespace) {
|
|
1155
|
-
(_f = globalVariableMap.get(grandParent.getNamespaceSignature())) === null || _f === void 0 ? void 0 : _f.push(...exportLocal);
|
|
1156
|
-
p = parentMap.get(p);
|
|
1157
|
-
}
|
|
1158
|
-
else if (grandParent instanceof ArkFile_1.ArkFile) {
|
|
1159
|
-
(_g = globalVariableMap.get(grandParent.getFileSignature())) === null || _g === void 0 ? void 0 : _g.push(...exportLocal);
|
|
1160
|
-
break;
|
|
1161
|
-
}
|
|
1162
|
-
}
|
|
1163
|
-
if (parent instanceof ArkNamespace_1.ArkNamespace && !finalNamespaces.includes(parent)) {
|
|
1164
|
-
finalNamespaces.push(parent);
|
|
1165
|
-
}
|
|
1166
|
-
}
|
|
1233
|
+
this.addNSExportedLocals(finalNamespaces, globalVariableMap, parentMap);
|
|
1167
1234
|
}
|
|
1168
1235
|
for (const file of this.getFiles()) {
|
|
1169
1236
|
// 文件加上import的local,包括ns的
|
|
1170
|
-
|
|
1171
|
-
const importNameSpaces = [];
|
|
1172
|
-
for (const importInfo of file.getImportInfos()) {
|
|
1173
|
-
const importLocal = ModelUtils_1.ModelUtils.getLocalInImportInfoWithName(importInfo.getImportClauseName(), file);
|
|
1174
|
-
if (importLocal && !importLocals.includes(importLocal)) {
|
|
1175
|
-
importLocals.push(importLocal);
|
|
1176
|
-
}
|
|
1177
|
-
const importNameSpace = ModelUtils_1.ModelUtils.getNamespaceInImportInfoWithName(importInfo.getImportClauseName(), file);
|
|
1178
|
-
if (importNameSpace && !importNameSpaces.includes(importNameSpace)) {
|
|
1179
|
-
try {
|
|
1180
|
-
// 遗留问题:只统计了项目文件,没统计sdk文件内部的引入
|
|
1181
|
-
const importNameSpaceClasses = globalVariableMap.get(importNameSpace.getNamespaceSignature());
|
|
1182
|
-
importLocals.push(...importNameSpaceClasses.filter(c => !importLocals.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
|
|
1183
|
-
}
|
|
1184
|
-
catch (_h) {
|
|
1185
|
-
}
|
|
1186
|
-
}
|
|
1187
|
-
}
|
|
1188
|
-
const fileLocals = globalVariableMap.get(file.getFileSignature());
|
|
1189
|
-
fileLocals.push(...importLocals.filter(c => !fileLocals.includes(c)));
|
|
1190
|
-
// 子节点加上父节点的local
|
|
1191
|
-
const namespaceStack = [...file.getNamespaces()];
|
|
1192
|
-
for (const ns of namespaceStack) {
|
|
1193
|
-
const nsLocals = globalVariableMap.get(ns.getNamespaceSignature());
|
|
1194
|
-
const nsLocalNameSet = new Set(nsLocals.map(item => item.getName()));
|
|
1195
|
-
for (const local of fileLocals) {
|
|
1196
|
-
if (!nsLocalNameSet.has(local.getName())) {
|
|
1197
|
-
nsLocals.push(local);
|
|
1198
|
-
}
|
|
1199
|
-
}
|
|
1200
|
-
}
|
|
1201
|
-
while (namespaceStack.length > 0) {
|
|
1202
|
-
const ns = namespaceStack.shift();
|
|
1203
|
-
const nsLocals = globalVariableMap.get(ns.getNamespaceSignature());
|
|
1204
|
-
for (const nsns of ns.getNamespaces()) {
|
|
1205
|
-
const nsnsLocals = globalVariableMap.get(nsns.getNamespaceSignature());
|
|
1206
|
-
const nsnsLocalNameSet = new Set(nsnsLocals.map(item => item.getName()));
|
|
1207
|
-
for (const local of nsLocals) {
|
|
1208
|
-
if (!nsnsLocalNameSet.has(local.getName())) {
|
|
1209
|
-
nsnsLocals.push(local);
|
|
1210
|
-
}
|
|
1211
|
-
}
|
|
1212
|
-
namespaceStack.push(nsns);
|
|
1213
|
-
}
|
|
1214
|
-
}
|
|
1237
|
+
this.addFileImportLocals(file, globalVariableMap);
|
|
1215
1238
|
}
|
|
1216
1239
|
return globalVariableMap;
|
|
1217
1240
|
}
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"DVFGBuilder.d.ts","sourceRoot":"","sources":["../../../src/VFG/builder/DVFGBuilder.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAwE,IAAI,EAA6C,MAAM,sBAAsB,CAAC;AAM7J,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;IAyCxC,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,aAAa;IAcd,gBAAgB,CAAC,IAAI,EAAE,IAAI;IAI3B,YAAY,IAAI,IAAI;IAEpB,YAAY,IAAI,IAAI;CAC9B"}
|
|
@@ -27,7 +27,9 @@ class DVFGBuilder {
|
|
|
27
27
|
this.scene = s;
|
|
28
28
|
}
|
|
29
29
|
build() {
|
|
30
|
-
this.scene.getMethods().
|
|
30
|
+
this.scene.getMethods().forEach(m => { if (m.getCfg()) {
|
|
31
|
+
this.buildForSingleMethod(m);
|
|
32
|
+
} });
|
|
31
33
|
}
|
|
32
34
|
buildForSingleMethod(m) {
|
|
33
35
|
let problem = new ReachingDef_1.ReachingDefProblem(m);
|
|
@@ -47,6 +49,13 @@ class DVFGBuilder {
|
|
|
47
49
|
}
|
|
48
50
|
});
|
|
49
51
|
solution.in.forEach((defs, reach) => {
|
|
52
|
+
let addNewNodes = (defId, def, reach) => {
|
|
53
|
+
if (defs.test(defId)) {
|
|
54
|
+
let srcNode = this.dvfg.getOrNewDVFGNode(def);
|
|
55
|
+
let dstNode = this.dvfg.getOrNewDVFGNode(reach);
|
|
56
|
+
this.dvfg.addDVFGEdge(srcNode, dstNode);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
50
59
|
const reachStmt = problem.flowGraph.getNode(reach);
|
|
51
60
|
this.getStmtUsedValues(reachStmt).forEach(use => {
|
|
52
61
|
var _a;
|
|
@@ -56,11 +65,7 @@ class DVFGBuilder {
|
|
|
56
65
|
}
|
|
57
66
|
(_a = defMap.get(target)) === null || _a === void 0 ? void 0 : _a.forEach((defStmt) => {
|
|
58
67
|
let defId = problem.flowGraph.getNodeID(defStmt);
|
|
59
|
-
|
|
60
|
-
let srcNode = this.dvfg.getOrNewDVFGNode(defStmt);
|
|
61
|
-
let dstNode = this.dvfg.getOrNewDVFGNode(reachStmt);
|
|
62
|
-
this.dvfg.addDVFGEdge(srcNode, dstNode);
|
|
63
|
-
}
|
|
68
|
+
addNewNodes(defId, defStmt, reachStmt);
|
|
64
69
|
});
|
|
65
70
|
});
|
|
66
71
|
});
|
|
@@ -7,12 +7,13 @@ import { MethodSignature } from '../../core/model/ArkSignature';
|
|
|
7
7
|
import { NodeID } from '../../core/graph/BaseExplicitGraph';
|
|
8
8
|
import { CallGraph, FuncID, CallSite } from '../model/CallGraph';
|
|
9
9
|
import { CallGraphBuilder } from '../model/builder/CallGraphBuilder';
|
|
10
|
+
import { IPtsCollection } from '../pointerAnalysis/PtsDS';
|
|
10
11
|
export declare abstract class AbstractAnalysis {
|
|
11
12
|
protected scene: Scene;
|
|
12
13
|
protected cg: CallGraph;
|
|
13
14
|
protected cgBuilder: CallGraphBuilder;
|
|
14
15
|
protected workList: FuncID[];
|
|
15
|
-
protected processedMethod:
|
|
16
|
+
protected processedMethod: IPtsCollection<FuncID>;
|
|
16
17
|
constructor(s: Scene);
|
|
17
18
|
getScene(): Scene;
|
|
18
19
|
getCallGraph(): CallGraph;
|
|
@@ -21,6 +22,7 @@ export declare abstract class AbstractAnalysis {
|
|
|
21
22
|
resolveInvokeExpr(invokeExpr: AbstractInvokeExpr): ArkMethod | undefined;
|
|
22
23
|
getClassHierarchy(arkClass: ArkClass): ArkClass[];
|
|
23
24
|
start(displayGeneratedMethod: boolean): void;
|
|
25
|
+
private processCallSite;
|
|
24
26
|
protected init(): void;
|
|
25
27
|
protected processMethod(methodID: FuncID): CallSite[];
|
|
26
28
|
protected getParamAnonymousMethod(invokeExpr: AbstractInvokeExpr): MethodSignature[];
|
|
@@ -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;
|
|
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,EAAG,SAAS,CAAC;IACzB,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;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;IAqBnD,OAAO,CAAC,eAAe;IAgBvB,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"}
|
|
@@ -40,6 +40,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
40
40
|
exports.AbstractAnalysis = void 0;
|
|
41
41
|
const Type_1 = require("../../core/base/Type");
|
|
42
42
|
const logger_1 = __importStar(require("../../utils/logger"));
|
|
43
|
+
const PtsDS_1 = require("../pointerAnalysis/PtsDS");
|
|
43
44
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'CG');
|
|
44
45
|
class AbstractAnalysis {
|
|
45
46
|
constructor(s) {
|
|
@@ -76,7 +77,7 @@ class AbstractAnalysis {
|
|
|
76
77
|
while (this.workList.length !== 0) {
|
|
77
78
|
const method = this.workList.shift();
|
|
78
79
|
const cgNode = this.cg.getNode(method);
|
|
79
|
-
if (this.processedMethod.
|
|
80
|
+
if (this.processedMethod.contains(method) || cgNode.isSdkMethod()) {
|
|
80
81
|
continue;
|
|
81
82
|
}
|
|
82
83
|
// pre process for RTA only
|
|
@@ -84,19 +85,26 @@ class AbstractAnalysis {
|
|
|
84
85
|
this.workList.push(cs.calleeFuncID);
|
|
85
86
|
});
|
|
86
87
|
this.processMethod(method).forEach((cs) => {
|
|
87
|
-
|
|
88
|
-
let me = this.cg.getArkMethodByFuncID(cs.calleeFuncID);
|
|
89
|
-
this.addCallGraphEdge(method, me, cs, displayGeneratedMethod);
|
|
90
|
-
if (!this.processedMethod.has(cs.calleeFuncID)) {
|
|
91
|
-
this.workList.push(cs.calleeFuncID);
|
|
92
|
-
logger.info(`New workList item ${cs.calleeFuncID}: ${(_a = this.cg.getArkMethodByFuncID(cs.calleeFuncID)) === null || _a === void 0 ? void 0 : _a.getSignature().toString()}`);
|
|
93
|
-
this.processedMethod.add(cs.callerFuncID);
|
|
94
|
-
}
|
|
88
|
+
this.processCallSite(method, cs, displayGeneratedMethod);
|
|
95
89
|
});
|
|
96
90
|
}
|
|
97
91
|
}
|
|
92
|
+
processCallSite(method, cs, displayGeneratedMethod) {
|
|
93
|
+
var _a;
|
|
94
|
+
let me = this.cg.getArkMethodByFuncID(cs.calleeFuncID);
|
|
95
|
+
let meNode = this.cg.getNode(cs.calleeFuncID);
|
|
96
|
+
this.processedMethod.insert(cs.callerFuncID);
|
|
97
|
+
this.addCallGraphEdge(method, me, cs, displayGeneratedMethod);
|
|
98
|
+
if (this.processedMethod.contains(cs.calleeFuncID) || meNode.isSdkMethod()) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (displayGeneratedMethod || !(me === null || me === void 0 ? void 0 : me.isGenerated())) {
|
|
102
|
+
this.workList.push(cs.calleeFuncID);
|
|
103
|
+
logger.info(`New workList item ${cs.calleeFuncID}: ${(_a = this.cg.getArkMethodByFuncID(cs.calleeFuncID)) === null || _a === void 0 ? void 0 : _a.getSignature().toString()}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
98
106
|
init() {
|
|
99
|
-
this.processedMethod = new
|
|
107
|
+
this.processedMethod = new ((0, PtsDS_1.createPtsCollectionCtor)(PtsDS_1.PtsCollectionType.BitVector))();
|
|
100
108
|
this.cg.getEntries().forEach((entryFunc) => {
|
|
101
109
|
this.workList.push(entryFunc);
|
|
102
110
|
});
|
|
@@ -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;IAKhC,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;IAKhC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IA8DtE,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;CAKxG"}
|