Even if it were true that all implementations use exactly the same
method (which would strike me as quite unlikely even if I didn't know
that, for instance, some implementations put the pointer at the
beginning of the object, and some at the end of the object), that still
wouldn't be enough to make such code safe. Because the behavior is
undefined, implementations are free to perform optimizations based upon
the assumption that you won't do anything that stupid.
In particular, one of the most basic and common optimizations is that if
the implementation knows precisely which class's version of a virtual
member function should be called, it will call that function directly,
rather than calling it indirectly through the vtable. This not only
would result in your vtable modification sometimes being ignored, it can
also result in the confusing situation where your modification is
sometimes ignored, and sometime used.
This optimization can, for instance, be used inside the ctors and dtors
of a given class, because inside those functions, that class IS the
most-derived type, even if they're being invoked as part of the
construction of a more-derived class.
It can also be done anytime an object has a fixed type, rather than
being accessed through a pointer or a reference.
It can even be used when accessing an object through a reference or
pointer, if the implementation knows that the reference or pointer will
always refer to an object of a specific most-derived type. That can be
easy to determine if the object's definition is in the same translation
unit as the code that accesses it by reference. Some modern
implementations can even determine that at link time by looking across
two or more translation units.
That's just one optimization that I happen to know about - I'm sure
there's many others I didn't think of.