Fragen? Antworten! Siehe auch: Alternativlos
Nun braucht man für dieses Logging die Möglichkeit, das Original-malloc aus der glibc aus dem überschreibenden malloc aufzurufen. Dafür gibt es libdl, wofür man dlfcn.h included und dann dlsym benutzt. Die glibc hat genau dafür ein Flag vorgesehen, RTLD_NEXT, mit dem man dlsym sagen kann, man will das zweite Symbol haben, also das was ohne das LD_PRELOAD genommen worden wäre.
Soweit, sogut, funktioniert auch, — außer das Programm benutzt pthread. Dann gibt es sofort einen Segfault, bevor noch das Logfile erzeugt wird. Stellt sich raus, daß dlsym mit libpthread offenbar selber malloc aufruft. GROOOOOSS, liebe glibc-Leute, GANZ groß. Da weiß man, wieso man glibc benutzt.
Das landet dann natürlich bei meinem malloc-Wrapper, der aber noch nicht weiß, welches Original-Malloc er aufrufen soll. Es gibt sogar eine undokumentierte Lösung für dieses Problem: man ruft __libc_malloc auf, was die glibc genau für solche Situationen zur Verfügung stellt — damit libdl ein malloc aufrufen kann, ohne ein LD_PRELOAD malloc zu erwischen. Aber hey, im in den Fuß schießen war die glibc ja schon immer führend.