<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:DengXian;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
{font-family:"\@DengXian";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
{mso-style-name:msonormal;
mso-margin-top-alt:auto;
margin-right:0cm;
mso-margin-bottom-alt:auto;
margin-left:0cm;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
span.E-MailFormatvorlage18
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri",sans-serif;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="DE" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="font-size:12.0pt">Hi Jing,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:12.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:12.0pt">You can call getArgs() method from InvokeExpr to get the arguments passing the constructor.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:12.0pt;font-family:Consolas"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-family:Consolas;color:black"> Stmt
</span><b><i><span lang="EN-US" style="font-family:Consolas;color:#0000C0">stmt</span></i></b><span lang="EN-US" style="font-family:Consolas;color:black"> = (Stmt)
<u>unit</u>;</span><span lang="EN-US" style="font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-family:Consolas;color:black"> InvokeExpr invokeExpr = stmt.getInvokeExpr()<u>;</u></span><span lang="EN-US" style="font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-family:Consolas;color:black">
</span><b><span lang="EN-US" style="font-family:Consolas;color:#7F0055">if</span></b><span lang="EN-US" style="font-family:Consolas;color:black">(invokeExpr
</span><b><span lang="EN-US" style="font-family:Consolas;color:#7F0055">instanceof</span></b><span lang="EN-US" style="font-family:Consolas;color:black"> SpecialInvokeExpr</span><span lang="EN-US" style="font-family:Consolas;color:#548235">)//constructor is
a specialInvoke<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-family:Consolas;color:black"> {</span><span lang="EN-US" style="font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-family:Consolas;color:black">
</span><b><span lang="EN-US" style="font-family:Consolas;color:#7F0055">for</span></b><span lang="EN-US" style="font-family:Consolas;color:black"> (</span><b><span lang="EN-US" style="font-family:Consolas;color:#7F0055">int</span></b><span lang="EN-US" style="font-family:Consolas;color:black">
</span><span lang="EN-US" style="font-family:Consolas;color:#6A3E3E">i</span><span lang="EN-US" style="font-family:Consolas;color:black"> = 0;
</span><span lang="EN-US" style="font-family:Consolas;color:#6A3E3E">i</span><span lang="EN-US" style="font-family:Consolas;color:black"> <
</span><b><i><span lang="EN-US" style="font-family:Consolas;color:#0000C0">invokeExpr</span></i></b><span lang="EN-US" style="font-family:Consolas;color:black">.getArgCount();
</span><span lang="EN-US" style="font-family:Consolas;color:#6A3E3E">i</span><span lang="EN-US" style="font-family:Consolas;color:black">++) {</span><span lang="EN-US" style="font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-family:Consolas;color:black">
<u>Value</u> </span><span lang="EN-US" style="font-family:Consolas;color:#6A3E3E">arg</span><span lang="EN-US" style="font-family:Consolas;color:black">=</span><b><i><span lang="EN-US" style="font-family:Consolas;color:#0000C0">invokeExpr</span></i></b><span lang="EN-US" style="font-family:Consolas;color:black">.getArg(</span><span lang="EN-US" style="font-family:Consolas;color:#6A3E3E">i</span><span lang="EN-US" style="font-family:Consolas;color:black">);</span><span lang="EN-US" style="font-family:Consolas;color:#3F7F5F"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-family:Consolas;color:black">
</span><span lang="EN-US" style="font-family:Consolas;color:#548235">//Here you can find out which variable storing the file name is passed to the constructor, then you can do backward analysis to track the value of this variable or while forward analysis always
track the value of String variables.</span><span lang="EN-US" style="font-family:Consolas;color:red"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-family:Consolas;color:black"> }
</span><span lang="EN-US" style="font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:26.4pt;text-autospace:none"><span lang="EN-US" style="font-family:Consolas;color:black">}<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:12.0pt">To find out the value assigned to the variable filename you just need to look into the interface AssignStmt, you can get the left and right operand of the assignment
by calling get getLeftOp()/getRightOp().<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"> if(unit instanceof AssignStmt)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"> AssignStmt assignStmt=(AssignStmt)unit;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"> Value leftOp=assignStmt.getLeftOp();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"> ….<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:35.4pt;text-autospace:none"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US" style="font-size:12.0pt">Best,<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:12.0pt">Linghui Luo<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">_________________________________<o:p></o:p></p>
<p class="MsoNormal"><span style="color:black">M. Sc. Linghui Luo <b><o:p></o:p></b></span></p>
<p class="MsoNormal"><b><span style="color:black"><o:p> </o:p></span></b></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:black;background:white">Wissenschaftliche Mitarbeiterin/Research assistant<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:black;background:white">Fachgruppe Softwaretechnik</span><span style="font-size:10.0pt;color:black"><br>
<span style="background:white">Heinz Nixdorf Institut</span><br>
<span style="background:white">Universität Paderborn</span><br>
<span style="background:white">Fürstenallee 11</span><br>
<span style="background:white">33102 Paderborn<o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:black;background:white"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:black;background:white">E-Mail:
</span><span style="font-size:10.0pt;color:#0070C0;background:white"><a href="mailto:linghui.luo@uni-paderborn.de"><span style="color:blue">linghui.luo@uni-paderborn.de</span></a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:black;background:white">Telefon: +49 5251 606568<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:black;background:white">Raum: F1.119<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;color:black;background:white"><o:p> </o:p></span></p>
<p class="MsoNormal">_________________________________<o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><b>Von:</b> Soot-list <soot-list-bounces@CS.McGill.CA> <b>Im Auftrag von
</b>Jing Zhang<br>
<b>Gesendet:</b> Montag, 5. März 2018 05:04<br>
<b>An:</b> soot-list@cs.mcgill.ca<br>
<b>Betreff:</b> [Soot-list] how to get all path values of write/read operations<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Hi All,<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I want to get value of <b>filename </b>of write/read operations from code like:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">(1) String <b>filename </b>= "**/**/**/**.txt" <span style="font-size:10.5pt;font-family:Consolas;color:black;background:white">
;</span> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Consolas;color:black;background:white">BufferedWriter bfw = new BufferedWriter(new FileWriter(<b>filename</b>, true));</span><span style="background:white">
</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Consolas;color:black;background:white">(2)
<b>filename </b>= Environment.getExternalStorageDirectory().getCanonicalPath() + "/" + filename;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Consolas;color:black;background:white"> FileOutputStream output = new FileOutputStream(<b>filename</b>);<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Consolas;color:black;background:white">(3)
</span><span style="font-size:12.0pt;font-family:"Arial",sans-serif;color:#222222;background:white">String
<b>filename </b>= "123"+"**.txt" </span><span style="font-size:10.5pt;font-family:Consolas;color:black;background:white">;<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Consolas;color:black;background:white">outputStream = openFileOutput(<b>filename</b>, Context.MODE_APPEND);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Is there any helper methods inside Soot that can help me?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks a lot<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Jing<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:Consolas;color:black;background:white"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
</body>
</html>