[英]How do I trace coreutils down to a syscall?
我试图通过练习来一直导航并了解whoami
(以及其他coreutils),直到最低级别的源代码。
到目前为止,我的潜水:
实际的二进制文件在哪里?
which whoami
/usr/bin/whoami
它在哪里维护?
我如何获得来源?
git clone git://git.sv.gnu.org/coreutils
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.