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

Reply via email to