【发布时间】:2012-05-27 21:39:11
【问题描述】:
我知道 mmap 是一个系统调用,但是 glibc 中必须有一些包装器来执行系统调用。然而,当我尝试使用 gdb 单步执行程序中的 mmap 函数时,gdb 会忽略它,因为它找不到任何源文件为此(注意我从源代码编译我自己的 glibc)。我可以单步执行其他 glibc 库函数,例如 printf 和 malloc,但不能单步执行 mmap。我还使用了 -fno-builtin 标志,以便 gcc 不使用内置函数。对此的任何帮助将不胜感激。
【问题讨论】:
-
为什么要步入 mmap开始?该错误在其他地方:-)
-
Jens 我不想进入 mmap 来查看一些错误,而只是想看看 mmap 的代码在哪里,以便我可以进行一些修改。我的计划是记录每个系统调用的参数,包括 mmap。是的,我知道还有其他方法,但我正在编写一些特殊的工具。
-
strace在这种情况下可能会有所帮助。还要检查strace的源代码,看看它是如何完成你想要在这里做的同样工作的。 -
然后我建议为'mmap' grepping Linux 内核源代码树。这应该会出现正确的文件。
-
strace 使用 ptrace。我对执行系统调用的 mmap 包装器感兴趣。