我正在尝试修改glibc以用于我的程序。我想在mmap函数中添加一些代码(不是mmap系统调用,而是glibc中执行mmap系统调用的函数)。但是,我在源代码目录中看到了几个mmap或mmap64.c文件。
我的架构是x86-64,所以我忽略了其他架构目录中的文件。但是,我不知道编译器使用哪个文件的mmap。我故意在包含mmap函数的不同文件中插入一些垃圾代码(所以编译器给出了错误),但是编译器编译glibc没有任何错误。我甚至可以看到创建的.o文件。我不知道该怎么做。有什么简单的方法可以确定编译器正在编译哪个mmap?
答案 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应该可以帮助您。获得目标文件后,您应该能够找到相应的头文件。