On Tue, Jun 30, 2009 at 12:30 PM, Roderich
Schupp<[email protected]> wrote:
> On Tue, Jun 30, 2009 at 9:09 AM, Thomas Maier<[email protected]> wrote:
>> On Mon, Jun 29, 2009 at 10:09 PM, Roderich
>> Schupp<[email protected]> wrote:
>>> And that's very strange. This is before any Perl stuff (even
>>> internally to the interpreter)
>>> has had any chance to run, but libresolv.so.2 is being looked up
>>> in /usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE.  Is
>>> LD_LIBRARY_PATH set in the
>> LD_LIBRARY_PATH is not set in this system. What it should be set to ?
>
> Shouldn't be relevant, I was just wondering why this directory is
> generally searched for shared libraries. In the meantime, I discovered
> that pp-packed executables have RPATH set - on my machine
>
> $ readelf -d hello.exe
> # a pp-packed executable
> File: hello.exe
>
> Dynamic section at offset 0x169028 contains 26 entries:
>  Tag        Type                         Name/Value
>  0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
>  0x0000000000000001 (NEEDED)             Shared library: [libdl.so.2]
>  0x0000000000000001 (NEEDED)             Shared library: [libcrypt.so.1]
>  0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
>  0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
>  0x000000000000000f (RPATH)              Library rpath:
> [/usr/lib/perl5/5.8.8/x86_64-linux-thread-multi/CORE]
>  0x000000000000001d (RUNPATH)            Library runpath:
> [/usr/lib/perl5/5.8.8/x86_64-linux-thread-multi/CORE]
>
> Hmm, got time for a little experiment?
>
> # binary patch your test executable "hello", replacing the offending
> path with garbage
> perl -e '$/=undef; my $r="/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE";
>   my $x="/foo/bar"; $x .= "\0" x (length($r) - length($x));
>   $_ = <>; my $n = s#\Q$r\E#$x#g; print;'  hello > hello2
>
> # check with readelf, that "hello2" is still a legal ELF executable,
> but RPATH etc has changed
> $ readelf -d hello2
> ...
>  0x000000000000000f (RPATH)              Library rpath: [/foo/bar]
>  0x000000000000001d (RUNPATH)            Library runpath: [/foo/bar]

Indeed, now I get:
 0x0000000f (RPATH)                      Library rpath: [/foo/bar]
>
> # make it executable
> $ chmod 755 hello2
>
> # clean out PAR's cache to exclude interference from you previously
> running "hello"
> $ rm -rf /tmp/par-*
>
> $ ./hello2
>
> Does it work?
Amazingly (or not - I have no clue), yes !

# ./hello2
hello, world

Reply via email to