How to get access to Voldemort / private thingies

cy via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jun 17 14:07:31 PDT 2016


On Friday, 17 June 2016 at 19:49:18 UTC, Johan Engelen wrote:
> Hi all,
>   Is there another way to get access to Voldemort class 
> methods, or private class members, other than using

Voldemort data is pretty well protected though. Because unlike 
protection attributes, modularizing stuff in functions actually 
means something.

I mean, D doesn't exactly make it easy. You can't normally define 
a function in a different file it's declared in. But if you use 
extern(C) to avoid mangling getObject, you can pretty much 
provide interface.d and secrets.o and without analyzing the 
binary machine code, there's no way to tell the size or nature of 
what getObject returns, aside from that it (claims) to have 
pointers to functions that match the interface.

interface.d:
interface Object { ... };
extern(C) Object getObject();

secrets.d:
class Vold : Object { ... };
extern(C) Object getObject() { ... return new Vold(...); ... }

secrets.o: ????

Because of the guarantee that you can link to opaque .o files, 
there's no general way to introspect into just what a function 
does, because that function might not have any source at all.

(I suppose you could instrument "new" itself in the raw runtime, 
to at least get the size of it. Assuming it wasn't malloc'd, or 
static...)


More information about the Digitalmars-d-learn mailing list