Patching von Code / Symbolen in eine dynamisch verknüpfte ELF-Binärdatei

Angenommen, ich habe eine ELF-Binärdatei, die dynamisch verknüpft ist, und ich möchte bestimmte Bibliotheksaufrufe überschreiben / umleiten. Ich weiß, dass ich das mit @ machen kaLD_PRELOAD, aber ich möchte eine Lösung, die in der Binärdatei permanent ist, unabhängig von der Umgebung, und die für setuid / setgid-Binärdateien funktioniert, von denen keineLD_PRELOAD erreichen können

Ich möchte Code aus zusätzlichen Objektdateien hinzufügen (möglicherweise in neuen Abschnitten, falls erforderlich) und die Symbole aus diesen Objektdateien zur Symboltabelle der Binärdatei hinzufügen, damit die neu hinzugefügte Version des Codes verwendet wird des gemeinsam genutzten Bibliothekscodes. Ich bin der Meinung, dass dies möglich sein sollte, ohne dass tatsächlich Änderungen im vorhandenen Code vorgenommen werden. Obwohl sie sich in derselben Datei befinden, sollten sie zur Laufzeit auf die übliche PLT-Art aufgelöst werden können (für das, was es wert ist, kümmere ich mich nur um Funktionen, nicht um Daten).

Bitte gib mir keine Antworten nach dem Motto "Das willst du nicht!" oder "Das ist nicht tragbar!" Woran ich gerade arbeite, ist eine Möglichkeit, Binärdateien mit leicht ABI-inkompatiblen alternativen Shared-Library-Implementierungen zu verbinden. Die fragliche Plattform ist i386-Linux (d. H. 32-Bit), wenn es darauf ankommt. Wenn ich mich nicht irre, was möglich ist, könnte ich einige Tools schreiben, um die ELF-Dateien zu analysieren und meine Hacks auszuführen, aber ich vermute, dass es eine ausgefallene Möglichkeit gibt, den GNU-Linker und andere Tools zu verwenden, um dies zu erreichen, ohne neuen Code zu schreibe

Antworten auf die Frage(8)

Ihre Antwort auf die Frage