ロードされているライブラリに引数を渡すことは可能ですかLD_PRELOAD
:
LD_PRELOAD=lib.so ./program
このライブラリに引数を渡すにはどうすればよいですか?
ロードされているライブラリに引数を渡すことは可能ですかLD_PRELOAD
:
LD_PRELOAD=lib.so ./program
このライブラリに引数を渡すにはどうすればよいですか?
通常、環境変数を使用してこれを行います。たとえば、次のようなものがあります。
#include <iostream>
#include <stdlib.h>
void init() __attribute__ ((constructor));
void init() {
std::cout << "Init: " << getenv("MYLIB") << std::endl;
}
次のことができます。
MYLIB=hi LD_PRELOAD=./test.so /bin/echo 初期: こんにちは
これはコンストラクター ( GCC 拡張機能) で使用する必要はありませんが、多くの場合、それらを使用するのに便利な場所です。
私が過去に行ったことは、これを「通常の」アプリケーションのように見えるシェル スクリプト ラッパーと組み合わせて使用することでした。シェル スクリプトはその引数を受け取り、ライブラリが必要とする環境変数にそれらをプッシュしてexec
から、介入するプログラムをロードします。あまりにも壊れやすく邪魔にならずに、ユーザーにそのように「感じ」ます。
/proc/self/cmdline
必要に応じて、現在のプロセスのコマンド ラインを直接読み取るために read することで、これを行うこともできます。個人的には、あなたが取り組んでいるプロセスにできるだけ干渉することは避けたいと思います。