3 votes

Utiliser Electric Fence (libefence) juste pour une bibliothèque partagée

Afin de diagnostiquer un bug délicat de corruption de mémoire (la mémoire est écrasée de manière aléatoire), j'ai pensé utiliser Electric Fence + quelques appels mprotect personnalisés pour m'assurer que les structures de données corrompues ne sont accessibles en écriture que lorsque je veux qu'elles le soient (et j'obtiens immédiatement un SIGSEGV lorsqu'on tente de les écrire).

Malheureusement, ledit code est une extension C de Ruby, ce qui fait que son exécution sous libefence est un cauchemar en termes de performances, tout comme l'exécution de l'ensemble de l'interpréteur ruby sous libefence en utilisant

export LD_PRELOAD=libefence.so.0.0

est horriblement lent.

Par contre, lier l'extension ruby avec libefence directement (en passant -lefence à l'éditeur de liens) semble n'avoir aucun effet, ce qui permet de l'exécuter sans l'instrumentation de libefence.

Existe-t-il un moyen d'exécuter uniquement les allocations de mémoire qui se produisent dans une bibliothèque partagée spécifique par le biais de libefence et de laisser les autres librairies partagées et le processus principal tranquilles ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X