3

コードを変更して使用できるように、glibcをダウンロードしました。それで、ただ遊んでみるために、 glibcのディレクトリstdio-commonにあるprintf関数を変更して、 「Can you see me?」と出力するようにしました。

int
__printf (const char *format, ...)
{
  va_list arg;
  int done;

  va_start (arg, format);
  done = vfprintf (stdout, "Can you see me?", arg);
  va_end (arg);

  return done;
}

その変更を行った後、 glibcをコンパイルし、このglibcディレクトリのlibc.soでLD_PRELOAD を使用して、printfを使用してサンプル プログラムを実行しました。ただし、printfの印刷は正常に表示されます。つまり、自分が行った変更は反映されません。私はここで何の間違いをしていますか?

4

1 に答える 1

1

これにはいくつかの理由が考えられます。最も単純な理由は、実際の形式のない文字列を使用し、コンパイラが呼び出しを からprintfに変更したことputsです。

printf("hello\n");
// becomes:
puts("hello");

パラメータを追加してみてください:

char ex = '!';
printf("Hello %c\n", ex);
于 2012-05-02T17:25:43.170 に答える