ahoj,
LD_PRELOAD zavisi uz z podstaty na environmentu, tzn kdyz ho tam odsud nekdo smaze - unsetenv("LD_PRELOAD") _a k tomu_ zavola napr system() tak uz se LD_PRELOAD neprojevi. samozrejme subprocess po execve nemusi vubec puvodni environment dostat, pripadne setuid binarka ho bude ignorovat.
praktictejsi je pouzit /etc/ld.so.preload. pokud to mozne neni, jeste jde si stav environmentu tesne pred execve hlidat (to neni jednoduche - je to nutne delat pro kazdy libc call zvlast, tj extra pro popen, system, exec* atd).
interne se preload totiz resi tesne po execve() pri hledani knihoven programu (tzv interpreter faze - /lib/ld-linux.so.2 atd), pote jeho pritomnost uz neni smerodatna.
co se tyce "obejiti" tak to mozne samozrejme jde, najit puvodni symbol pomoci dlsym(3)
na ucely callgraphu atd na urovni knihoven je mimojine rozumejsi pouzit LD_AUDIT - viz latrace(1).