Я работаю над профилировщиком кучи для Linux, называемым heaptrack. В настоящее время я полагаюсь на LD_PRELOAD
для перегрузки различных (де-) функций распределения, и это работает очень хорошо.
Теперь я хотел бы расширить инструмент, чтобы среда выполнения была прикреплена к существующему процессу, который был запущен без LD_PRELOAD
моего инструмента. Я могу dlopen
мою библиотеку через GDB просто отлично, но это не будет перезаписывать malloc
и т.д. Я думаю, это потому, что в этот момент компоновщик уже разрешил зависимый от позиции код уже запущенного процесса - правильно?
Итак, что мне делать вместо того, чтобы перегружать malloc
и друзей?
Я не владею кодом ассемблера. Из того, что я читал до сих пор, я думаю, мне как-то придется заплатить malloc
и другие функции, чтобы они сначала перешли к моей функции трассировки, а затем продолжили их фактическую реализацию? Это верно? Как это сделать?
Я надеюсь, что там есть существующие инструменты или я могу использовать GDB/ptrace для этого.