プロジェクトの 1 つで glibc の printf() をハッキングしていて、問題が発生しました。手がかりを教えてください。私の懸念の 1 つは、malloc/free の同じソリューションが完璧に機能する理由です。
添付の「PrintfHank.c」には、標準ライブラリの前にプリロードされる独自の printf() ソリューションが含まれています。「main.c」はprintf()を使って文章を出力するだけです。2 つのファイルを編集した後、次のコマンドを発行しました。
- main.c をコンパイル gcc –Wall –o main main.c
- 独自のライブラリを作成 gcc –Wall –fPIC –shared –o PrintfHank.so PrintfHank.c –ldl
- 新しいライブラリをテストします LD_PRELOAD=”$mypath/PrintfHank.so” $mypath/main
しかし、コンソールで「自分のprintf内」ではなく「hello world」を受け取りました。malloc/free 関数をハッキングする場合は問題ありません。
システムに「root」としてログインし、2.6.23.1-42.fc8-i686 を使用しています。どんなコメントでも大歓迎です!!
main.c
#include <stdio.h>
int main(void)
{
printf("hello world\n");
return 0;
}
PrintfHank.c
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <stdio.h>
#include <dlfcn.h>
static int (*orig_printf)(const char *format, ...) = NULL;
int printf(const char *format, ...)
{
if (orig_printf == NULL)
{
orig_printf = (int (*)(const char *format, ...))dlsym(RTLD_NEXT, "printf");
}
// TODO: print desired message from caller.
return orig_printf("within my own printf\n");
}