私は最近この記事を読みました、そして私は楽しみのために次のことをすることでlibc printf関数をオーバーライドしようとしました:-
- printfを使用して印刷する実行可能ファイルを作成します
this is a test
(printer.c) - 印刷するカスタムプットを使用してcファイルを作成します
muhahaha, this is a test
(custom.c) - オブジェクトファイルを作成する
gcc -fPIC -g -c -Wall custom.c
- soファイルを作成する
gcc -shared -Wl,-soname,libmystuff.so.1 -o libmystuff.so.1.0.1 custom.o
- soファイルを含むディレクトリをLD_PRELOAD環境変数に追加します。
export LD_PRELOAD=$(pwd)
- プリンターを実行してみてください
それは印刷されると思いmuhahaha, this is a test
ますが、何か間違ったことをしているようです。コンセプトが間違っていませんか?それとも私は何か間違ったことをしているだけですか?
[編集]
関連するコードスニペットは次のとおりです:-
// printer.c
int main() {
printf("this is a test");
return 0;
}
// custom.c
void printf(char *t) {
puts("muhahaha, this is a test");
}