3

我正在尝试修改 glibc 以与我的程序一起使用。我想向 mmap 函数添加一些代码(不是 mmap 系统调用,而是 glibc 中执行 mmap 系统调用的函数)。但是,我在源代码目录中看到了几个 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 回答