3

プログラムで使用するようにglibcを変更しようとしています。mmap関数にコードを追加したかった(mmapシステムコールではなく、mmapシステムコールを実行するglibcの関数)。ただし、ソースコードディレクトリ内にいくつかのmmapまたはmmap64.cファイルがあります。

私のアーキテクチャはx86-64なので、他のアーキテクチャのディレクトリにあるファイルは無視しました。ただし、コンパイラが使用しているファイルのmmapがわかりません。mmap関数を含む別のファイルに意図的にガベージコードを挿入しましたが(コンパイラーがエラーを出すように)、コンパイラーはエラーを出さずにglibcを正常にコンパイルします。作成された.oファイルも表示されます。何をしたらいいのかわからない。コンパイラがコンパイルしているmmapを判断する簡単な方法はありますか?

4

2 に答える 2

2

コンパイラがコンパイルしている mmap を特定する簡単な方法はありますか?

gdb -q libc.so.6

Reading symbols from /tmp/build/libc.so.6...done.
(gdb) list mmap
76  #else
77  
78  /* This is a "normal" system call stub: if there is an error,
79     it returns -1 and sets errno.  */
80  
81  T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
82      ret
83  T_PSEUDO_END (SYSCALL_SYMBOL)
84  
85  #endif
(gdb) info source
Current source file is ../sysdeps/unix/syscall-template.S
Compilation directory is /glibc-git-rw/glibc/misc
Located in /glibc-git-rw/glibc/sysdeps/unix/syscall-template.S <<< You want this
Contains 87 lines.
Source language is asm.
Compiled with DWARF 2 debugging format.
Does not include preprocessor macro info.
于 2012-05-20T22:07:40.963 に答える
0

おそらくあなたを助けるかもしれないいくつかのリンカー(ld)オプションがあります。マニュアルページを見るとld、-print-map、-trace、または--trace-symbolが役に立ちます。オブジェクトファイルを取得すると、対応するヘッダーファイルを見つけることができるはずです。

于 2012-05-20T19:56:20.350 に答える