<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">I'm new to llvm passes.
 I wonder if I can use the pass to dynamically analyze a program.<span> </span><br>
</span><span style="color: rgb(33, 33, 33); font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; font-size: 15px; background-color: rgb(255, 255, 255); display: inline !important"></span>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
Let me explain what I want to do in the following example .<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
//"Result" is an object that doesn't have a fixed length like int and float.<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
//The program is as follows.<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
Result retrieve_data_fun (){<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
 //the function retrieves some sensitive data from  files/DB<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
 <br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
 return result_info;<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
}<span> </span><br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
void main(){<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
...<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
Result var1, var2, var3l<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
var1 = retrieve_data_fun();<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
...<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
Result var2 = retrieve_data_fun();<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
printf (var1);<span> </span><br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
var3 = var2+'xxx';<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
print (var3);<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
}<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
My goal is to track all the returned data from "retrieve_data_fun" and monitor actions on them.<span> </span><br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
So, whenever the data is used (e.g., printed) , I want to detect that; maybe by printing a statement or anything.<span> </span><br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
Could you please help me to do that ?<span> </span><br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
<br>
</div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
Thanks, </div>
<div style="margin: 0px; font-size: 15px; font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, system-ui, Roboto, "Helvetica Neue", sans-serif; color: rgb(33, 33, 33); background-color: rgb(255, 255, 255)">
Daren</div>
<br>
</div>
<div id="Signature">
<div>
<div id="appendonsend"></div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> llvm-dev <llvm-dev-bounces@lists.llvm.org> on behalf of Sam Kerner via llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Sent:</b> Wednesday, April 17, 2019 5:56 PM<br>
<b>To:</b> llvm-dev@lists.llvm.org<br>
<b>Subject:</b> Re: [llvm-dev] "compiler-rt" - DataFlowSanitizer</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="PlainText">On Tue, Apr 16, 2019 at 3:44 PM dareen khalid via llvm-dev<br>
<llvm-dev@lists.llvm.org> wrote:<br>
><br>
> Hi all,<br>
><br>
> I have some questions about "DataFlowSanitizer" from "compiler-rt".<br>
> I want to know how I can test the "DataFlowSanitizer"?<br>
<br>
This document is a good reference for DataFlowSanitizer:<br>
  <a href="https://clang.llvm.org/docs/DataFlowSanitizer.html">https://clang.llvm.org/docs/DataFlowSanitizer.html</a><br>
<br>
> Can I configure it to label only some values,<br>
<br>
The section named "Example" in the document above shows a simple<br>
program that sets and tests for labels.<br>
<br>
dfsan_create_label() creates a label.<br>
<br>
dfsan_set_label() applies a label to the memory holding a variable.<br>
<br>
> i.e, the return values from specific functions?<br>
<br>
To label the return value of a function, add a call to<br>
dfsan_set_label() on the return value of the function:<br>
<br>
  // Outside the function:<br>
  dfsan_label return_label = dfsan_create_label("return_label", 0);<br>
<br>
  // An example function:<br>
  int MyFunction(int a, int b) {<br>
    ...<br>
    int result = ...;<br>
<br>
    // Set a label on the returned value:<br>
    dfsan_set_label(return_label, &result, sizeof(result));<br>
<br>
    return result;<br>
  }<br>
<br>
> Also, how can I print these labels?<br>
<br>
To discover the label on a variable, you can test for it and print the result:<br>
<br>
  int var = ...;<br>
<br>
  // Does 'var' have label 'return_label'?<br>
  dfsan_label var_label = dfsan_get_label(var);<br>
  if (dfsan_has_label(var_label, return_label)) {<br>
    printf("'var' has the label ''return_label");<br>
  }<br>
<br>
To see the state of all labels at the time the program exits set, set<br>
the shell variable DFSAN_OPTIONS to "dump_labels_at_exit=<file path>".<br>
For example, suppose the example program in the document is in a file<br>
named "dfsan.c".  Here are the commands I ran to see the state of all<br>
labels when it exits:<br>
<br>
  # Compile dfsan.c into a binary named "dfsan":<br>
  $ clang -g -fsanitize=dataflow dfsan.c -o dfsan<br>
<br>
  # Run it.  There is no output because all assertions pass:<br>
  $ ./dfsan<br>
<br>
  # Run it again with shell variable DFSAN_OPTIONS set to export label<br>
state to standard out on exit:<br>
  $ env DFSAN_OPTIONS=dump_labels_at_exit=/dev/stdout ./dfsan<br>
  ==21994==INFO: DataFlowSanitizer: dumping labels to /dev/stdout<br>
  1 0 0 i<br>
  2 0 0 j<br>
  3 0 0 k<br>
  4 1 2<br>
  5 3 4<br>
<br>
If you tell us more about what you are trying to accomplish with<br>
DataFlowSanitizer, we may be able to give more specific advice.<br>
<br>
><br>
> Thanks,<br>
> Dareen<br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> llvm-dev@lists.llvm.org<br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
_______________________________________________<br>
LLVM Developers mailing list<br>
llvm-dev@lists.llvm.org<br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</div>
</span></font></div>
</div>
</div>
</body>
</html>