\chapter{Debug}\index{Debug} \label{chap:debug} Quand plus rien ne marche, il existe encore un espoir... \section{strace}\index{strace} \section{LD\_PRELOAD}\index{LD\_PRELOAD} \begin{lstlisting}[language=C] /* spy_getenv.so: spy_getenv.c Makefile gcc -Wall -shared -fPIC $< -ldl -o $@ */ #include #include #include #define __USE_GNU #include typedef char * (*original_getenv)(const char *envname); char *getenv(char *envname) { static char *arrow = "--getenv--> "; static char *wtf = " --> WTF ?"; char *content; original_getenv orig_getenv; orig_getenv = (original_getenv)dlsym(RTLD_NEXT, "getenv"); write(STDERR_FILENO, arrow, strlen(arrow)); write(STDERR_FILENO, envname, strlen(envname)); content = orig_getenv(envname); if (NULL != content) { write(STDERR_FILENO, "=", 1); write(STDERR_FILENO, content, strlen(content)); } else { write(STDERR_FILENO, wtf, strlen(wtf)); } write(STDERR_FILENO, "\n", 1); return content; } \end{lstlisting}