On 2012-10-04 09:20, timotheecour wrote:
Here, I want to redefine an extern(C) function, not call the existing definition. I mentioned my previous post because I realized that when adding (for example) assert(0) inside the definition extern(C) std_stdio_static_this, it had no effect, which led me to ask this more general question: how to redefine an extern(C) function in a shared lib, which is very often needed (eg handling asserts, stacktraces, redirecting io to a log etc). It does work inside a normal D program. Interestingly, I also tried linking against a library libredefine that just re-defines that extern(C) symbol BEFORE linking against libphobos2.a, but that too had no effect. weird. (it was something like: rdmd -lredefine -L-Lpath/to/phobos etc)
This would be a very ugly hack, but it should be possible to modifying the loaded image (dynamic library, executable) at runtime and inserting whatever functions you want at whatever address you want.
This is a very old library it uses the same concept, if I recall correctly: http://flectioned.kuehne.cn/ For Mac OS X you want these docs: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html https://developer.apple.com/library/mac/#documentation/developertools/Reference/MachOReference/Reference/reference.html -- /Jacob Carlborg
