<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p>Oleg</p>
    <p>I have written a simple test case that addresses your
      suggestions. My simple test program now calls __open() and the
      LD_PRELOAD'd shared object, libopen.so, exports __open(). The
      attached tar file creates a directory stdio. cd into it and <b><font
          face="Courier New, Courier, monospace">make clean all</font></b>.
      Then run <b>./stdio.csh</b>. You will see that the program's
      call to __open() is intercepted, as evidenced by the fprintf()
      from the preloaded __open(). But the open() call made by fopen()
      is still not reported by the preloaded function. I am thoroughly
      convinced fopen()'s call to open(), by whatever name it is using
      for open(), can not be intercepted. The most compelling evidence
      is the output from the run-time loader when LD_DEBUG=all is set.
      If I remove the call to __open() from the test program, the only
      function with open in its name that the run-time loader reports
      searching for is fopen(). The call that fopen() makes to open()
      is probably satisfied when libc is built.</p>
    <p>Per Andreas's suggestion, I have tried to build a debug version
      of glibc, but I think this is a bit outside my wheelhouse. It
      always turns into some type of struggle to get glibc to build
      correctly for the system I am on. I am seeking assistance on that
      front from admins on the system I am using. This URL is an
      interesting read,
      <a class="moz-txt-link-freetext" href="http://blog.hostilefork.com/where-printf-rubber-meets-road/">http://blog.hostilefork.com/where-printf-rubber-meets-road/</a> . It
      covers the write() call from fprintf(), but I assume open() would
      have the same issues. If I understand this correctly, the write()
      call from fprintf() boils down to a syscall at compile time. It
      doesn't even bother will calling write(). glibc skips the step of
      calling write() and goes straight to syscall() when calling
      write() from inside of glibc.<br>
    </p>
    <p>Thanks again.<br>
    </p>
    <p>John<br>
    </p>
    <br>
    <div class="moz-cite-prefix">On 6/23/2016 4:50 PM, Oleg Drokin
      wrote:<br>
    </div>
    <blockquote
      cite="mid:22ECFBA2-BD72-4751-8B92-E58D6FEAD9FF@intel.com"
      type="cite">
      <pre wrap="">#include &lt;unistd.h&gt;
<span class="moz-txt-citetags">&gt; </span>#include &lt;stdlib.h&gt;
<span class="moz-txt-citetags">&gt; </span>#include &lt;fcntl.h&gt;
<span class="moz-txt-citetags">&gt; </span>#include &lt;stdio.h&gt;
<span class="moz-txt-citetags">&gt; </span>
<span class="moz-txt-citetags">&gt; </span>int
<span class="moz-txt-citetags">&gt; </span>main(int argc, char ** argv ){
<span class="moz-txt-citetags">&gt; </span>   FILE *f = fopen("a", "r" ) ;
<span class="moz-txt-citetags">&gt; </span>   fprintf(stderr,"f=%p\n",f);
<span class="moz-txt-citetags">&gt; </span>   fclose(f);
<span class="moz-txt-citetags">&gt; </span>}</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
I/O Doctors, LLC
507-766-0378
<a class="moz-txt-link-abbreviated" href="mailto:bauerj@iodoctors.com">bauerj@iodoctors.com</a></pre>
  </body>
</html>