Call me stupid, but why do you have to disassemble the program to get the symbol pointers when you just finished compiling the thing in the first place?
Couldn't this intermediate step of pointer collection be part of the prelink process and skip all this guesswork?