gcl-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gcl-devel] Re: function addresses and ld.so


From: Zack Weinberg
Subject: [Gcl-devel] Re: function addresses and ld.so
Date: Wed, 13 Aug 2003 17:11:24 -0700
User-agent: Gnus/5.1002 (Gnus v5.10.2) Emacs/21.3 (gnu/linux)

Richard Henderson <address@hidden> writes:

> On Wed, Aug 13, 2003 at 04:35:36PM -0700, David Mosberger wrote:
>> Wouldn't, e.g., LD_PRELOADing something break this assumption?
>
> Yes.  Or, indeed, just recompiling the library could result
> in different PLT offsets within the DSO, even on x86.
>
> This behaviour is completely broken.  It'll never work reliably.

A tactic that _will_ work is to mimic ld.so's PLT stubs.  I'll use
sqrt() as an example:

extern double sqrt(double);
static double stub_sqrt(double);

// this is the value that gets written to the unexec file
double (*ptr_sqrt)(double) = stub_sqrt;

double stub_sqrt(double x)
{
  ptr_sqrt = sqrt;
  return ptr_sqrt(x);
}

Generate one of these stubs for every function you care about, and
bob's your uncle.  Just make sure that none of the stubs get called
before the unexec file is written out.

Unfortunately this won't work for variadic functions.

There is no portable way that I know of to make the stub _be_ the PLT
stub, which is kind of a shame, as it would be (marginally) more
efficient and would work for variadics.

zw




reply via email to

[Prev in Thread] Current Thread [Next in Thread]