Fragile ABI

Michel Fortin michel.fortin at michelf.ca
Sat Aug 18 05:52:43 PDT 2012


On 2012-08-18 10:20:17 +0000, "Jacob Carlborg" <doob at me.com> said:

> On Saturday, 18 August 2012 at 01:06:10 UTC, Michel Fortin wrote:
> 
>> In the original linked article (which I wrote) what was proposed was to 
>> have the dynamic linker calculate offsets for fields and vtable entries 
>> and insert those offsets directly in the code (just like a linker does 
>> when it resolves symbols). But for that you'd need a custom linker 
>> (both static and dynamic), and probably a custom shared library format. 
>> So it's a huge task, especially when you consider that it should run on 
>> multiple platforms. But this same approach could make the C++ ABI 
>> non-fragile too.
> 
> I'm having a hard time to see why a regular application couldn't do 
> this, i.e. druntime. I'm mostly familiar with Mac OS X and seems pretty 
> easy just to access the running executable and change what you want in 
> it. That's what the dynamic linker is doing anyway. There's even a flag 
> for object files indicating it's a dynamic linker (don't know if that 
> is used any more). Sure it would probably break easily if the runtime 
> of the OS changed (new version of the dynamic linker, something 
> changing the object format).

Using a lookup table it could be done.

But if you're going to patch the code as a dynamic linker does but 
after the dynamic linking stage, then you'll have to play around with 
no-execute flags as well as address layout randomization, and this is 
going to be ugly.

Speaking of OS X, if your app is sandboxed I think it won't be able to 
do anything like that. Given that sandboxing is the beginning of a 
trend on many platforms, I'm not sure implementing all that would be 
worthwhile: all it'd accomplish is make processes that can't be 
sandboxed run a little faster.

-- 
Michel Fortin
michel.fortin at michelf.ca
http://michelf.ca/



More information about the Digitalmars-d mailing list