I already have an implementation of fix-and-continue ready (it works only to substitute functions (global vars are not substituted and will have two copies, for now), and I’ve only tested it on simple examples).
But there is still one or two problems:
The disassemble command uses the object file to get the disassembled code. If I substitute the printf function by patching it to become a trampoline, that object file is (as expected) not affected, making calls to “disassemble” emit the old code, and not the jump.
I don’t think it’s a big problem, but what do you think about it?
If anyone has knowledge of the Mac OS X linker, I would also like to know if it’s still possible to do what Jason was mentioning in the message I linked to (from 2003), where you could pass it some flags to inhibit running of the global constructors and destructors.
I still can’t locate the location of the symbol’s address in the GOT, but I think I’ll create some ABRI methods to get those addresses from disassembling the opcodes (not the best way, but the only I can think of).
P.S: If you have any specific tests you want me to try before submitting patches, please tell.