in reply to Interpose system call 'open' using LD_PRELOAD does not work for 'open' called from within perl programs. Why?

At some place, the perl executable has to enter in contact with the operating system and invoke its open (or fopen?) system call, so that is a place to wedge your code in.

I don't know how your interception mechanism works, but if it tries to hand the program a fake libc instead of intercepting the system calls, you will run afoul of static linking. Whether your version of the perl executable uses static linking is another matter - Perl can be built to use static linking for some parts and dynamic linking for others. It may also well be that Perl uses some other call to open a file instead of open, but I don't know the C library well enough to suggest which other ones to intercept.

If you stay within Perl, you can always override GLOBAL::open, from C or from Perl. If you want to install this universally, put it in a Perl module and preload that module via the PERL5OPTS environment variable.

  • Comment on Re: Interpose system call 'open' using LD_PRELOAD does not work for 'open' called from within perl programs. Why?
  • Select or Download Code