0

私は最近この記事を読みました、そして私は楽しみのために次のことをすることで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");
}
4

1 に答える 1

1

ライブラリには、ディレクトリではなく、LD_PRELOAD環境変数で名前を付ける必要があります。

export LD_PRELOAD=/path/to/libmystuff.so.1.0.1
于 2012-04-28T01:32:58.293 に答える