<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">I haven’t used DFS yet, but I don’t think you need to write a pass.<div class=""><br class=""></div><div class="">You just need to include <sanitizer/dfsan_interface.h> and insert dfsan_* functions <b class="">in the source code you want to inspect</b>, following instructions in <a href="https://clang.llvm.org/docs/DataFlowSanitizer.html" class="">https://clang.llvm.org/docs/DataFlowSanitizer.html</a>  or Sam’s instructions in previous email of this thread.</div><div class=""><div><br class=""></div><div>Bekket<br class=""><blockquote type="cite" class=""><div class="">On Apr 18, 2019, at 7:00 AM, dareen khalid via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; font-family: Calibri, Helvetica, sans-serif; font-size: 12pt;" class=""><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);" class="">I'm new to llvm passes. I wonder if I can use the pass to dynamically analyze a program.<span class=""> </span><br class=""></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;" class=""></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);" class="">Let me explain what I want to do in the following example .<br class=""></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);" class=""><br class=""></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);" class=""><br class=""></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);" class=""><br class=""></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);" class="">//"Result" is an object that doesn't have a fixed length like int and float.<br class=""></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);" class=""><br class=""></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);" class="">//The program is as follows.<br class=""></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);" class="">Result retrieve_data_fun (){<br class=""></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);" class=""> //the function retrieves some sensitive data from  files/DB<br class=""></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);" class=""> <br class=""></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);" class=""> return result_info;<br class=""></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);" class="">}<span class=""> </span><br class=""></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);" class=""><br class=""></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);" class="">void main(){<br class=""></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);" class="">...<br class=""></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);" class="">Result var1, var2, var3l<br class=""></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);" class="">var1 = retrieve_data_fun();<br class=""></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);" class="">...<br class=""></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);" class="">Result var2 = retrieve_data_fun();<br class=""></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);" class=""><br class=""></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);" class="">printf (var1);<span class=""> </span><br class=""></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);" class="">var3 = var2+'xxx';<br class=""></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);" class="">print (var3);<br class=""></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);" class=""><br class=""></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);" class="">}<br class=""></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);" class=""><br class=""></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);" class="">My goal is to track all the returned data from "retrieve_data_fun" and monitor actions on them.<span class=""> </span><br class=""></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);" class="">So, whenever the data is used (e.g., printed) , I want to detect that; maybe by printing a statement or anything.<span class=""> </span><br class=""></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);" class="">Could you please help me to do that ?<span class=""> </span><br class=""></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);" class=""><br class=""></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);" class="">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);" class="">Daren</div><br class=""></div><div id="Signature" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><div class=""><div id="appendonsend" class=""></div><div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt;" class=""><br class=""></div><hr tabindex="-1" style="display: inline-block; width: 874.15625px;" class=""><div id="divRplyFwdMsg" dir="ltr" class=""><font face="Calibri, sans-serif" style="font-size: 11pt;" class=""><b class="">From:</b><span class="Apple-converted-space"> </span>llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" class="">llvm-dev-bounces@lists.llvm.org</a>> on behalf of Sam Kerner via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>><br class=""><b class="">Sent:</b><span class="Apple-converted-space"> </span>Wednesday, April 17, 2019 5:56 PM<br class=""><b class="">To:</b><span class="Apple-converted-space"> </span><a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br class=""><b class="">Subject:</b><span class="Apple-converted-space"> </span>Re: [llvm-dev] "compiler-rt" - DataFlowSanitizer</font><div class=""> </div></div><div class="BodyFragment"><font size="2" class=""><span style="font-size: 11pt;" class=""><div class="PlainText">On Tue, Apr 16, 2019 at 3:44 PM dareen khalid via llvm-dev<br class=""><<a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>> wrote:<br class="">><br class="">> Hi all,<br class="">><br class="">> I have some questions about "DataFlowSanitizer" from "compiler-rt".<br class="">> I want to know how I can test the "DataFlowSanitizer"?<br class=""><br class="">This document is a good reference for DataFlowSanitizer:<br class=""> <span class="Apple-converted-space"> </span><a href="https://clang.llvm.org/docs/DataFlowSanitizer.html" class="">https://clang.llvm.org/docs/DataFlowSanitizer.html</a><br class=""><br class="">> Can I configure it to label only some values,<br class=""><br class="">The section named "Example" in the document above shows a simple<br class="">program that sets and tests for labels.<br class=""><br class="">dfsan_create_label() creates a label.<br class=""><br class="">dfsan_set_label() applies a label to the memory holding a variable.<br class=""><br class="">> i.e, the return values from specific functions?<br class=""><br class="">To label the return value of a function, add a call to<br class="">dfsan_set_label() on the return value of the function:<br class=""><br class="">  // Outside the function:<br class="">  dfsan_label return_label = dfsan_create_label("return_label", 0);<br class=""><br class="">  // An example function:<br class="">  int MyFunction(int a, int b) {<br class="">    ...<br class="">    int result = ...;<br class=""><br class="">    // Set a label on the returned value:<br class="">    dfsan_set_label(return_label, &result, sizeof(result));<br class=""><br class="">    return result;<br class="">  }<br class=""><br class="">> Also, how can I print these labels?<br class=""><br class="">To discover the label on a variable, you can test for it and print the result:<br class=""><br class="">  int var = ...;<br class=""><br class="">  // Does 'var' have label 'return_label'?<br class="">  dfsan_label var_label = dfsan_get_label(var);<br class="">  if (dfsan_has_label(var_label, return_label)) {<br class="">    printf("'var' has the label ''return_label");<br class="">  }<br class=""><br class="">To see the state of all labels at the time the program exits set, set<br class="">the shell variable DFSAN_OPTIONS to "dump_labels_at_exit=<file path>".<br class="">For example, suppose the example program in the document is in a file<br class="">named "dfsan.c".  Here are the commands I ran to see the state of all<br class="">labels when it exits:<br class=""><br class="">  # Compile dfsan.c into a binary named "dfsan":<br class="">  $ clang -g -fsanitize=dataflow dfsan.c -o dfsan<br class=""><br class="">  # Run it.  There is no output because all assertions pass:<br class="">  $ ./dfsan<br class=""><br class="">  # Run it again with shell variable DFSAN_OPTIONS set to export label<br class="">state to standard out on exit:<br class="">  $ env DFSAN_OPTIONS=dump_labels_at_exit=/dev/stdout ./dfsan<br class="">  ==21994==INFO: DataFlowSanitizer: dumping labels to /dev/stdout<br class="">  1 0 0 i<br class="">  2 0 0 j<br class="">  3 0 0 k<br class="">  4 1 2<br class="">  5 3 4<br class=""><br class="">If you tell us more about what you are trying to accomplish with<br class="">DataFlowSanitizer, we may be able to give more specific advice.<br class=""><br class="">><br class="">> Thanks,<br class="">> Dareen<br class="">> _______________________________________________<br class="">> LLVM Developers mailing list<br class="">> <a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br class="">><span class="Apple-converted-space"> </span><a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br class="">_______________________________________________<br class="">LLVM Developers mailing list<br class=""><a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br class=""><a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br class=""></div></span></font></div></div></div><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">_______________________________________________</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">LLVM Developers mailing list</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="mailto:llvm-dev@lists.llvm.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">llvm-dev@lists.llvm.org</a><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a></div></blockquote></div><br class=""></div></body></html>