svf-tools 1.0.729 → 1.0.731
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/package.json +1 -1
- package/svf/include/SVFIR/SVFValue.h +7 -0
- package/svf/include/Util/ExtAPI.h +209 -19
- package/svf/include/Util/ExtAPI.json +125 -22
- package/svf/lib/Util/ExtAPI.cpp +90 -18
- package/svf-llvm/include/SVF-LLVM/LLVMModule.h +1 -0
- package/svf-llvm/include/SVF-LLVM/LLVMUtil.h +23 -0
- package/svf-llvm/include/SVF-LLVM/SVFIRBuilder.h +10 -5
- package/svf-llvm/lib/CHGBuilder.cpp +2 -5
- package/svf-llvm/lib/DCHG.cpp +1 -2
- package/svf-llvm/lib/LLVMUtil.cpp +34 -11
- package/svf-llvm/lib/SVFIRBuilder.cpp +1 -423
- package/svf-llvm/lib/SVFIRExtAPI.cpp +681 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svf-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.731",
|
|
4
4
|
"description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -218,6 +218,10 @@ public:
|
|
|
218
218
|
{
|
|
219
219
|
return name;
|
|
220
220
|
}
|
|
221
|
+
inline virtual void setName(const std::string& valueName)
|
|
222
|
+
{
|
|
223
|
+
name = valueName;
|
|
224
|
+
}
|
|
221
225
|
|
|
222
226
|
inline virtual const SVFType* getType() const
|
|
223
227
|
{
|
|
@@ -266,6 +270,7 @@ class SVFFunction : public SVFValue
|
|
|
266
270
|
friend class LLVMModuleSet;
|
|
267
271
|
friend class SVFIRWriter;
|
|
268
272
|
friend class SVFIRReader;
|
|
273
|
+
friend class SVFIRBuilder;
|
|
269
274
|
|
|
270
275
|
public:
|
|
271
276
|
typedef std::vector<const SVFBasicBlock*>::const_iterator const_iterator;
|
|
@@ -482,6 +487,7 @@ class SVFBasicBlock : public SVFValue
|
|
|
482
487
|
friend class LLVMModuleSet;
|
|
483
488
|
friend class SVFIRWriter;
|
|
484
489
|
friend class SVFIRReader;
|
|
490
|
+
friend class SVFIRBuilder;
|
|
485
491
|
|
|
486
492
|
public:
|
|
487
493
|
typedef std::vector<const SVFInstruction*>::const_iterator const_iterator;
|
|
@@ -650,6 +656,7 @@ class SVFCallInst : public SVFInstruction
|
|
|
650
656
|
friend class SVFIRWriter;
|
|
651
657
|
friend class SVFIRReader;
|
|
652
658
|
friend class LLVMModuleSet;
|
|
659
|
+
friend class SVFIRBuilder;
|
|
653
660
|
|
|
654
661
|
private:
|
|
655
662
|
std::vector<const SVFValue*> args;
|
|
@@ -224,38 +224,227 @@ private:
|
|
|
224
224
|
|
|
225
225
|
public:
|
|
226
226
|
|
|
227
|
-
|
|
227
|
+
enum OperationType
|
|
228
228
|
{
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
229
|
+
Addr,
|
|
230
|
+
Copy,
|
|
231
|
+
Load,
|
|
232
|
+
Store,
|
|
233
|
+
Gep,
|
|
234
|
+
Call,
|
|
235
|
+
Return,
|
|
236
|
+
Rb_tree_ops,
|
|
237
|
+
Memcpy_like,
|
|
238
|
+
Memset_like,
|
|
239
|
+
Other
|
|
240
|
+
};
|
|
233
241
|
|
|
234
|
-
|
|
242
|
+
class Operand
|
|
243
|
+
{
|
|
244
|
+
public:
|
|
245
|
+
OperationType getType() const
|
|
235
246
|
{
|
|
236
|
-
return
|
|
247
|
+
return opType;
|
|
237
248
|
}
|
|
238
|
-
|
|
239
|
-
std::vector<std::string> getOperandStr()
|
|
249
|
+
void setType(OperationType type)
|
|
240
250
|
{
|
|
241
|
-
|
|
251
|
+
opType = type;
|
|
242
252
|
}
|
|
243
|
-
|
|
244
|
-
|
|
253
|
+
const std::string &getSrcValue() const
|
|
254
|
+
{
|
|
255
|
+
return src;
|
|
256
|
+
}
|
|
257
|
+
void setSrcValue(const std::string &value)
|
|
258
|
+
{
|
|
259
|
+
src = value;
|
|
260
|
+
}
|
|
261
|
+
const std::string &getDstValue() const
|
|
262
|
+
{
|
|
263
|
+
return dst;
|
|
264
|
+
}
|
|
265
|
+
void setDstValue(const std::string &value)
|
|
266
|
+
{
|
|
267
|
+
dst = value;
|
|
268
|
+
}
|
|
269
|
+
NodeID getSrcID() const
|
|
270
|
+
{
|
|
271
|
+
return srcID;
|
|
272
|
+
}
|
|
273
|
+
void setSrcID(NodeID id)
|
|
274
|
+
{
|
|
275
|
+
srcID = id;
|
|
276
|
+
}
|
|
277
|
+
NodeID getDstID() const
|
|
278
|
+
{
|
|
279
|
+
return dstID;
|
|
280
|
+
}
|
|
281
|
+
void setDstID(NodeID id)
|
|
282
|
+
{
|
|
283
|
+
dstID = id;
|
|
284
|
+
}
|
|
285
|
+
const std::string &getOffsetOrSizeStr() const
|
|
245
286
|
{
|
|
246
|
-
return
|
|
287
|
+
return offsetOrSizeStr;
|
|
247
288
|
}
|
|
289
|
+
void setOffsetOrSizeStr(const std::string &str)
|
|
290
|
+
{
|
|
291
|
+
offsetOrSizeStr = str;
|
|
292
|
+
}
|
|
293
|
+
u32_t getOffsetOrSize() const
|
|
294
|
+
{
|
|
295
|
+
return offsetOrSize;
|
|
296
|
+
}
|
|
297
|
+
void setOffsetOrSize(u32_t off)
|
|
298
|
+
{
|
|
299
|
+
offsetOrSize = off;
|
|
300
|
+
}
|
|
301
|
+
private:
|
|
302
|
+
OperationType opType; // 操作数类型
|
|
303
|
+
std::string src; // 操作数值
|
|
304
|
+
std::string dst; //
|
|
305
|
+
std::string offsetOrSizeStr; // Gep
|
|
306
|
+
NodeID srcID;
|
|
307
|
+
NodeID dstID;
|
|
308
|
+
u32_t offsetOrSize;
|
|
309
|
+
};
|
|
248
310
|
|
|
249
|
-
|
|
311
|
+
class ExtOperation
|
|
312
|
+
{
|
|
313
|
+
public:
|
|
314
|
+
bool isCallOp() const
|
|
315
|
+
{
|
|
316
|
+
return callOp;
|
|
317
|
+
}
|
|
318
|
+
void setCallOp(bool isCall)
|
|
319
|
+
{
|
|
320
|
+
callOp = isCall;
|
|
321
|
+
}
|
|
322
|
+
bool isConOp() const
|
|
323
|
+
{
|
|
324
|
+
return conOp;
|
|
325
|
+
}
|
|
326
|
+
void setConOp(bool isCon)
|
|
327
|
+
{
|
|
328
|
+
conOp = isCon;
|
|
329
|
+
}
|
|
330
|
+
Operand& getBasicOp()
|
|
331
|
+
{
|
|
332
|
+
return basicOp;
|
|
333
|
+
}
|
|
334
|
+
void setBasicOp(Operand op)
|
|
335
|
+
{
|
|
336
|
+
basicOp = op;
|
|
337
|
+
}
|
|
338
|
+
const std::string &getCondition() const
|
|
339
|
+
{
|
|
340
|
+
return condition;
|
|
341
|
+
}
|
|
342
|
+
void setCondition(const std::string &cond)
|
|
343
|
+
{
|
|
344
|
+
condition = cond;
|
|
345
|
+
}
|
|
346
|
+
std::vector<Operand>& getTrueBranchOperands()
|
|
347
|
+
{
|
|
348
|
+
return trueBranch_operands;
|
|
349
|
+
}
|
|
350
|
+
void setTrueBranchOperands(std::vector<Operand> tbo)
|
|
351
|
+
{
|
|
352
|
+
trueBranch_operands = tbo;
|
|
353
|
+
}
|
|
354
|
+
std::vector<Operand>& getFalseBranchOperands()
|
|
355
|
+
{
|
|
356
|
+
return falseBranch_operands;
|
|
357
|
+
}
|
|
358
|
+
void setFalseBranchOperands(std::vector<Operand> fbo)
|
|
359
|
+
{
|
|
360
|
+
falseBranch_operands = fbo;
|
|
361
|
+
}
|
|
362
|
+
const std::string &getCalleeName() const
|
|
363
|
+
{
|
|
364
|
+
return callee_name;
|
|
365
|
+
}
|
|
366
|
+
void setCalleeName(const std::string &name)
|
|
367
|
+
{
|
|
368
|
+
callee_name = name;
|
|
369
|
+
}
|
|
370
|
+
const std::string &getCalleeReturn() const
|
|
371
|
+
{
|
|
372
|
+
return callee_return;
|
|
373
|
+
}
|
|
374
|
+
void setCalleeReturn(const std::string &ret)
|
|
375
|
+
{
|
|
376
|
+
callee_return = ret;
|
|
377
|
+
}
|
|
378
|
+
const std::string &getCalleeArguments() const
|
|
379
|
+
{
|
|
380
|
+
return callee_arguments;
|
|
381
|
+
}
|
|
382
|
+
void setCalleeArguments(const std::string &args)
|
|
383
|
+
{
|
|
384
|
+
callee_arguments = args;
|
|
385
|
+
}
|
|
386
|
+
std::vector<Operand>& getCalleeOperands()
|
|
250
387
|
{
|
|
251
|
-
|
|
388
|
+
return callee_operands;
|
|
252
389
|
}
|
|
390
|
+
void setCalleeOperands(std::vector<Operand> ops)
|
|
391
|
+
{
|
|
392
|
+
callee_operands = ops;
|
|
393
|
+
}
|
|
394
|
+
private:
|
|
395
|
+
bool callOp = false;
|
|
396
|
+
bool conOp = false;
|
|
397
|
+
Operand basicOp;
|
|
398
|
+
std::string condition;
|
|
399
|
+
std::vector<Operand> trueBranch_operands;
|
|
400
|
+
std::vector<Operand> falseBranch_operands;
|
|
401
|
+
std::string callee_name;
|
|
402
|
+
std::string callee_return;
|
|
403
|
+
std::string callee_arguments;
|
|
404
|
+
std::vector<Operand> callee_operands;
|
|
405
|
+
};
|
|
253
406
|
|
|
407
|
+
class ExtFunctionOps
|
|
408
|
+
{
|
|
409
|
+
public:
|
|
410
|
+
ExtFunctionOps() {};
|
|
411
|
+
ExtFunctionOps(const std::string &name, std::vector<ExtOperation> ops) : extFunName(name), extOperations(ops) {};
|
|
412
|
+
const std::string &getExtFunName() const
|
|
413
|
+
{
|
|
414
|
+
return extFunName;
|
|
415
|
+
}
|
|
416
|
+
void setExtFunName(const std::string &name)
|
|
417
|
+
{
|
|
418
|
+
extFunName = name;
|
|
419
|
+
}
|
|
420
|
+
std::vector<ExtOperation>& getOperations()
|
|
421
|
+
{
|
|
422
|
+
return extOperations;
|
|
423
|
+
}
|
|
424
|
+
void setOperations(std::vector<ExtOperation> ops)
|
|
425
|
+
{
|
|
426
|
+
extOperations = ops;
|
|
427
|
+
}
|
|
428
|
+
u32_t getCallStmtNum()
|
|
429
|
+
{
|
|
430
|
+
return callStmtNum;
|
|
431
|
+
}
|
|
432
|
+
void setCallStmtNum(u32_t num)
|
|
433
|
+
{
|
|
434
|
+
callStmtNum = num;
|
|
435
|
+
}
|
|
254
436
|
private:
|
|
255
|
-
std::string
|
|
256
|
-
std::vector<
|
|
257
|
-
|
|
437
|
+
std::string extFunName;
|
|
438
|
+
std::vector<ExtOperation> extOperations;
|
|
439
|
+
u32_t callStmtNum = 0;
|
|
258
440
|
};
|
|
441
|
+
|
|
442
|
+
private:
|
|
443
|
+
// Map an external function to its operations
|
|
444
|
+
std::map<std::string, ExtFunctionOps> extFunToOps;
|
|
445
|
+
|
|
446
|
+
public:
|
|
447
|
+
|
|
259
448
|
static ExtAPI *getExtAPI(const std::string& = "");
|
|
260
449
|
|
|
261
450
|
static void destory();
|
|
@@ -291,7 +480,8 @@ public:
|
|
|
291
480
|
cJSON *get_FunJson(const std::string &funName);
|
|
292
481
|
|
|
293
482
|
// Get all operations of an extern function
|
|
294
|
-
|
|
483
|
+
Operand getBasicOperation(cJSON* obj);
|
|
484
|
+
ExtFunctionOps getExtFunctionOps(std::string funName);
|
|
295
485
|
|
|
296
486
|
// Get property of the operation, e.g. "EFT_A1R_A0R"
|
|
297
487
|
extType get_type(const SVF::SVFFunction *callee);
|
|
@@ -4990,35 +4990,55 @@
|
|
|
4990
4990
|
"arguments": "(i8*, i8, i32, i32, i1)",
|
|
4991
4991
|
"type": "EFT_L_A0__A0R_A1",
|
|
4992
4992
|
"overwrite_app_function": 0,
|
|
4993
|
-
"memset_like":
|
|
4993
|
+
"memset_like": {
|
|
4994
|
+
"src": "Arg0",
|
|
4995
|
+
"dst": "Arg1",
|
|
4996
|
+
"size": "Arg2"
|
|
4997
|
+
}
|
|
4994
4998
|
},
|
|
4995
4999
|
"llvm.memset.p0i8.i32": {
|
|
4996
5000
|
"return": "void",
|
|
4997
5001
|
"arguments": "(i8*, i8, i32, i32, i1)",
|
|
4998
5002
|
"type": "EFT_L_A0__A0R_A1",
|
|
4999
5003
|
"overwrite_app_function": 0,
|
|
5000
|
-
"memset_like":
|
|
5004
|
+
"memset_like": {
|
|
5005
|
+
"src": "Arg0",
|
|
5006
|
+
"dst": "Arg1",
|
|
5007
|
+
"size": "Arg2"
|
|
5008
|
+
}
|
|
5001
5009
|
},
|
|
5002
5010
|
"llvm.memset.p0i8.i64": {
|
|
5003
5011
|
"return": "void",
|
|
5004
5012
|
"arguments": "(i8*, i8, i64, i32, i1)",
|
|
5005
5013
|
"type": "EFT_L_A0__A0R_A1",
|
|
5006
5014
|
"overwrite_app_function": 0,
|
|
5007
|
-
"memset_like":
|
|
5015
|
+
"memset_like": {
|
|
5016
|
+
"src": "Arg0",
|
|
5017
|
+
"dst": "Arg1",
|
|
5018
|
+
"size": "Arg2"
|
|
5019
|
+
}
|
|
5008
5020
|
},
|
|
5009
5021
|
"__memset_chk": {
|
|
5010
5022
|
"return": "void *",
|
|
5011
5023
|
"arguments": "(void *, int, size_t, size_t)",
|
|
5012
5024
|
"type": "EFT_L_A0__A0R_A1",
|
|
5013
5025
|
"overwrite_app_function": 0,
|
|
5014
|
-
"memset_like":
|
|
5026
|
+
"memset_like": {
|
|
5027
|
+
"src": "Arg0",
|
|
5028
|
+
"dst": "Arg1",
|
|
5029
|
+
"size": "Arg2"
|
|
5030
|
+
}
|
|
5015
5031
|
},
|
|
5016
5032
|
"llvm.memcpy": {
|
|
5017
5033
|
"return": "void",
|
|
5018
5034
|
"arguments": "(i8*, i8*, i32, i32, i1)",
|
|
5019
5035
|
"type": "EFT_L_A0__A0R_A1R",
|
|
5020
5036
|
"overwrite_app_function": 0,
|
|
5021
|
-
"memcpy_like":
|
|
5037
|
+
"memcpy_like": {
|
|
5038
|
+
"src": "Arg0",
|
|
5039
|
+
"dst": "Arg1",
|
|
5040
|
+
"size": "Arg2"
|
|
5041
|
+
},
|
|
5022
5042
|
"CopyStmt": {
|
|
5023
5043
|
"src": "Arg0",
|
|
5024
5044
|
"dst": "Ret"
|
|
@@ -5029,7 +5049,11 @@
|
|
|
5029
5049
|
"arguments": "(i8*, i8*, i32, i32, i1)",
|
|
5030
5050
|
"type": "EFT_L_A0__A0R_A1R",
|
|
5031
5051
|
"overwrite_app_function": 0,
|
|
5032
|
-
"memcpy_like":
|
|
5052
|
+
"memcpy_like": {
|
|
5053
|
+
"src": "Arg0",
|
|
5054
|
+
"dst": "Arg1",
|
|
5055
|
+
"size": "Arg2"
|
|
5056
|
+
},
|
|
5033
5057
|
"CopyStmt": {
|
|
5034
5058
|
"src": "Arg0",
|
|
5035
5059
|
"dst": "Ret"
|
|
@@ -5040,7 +5064,11 @@
|
|
|
5040
5064
|
"arguments": "(i8*, *i8, i64, i32, i1)",
|
|
5041
5065
|
"type": "EFT_L_A0__A0R_A1R",
|
|
5042
5066
|
"overwrite_app_function": 0,
|
|
5043
|
-
"memcpy_like":
|
|
5067
|
+
"memcpy_like": {
|
|
5068
|
+
"src": "Arg0",
|
|
5069
|
+
"dst": "Arg1",
|
|
5070
|
+
"size": "Arg2"
|
|
5071
|
+
},
|
|
5044
5072
|
"CopyStmt": {
|
|
5045
5073
|
"src": "Arg0",
|
|
5046
5074
|
"dst": "Ret"
|
|
@@ -5051,7 +5079,11 @@
|
|
|
5051
5079
|
"arguments": "(i8*, i8*, i32, i1)",
|
|
5052
5080
|
"type": "EFT_L_A0__A0R_A1R",
|
|
5053
5081
|
"overwrite_app_function": 0,
|
|
5054
|
-
"memcpy_like":
|
|
5082
|
+
"memcpy_like": {
|
|
5083
|
+
"src": "Arg0",
|
|
5084
|
+
"dst": "Arg1",
|
|
5085
|
+
"size": "Arg2"
|
|
5086
|
+
},
|
|
5055
5087
|
"CopyStmt": {
|
|
5056
5088
|
"src": "Arg0",
|
|
5057
5089
|
"dst": "Ret"
|
|
@@ -5062,7 +5094,11 @@
|
|
|
5062
5094
|
"arguments": "(i8*, i8*, i32, i1)",
|
|
5063
5095
|
"type": "EFT_L_A0__A0R_A1R",
|
|
5064
5096
|
"overwrite_app_function": 0,
|
|
5065
|
-
"memcpy_like":
|
|
5097
|
+
"memcpy_like": {
|
|
5098
|
+
"src": "Arg0",
|
|
5099
|
+
"dst": "Arg1",
|
|
5100
|
+
"size": "Arg2"
|
|
5101
|
+
},
|
|
5066
5102
|
"CopyStmt": {
|
|
5067
5103
|
"src": "Arg0",
|
|
5068
5104
|
"dst": "Ret"
|
|
@@ -5073,7 +5109,11 @@
|
|
|
5073
5109
|
"arguments": "(i8*, i8*, i64, i1)",
|
|
5074
5110
|
"type": "EFT_L_A0__A0R_A1R",
|
|
5075
5111
|
"overwrite_app_function": 0,
|
|
5076
|
-
"memcpy_like":
|
|
5112
|
+
"memcpy_like": {
|
|
5113
|
+
"src": "Arg0",
|
|
5114
|
+
"dst": "Arg1",
|
|
5115
|
+
"size": "Arg2"
|
|
5116
|
+
},
|
|
5077
5117
|
"CopyStmt": {
|
|
5078
5118
|
"src": "Arg0",
|
|
5079
5119
|
"dst": "Ret"
|
|
@@ -5084,7 +5124,11 @@
|
|
|
5084
5124
|
"arguments": "(void *restrict, const void *restrict, int, size_t)",
|
|
5085
5125
|
"type": "EFT_L_A0__A0R_A1R",
|
|
5086
5126
|
"overwrite_app_function": 0,
|
|
5087
|
-
"memcpy_like":
|
|
5127
|
+
"memcpy_like": {
|
|
5128
|
+
"src": "Arg0",
|
|
5129
|
+
"dst": "Arg1",
|
|
5130
|
+
"size": "Arg2"
|
|
5131
|
+
},
|
|
5088
5132
|
"CopyStmt": {
|
|
5089
5133
|
"src": "Arg0",
|
|
5090
5134
|
"dst": "Ret"
|
|
@@ -5095,7 +5139,11 @@
|
|
|
5095
5139
|
"arguments": "(void *, const void *, size_t)",
|
|
5096
5140
|
"type": "EFT_L_A0__A0R_A1R",
|
|
5097
5141
|
"overwrite_app_function": 0,
|
|
5098
|
-
"memcpy_like":
|
|
5142
|
+
"memcpy_like": {
|
|
5143
|
+
"src": "Arg0",
|
|
5144
|
+
"dst": "Arg1",
|
|
5145
|
+
"size": "Arg2"
|
|
5146
|
+
},
|
|
5099
5147
|
"CopyStmt": {
|
|
5100
5148
|
"src": "Arg0",
|
|
5101
5149
|
"dst": "Ret"
|
|
@@ -5106,7 +5154,11 @@
|
|
|
5106
5154
|
"arguments": "(void *, const void *, size_t)",
|
|
5107
5155
|
"type": "EFT_L_A0__A0R_A1R",
|
|
5108
5156
|
"overwrite_app_function": 0,
|
|
5109
|
-
"memcpy_like":
|
|
5157
|
+
"memcpy_like": {
|
|
5158
|
+
"src": "Arg0",
|
|
5159
|
+
"dst": "Arg1",
|
|
5160
|
+
"size": "Arg2"
|
|
5161
|
+
},
|
|
5110
5162
|
"CopyStmt": {
|
|
5111
5163
|
"src": "Arg0",
|
|
5112
5164
|
"dst": "Ret"
|
|
@@ -5117,14 +5169,21 @@
|
|
|
5117
5169
|
"arguments": "(const void *, void *, size_t)",
|
|
5118
5170
|
"type": "EFT_A1R_A0R",
|
|
5119
5171
|
"overwrite_app_function": 0,
|
|
5120
|
-
"memcpy_like":
|
|
5172
|
+
"memcpy_like": {
|
|
5173
|
+
"src": "Arg1",
|
|
5174
|
+
"dst": "Arg0",
|
|
5175
|
+
"size": "Arg2"
|
|
5176
|
+
}
|
|
5121
5177
|
},
|
|
5122
5178
|
"iconv": {
|
|
5123
5179
|
"return": "size_t",
|
|
5124
5180
|
"arguments": "(iconv_t, char **restrict, size_t *restrict, char **restrict, size_t *restrict)",
|
|
5125
5181
|
"type": "EFT_A3R_A1R_NS",
|
|
5126
5182
|
"overwrite_app_function": 0,
|
|
5127
|
-
"memcpy_like":
|
|
5183
|
+
"memcpy_like": {
|
|
5184
|
+
"src": "Arg3",
|
|
5185
|
+
"dst": "Arg1"
|
|
5186
|
+
}
|
|
5128
5187
|
},
|
|
5129
5188
|
"strtod": {
|
|
5130
5189
|
"return": "double",
|
|
@@ -5201,7 +5260,11 @@
|
|
|
5201
5260
|
"arguments": "(char *, const char *, size_t)",
|
|
5202
5261
|
"type": "EFT_L_A0__A1_A0",
|
|
5203
5262
|
"overwrite_app_function": 0,
|
|
5204
|
-
"memcpy_like":
|
|
5263
|
+
"memcpy_like": {
|
|
5264
|
+
"src": "Arg0",
|
|
5265
|
+
"dst": "Arg1",
|
|
5266
|
+
"size": "Arg2"
|
|
5267
|
+
},
|
|
5205
5268
|
"CopyStmt": {
|
|
5206
5269
|
"src": "Arg0",
|
|
5207
5270
|
"dst": "Ret"
|
|
@@ -5212,7 +5275,11 @@
|
|
|
5212
5275
|
"arguments": "(char *, const char *, size_t)",
|
|
5213
5276
|
"type": "EFT_L_A0__A1_A0",
|
|
5214
5277
|
"overwrite_app_function": 0,
|
|
5215
|
-
"memcpy_like":
|
|
5278
|
+
"memcpy_like": {
|
|
5279
|
+
"src": "Arg0",
|
|
5280
|
+
"dst": "Arg1",
|
|
5281
|
+
"size": "Arg2"
|
|
5282
|
+
},
|
|
5216
5283
|
"CopyStmt": {
|
|
5217
5284
|
"src": "Arg0",
|
|
5218
5285
|
"dst": "Ret"
|
|
@@ -5223,7 +5290,10 @@
|
|
|
5223
5290
|
"arguments": "(char *restrict, const char *restrict)",
|
|
5224
5291
|
"type": "EFT_L_A0__A1_A0",
|
|
5225
5292
|
"overwrite_app_function": 0,
|
|
5226
|
-
"memcpy_like":
|
|
5293
|
+
"memcpy_like": {
|
|
5294
|
+
"src": "Arg0",
|
|
5295
|
+
"dst": "Arg1"
|
|
5296
|
+
},
|
|
5227
5297
|
"CopyStmt": {
|
|
5228
5298
|
"src": "Arg0",
|
|
5229
5299
|
"dst": "Ret"
|
|
@@ -5234,7 +5304,10 @@
|
|
|
5234
5304
|
"arguments": "(char *, char *)",
|
|
5235
5305
|
"type": "EFT_L_A0__A1_A0",
|
|
5236
5306
|
"overwrite_app_function": 0,
|
|
5237
|
-
"memcpy_like":
|
|
5307
|
+
"memcpy_like": {
|
|
5308
|
+
"src": "Arg0",
|
|
5309
|
+
"dst": "Arg1"
|
|
5310
|
+
},
|
|
5238
5311
|
"CopyStmt": {
|
|
5239
5312
|
"src": "Arg0",
|
|
5240
5313
|
"dst": "Ret"
|
|
@@ -5245,7 +5318,10 @@
|
|
|
5245
5318
|
"arguments": "(char *, const char *)",
|
|
5246
5319
|
"type": "EFT_L_A0__A1_A0",
|
|
5247
5320
|
"overwrite_app_function": 0,
|
|
5248
|
-
"memcpy_like":
|
|
5321
|
+
"memcpy_like": {
|
|
5322
|
+
"src": "Arg0",
|
|
5323
|
+
"dst": "Arg1"
|
|
5324
|
+
},
|
|
5249
5325
|
"CopyStmt": {
|
|
5250
5326
|
"src": "Arg0",
|
|
5251
5327
|
"dst": "Ret"
|
|
@@ -5256,7 +5332,11 @@
|
|
|
5256
5332
|
"arguments": "(char *, const char *, size_t)",
|
|
5257
5333
|
"type": "EFT_L_A0__A1_A0",
|
|
5258
5334
|
"overwrite_app_function": 0,
|
|
5259
|
-
"memcpy_like":
|
|
5335
|
+
"memcpy_like": {
|
|
5336
|
+
"src": "Arg0",
|
|
5337
|
+
"dst": "Arg1",
|
|
5338
|
+
"size": "Arg2"
|
|
5339
|
+
},
|
|
5260
5340
|
"CopyStmt": {
|
|
5261
5341
|
"src": "Arg0",
|
|
5262
5342
|
"dst": "Ret"
|
|
@@ -5267,7 +5347,11 @@
|
|
|
5267
5347
|
"arguments": "(char *, const char *, size_t)",
|
|
5268
5348
|
"type": "EFT_L_A0__A1_A0",
|
|
5269
5349
|
"overwrite_app_function": 0,
|
|
5270
|
-
"memcpy_like":
|
|
5350
|
+
"memcpy_like": {
|
|
5351
|
+
"src": "Arg0",
|
|
5352
|
+
"dst": "Arg1",
|
|
5353
|
+
"size": "Arg2"
|
|
5354
|
+
},
|
|
5271
5355
|
"CopyStmt": {
|
|
5272
5356
|
"src": "Arg0",
|
|
5273
5357
|
"dst": "Ret"
|
|
@@ -5726,5 +5810,24 @@
|
|
|
5726
5810
|
"src": "NullPtr",
|
|
5727
5811
|
"dst": "Dummy"
|
|
5728
5812
|
}
|
|
5813
|
+
},
|
|
5814
|
+
"swapExtCallStmt":{
|
|
5815
|
+
"return": "void",
|
|
5816
|
+
"arguments": "(char **, char **)",
|
|
5817
|
+
"type": "EFT_NOOP",
|
|
5818
|
+
"overwrite_app_function": 0,
|
|
5819
|
+
"CallStmt": {
|
|
5820
|
+
"callee_name": "swap",
|
|
5821
|
+
"callee_return": "void",
|
|
5822
|
+
"callee_arguments": "(char **, char **)",
|
|
5823
|
+
"CopyStmt1": {
|
|
5824
|
+
"src": "swapExtCallStmt_Arg0",
|
|
5825
|
+
"dst": "swap_Arg0"
|
|
5826
|
+
},
|
|
5827
|
+
"CopyStmt2": {
|
|
5828
|
+
"src": "swapExtCallStmt_Arg1",
|
|
5829
|
+
"dst": "swap_Arg1"
|
|
5830
|
+
}
|
|
5831
|
+
}
|
|
5729
5832
|
}
|
|
5730
5833
|
}
|