【问题标题】:Is mmap a built in function?mmap 是内置函数吗?
【发布时间】:2012-05-27 21:39:11
【问题描述】:

我知道 mmap 是一个系统调用,但是 glibc 中必须有一些包装器来执行系统调用。然而,当我尝试使用 gdb 单步执行程序中的 mmap 函数时,gdb 会忽略它,因为它找不到任何源文件为此(注意我从源代码编译我自己的 glibc)。我可以单步执行其他 glibc 库函数,例如 printfmalloc,但不能单步执行 mmap。我还使用了 -fno-builtin 标志,以便 gcc 不使用内置函数。对此的任何帮助将不胜感激。

【问题讨论】:

  • 为什么要步入 mmap开始?该错误在其他地方:-)
  • Jens 我不想进入 mmap 来查看一些错误,而只是想看看 mmap 的代码在哪里,以便我可以进行一些修改。我的计划是记录每个系统调用的参数,包括 mmap。是的,我知道还有其他方法,但我正在编写一些特殊的工具。
  • strace 在这种情况下可能会有所帮助。还要检查strace 的源代码,看看它是如何完成你想要在这里做的同样工作的。
  • 然后我建议为'mmap' grepping Linux 内核源代码树。这应该会出现正确的文件。
  • strace 使用 ptrace。我对执行系统调用的 mmap 包装器感兴趣。

标签: c linux gcc gdb glibc


【解决方案1】:

我不知道你的问题是什么。它对我来说非常好用。

使用系统libc.so.6,安装调试符号:

// mmap.c
#include <sys/mman.h>

int main()
{
  void *p = mmap(0, 4096, PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
  return 0;
}

gcc -g mmap.c


$ gdb -q a.out
Reading symbols from /tmp/a.out...done.
(gdb) start
Temporary breakpoint 1 at 0x40052c: file mmap.c, line 5.

Temporary breakpoint 1, main () at mmap.c:5
5         void *p = mmap(0, 4096, PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
(gdb) step
mmap64 () at ../sysdeps/unix/syscall-template.S:82
82      ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) 
mmap64 () at ../sysdeps/unix/syscall-template.S:83
83      in ../sysdeps/unix/syscall-template.S
(gdb) 
main () at mmap.c:6
6         return 0;
(gdb) q

使用我自己的 glibc 构建:

gdb -q a.out
Reading symbols from /tmp/a.out...done.
(gdb) start
Temporary breakpoint 1 at 0x40056c: file mmap.c, line 5.
warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?

Temporary breakpoint 1, main () at mmap.c:5
5         void *p = mmap(0, 4096, PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
(gdb) step
mmap64 () at ../sysdeps/unix/syscall-template.S:81
81      T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
(gdb) 
mmap64 () at ../sysdeps/unix/syscall-template.S:82
82              ret
(gdb) 
main () at mmap.c:6
6         return 0;
(gdb) q

【讨论】:

    猜你喜欢
    • 2016-03-08
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    相关资源
    最近更新 更多