首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何跟踪coreutils到syscall?

如何跟踪coreutils到syscall?
EN

Stack Overflow用户
提问于 2015-11-26 00:49:11
回答 1查看 106关注 0票数 2

我正试图导航和理解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

代码语言:javascript
复制
./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):

代码语言:javascript
复制
uid = geteuid ();

这大概是我兔子洞停的地方。geteuid()gnulib/lib/euidaccess.c中提到,但没有明确定义AFAICT。它在/usr/local/unistd.h中也被引用为extern,但与抓取我所看到的uid无关。

我之所以来到这里,主要是因为我在已知的系统头中对geteuid进行了大量的庆祝,并且在追溯它的定义时遇到了困难。

问题:我如何进一步深入研究geteuid()的源代码?什么是最有效的方法来快速探索这个代码库,而不用到处打招呼?

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

EN

回答 1

Stack Overflow用户

发布于 2015-11-26 07:24:48

通常,您应该阅读geteuid的文档。您可以从Open中读取GNU文件规格说明或查阅手册页。

如果这无助于您安装c库的调试符号(称为libc6-dbg或类似的代码)并下载libc6的源代码,那么您在进入库时指出源文件的路径。

在这种情况下,我不认为这会更进一步,在geteuid中可能发生的是,它只是发出一个实际的syscall,然后进入内核空间。您不能像调试普通程序那样调试(内核)代码。

因此,在您的示例中,您最好查阅文档并仔细阅读,并试图找出为什么geteuid不返回您期望的内容。这可能会导致您改变对geteuid应该返回的内容的期望,以匹配实际返回的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33928920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档