繁体   English   中英

如何跟踪coreutils到系统调用?

[英]How do I trace coreutils down to a syscall?

我试图通过练习来一直导航并了解whoami (以及其他coreutils),直到最低级别的源代码。

到目前为止,我的潜水:

  1. 实际的二进制文件在哪里?

    which whoami
    /usr/bin/whoami

  2. 它在哪里维护?

    http://www.gnu.org/software/coreutils/coreutils.html

  3. 我如何获得来源?

git clone git://git.sv.gnu.org/coreutils

  1. 存储库中的whoami源代码在哪里?

# find . | grep whoami

./man/whoami.x
./man/whoami.1
./src/whoami.c
./src/whoami
./src/whoami.o
./src/.deps/src_libsinglebin_whoami_a-whoami.Po
./src/.deps/whoami.Po

相关行(84):

uid = geteuid ();

这大约是我的兔子洞停止的地方。 gnulib/lib/euidaccess.c提到了geteuid() ,但未明确定义AFAICT。 它在/usr/local/unistd.h作为extern引用,但是抓取一个我所看到的uid并没有太大的负担。

我到这里时主要是在已知的系统头文件中对geteuid进行geteuid ,并且因为我在回溯其定义时遇到了麻烦。

问题 :如何进一步探究geteuid()的源代码? 快速浏览此代码库而不花钱的最有效方法是什么?

我在使用Vim和一些ctags的Ubuntu服务器15.04上(这对于导航现有系统标头不是很有帮助)。 我是一个糟糕的开发人员,这是我的学习方法,尽管我无法克​​服这一障碍。

通常,您应该阅读geteuid的文档。 您可以从Open Group阅读GNU文档规范 ,也可以查阅手册页。

如果那没有帮助,您可以为c-library安装调试符号(称为libc6-dbg或类似名称)并下载libc6的源代码),那么当您进入库时,您会指出源文件的路径。图书馆。

在这种情况下,我认为这不会使您走得更远, geteuid可能发生的情况是,它仅发出实际的syscall,然后进入内核空间。 您不能以与调试普通程序相同的方式来调试(内核)代码。

因此,在您的情况下,您最好参考该文档并仔细阅读,并尝试弄清楚为什么geteuid无法返回您期望的结果。 可能这将导致您更改对geteuid应该返回的内容的期望,以匹配实际返回的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM