Fragile ABI

Jacob Carlborg doob at me.com
Fri Aug 17 06:43:44 PDT 2012


On Friday, 17 August 2012 at 12:36:57 UTC, R Grocott wrote:
> Paulo -
>
> Surely there are ways to work around the OS's native ABI, 
> though, even from within compiled code?
>
> Rewriting object vtables (etc.) might be a bit more involved 
> than simple name mangling, but I'm almost certain it would be 
> possible to implement it as part of druntime. The blog post 
> which I linked describes one way to go about it.
>
> Michael -
>
> As far as I can tell, most of the performance cost in your idea 
> comes from the additional level of indirection, since you store 
> vtable offsets in a global variable which must be read before 
> each function call.
>
> This might just be wishful thinking, but would it be possible 
> for druntime to write new vtable offsets directly into the 
> program's machine code, at dynamic-link time? That would remove 
> all of the run-time performance overhead, but, as I say, I'm 
> not sure whether it's actually possible.
>
> I think the biggest obstacle is that it would require the .text 
> section (or equivalent) of the executable to be writable. I 
> know that's possible on Linux, but I'm not sure whether the 
> same is true for most other operating systems. I guess it might 
> also be a security risk?

It's possible to modify the vtable at runtime. Just access 
through .__vtable in ClassInfo (I think) and treat it like a 
regular array. Don't know if that's what you mean.

--
/Jacob Carlborg


More information about the Digitalmars-d mailing list