如何知道编译器正在编译的函数的位置

时间:2012-05-20 19:41:15

标签: c linux gcc x86-64 glibc

我正在尝试修改glibc以用于我的程序。我想在mmap函数中添加一些代码(不是mmap系统调用,而是glibc中执行mmap系统调用的函数)。但是,我在源代码目录中看到了几个mmap或mmap64.c文件。

我的架构是x86-64,所以我忽略了其他架构目录中的文件。但是,我不知道编译器使用哪个文件的mmap。我故意在包含mmap函数的不同文件中插入一些垃圾代码(所以编译器给出了错误),但是编译器编译glibc没有任何错误。我甚至可以看到创建的.o文件。我不知道该怎么做。有什么简单的方法可以确定编译器正在编译哪个mmap?

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

可能有一些链接器(ld)选项可能会对您有所帮助。查看ld手册页, - print-map或--trace,或--trace-symbol应该可以帮助您。获得目标文件后,您应该能够找到相应的头文件。