如何将coreutils跟踪到系统调用?
我试图导航并理解如何将coreutils跟踪到系统调用?,c,linux,gnu-coreutils,C,Linux,Gnu Coreutils,我试图导航并理解whoami(和其他coreutil),一直到最低级别的源代码,这只是一个练习 到目前为止,我的潜水: 实际的二进制文件在哪里 哪个whoami /usr/bin/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 它在哪里维护
whoami
(和其他coreutil),一直到最低级别的源代码,这只是一个练习
到目前为止,我的潜水:
哪个whoami
/usr/bin/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
git克隆git://git.sv.gnu.org/coreutils
whoami
源代码在哪里#查找。|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):
这大概就是我的兔子洞停的地方geteuid()
在gnulib/lib/euidaccess.c
中提到过,但没有在AICT中明确定义。它在/usr/local/unistd.h
中也被引用为extern
,但我看不到与抓取uid相关的繁重工作
我主要是通过在已知的系统头中对geteuid
进行grepping来实现的,包括,因为我很难回溯它的定义
问题:如何进一步深入了解geteuid()的源代码
?什么是最有效的方法来快速地探索这个代码库而不必到处乱翻
我在Ubuntu服务器15.04上使用Vim和一些CTAG(这对导航现有的系统头没有多大帮助)。我是一个糟糕的开发人员,这是我的学习方法,尽管我无法克服这个障碍。通常你应该阅读
geteuid
的文档。您可以阅读开放组中的,或查阅手册页
如果这没有帮助,您可以安装c库的调试符号(它被称为libc6 dbg
或类似的东西)并下载libc6
)的源代码,然后在进入库时指出源文件的路径
在本例中,我认为这不会让您走得更远,在geteuid
中可能发生的情况是,它只发出一个实际的系统调用,然后进入内核空间。不能像调试普通程序那样调试(内核)代码
因此,在您的情况下,您最好查阅文档并仔细阅读,并尝试找出
geteuid
无法返回预期结果的原因。这可能会导致您改变对geteuid
应该返回的内容的期望,以匹配实际返回的内容。geteuid()
位于Unix标准库libc
中。我想我正试图从一种更“艰难的方式”来实现这一点,法医方法,并查看geteuid的内部定义为触发系统调用的C函数的位置。我无法发现代码在哪里。正如我在原始注释中提到的,它似乎没有在unistd.h或sys/types.h中定义。我将研究如何安装调试符号,看看这能让我走多远。