我想查看Linux命令的源代码,以查看每个命令内部实际发生的情况。当我尝试在文本/十六进制编辑器中打开/ bin中的命令时,我得到了一堆垃圾。在这些命令上查看源的正确方法是什么?
提前致谢, 杰夫
编辑: 我应该更具体一点。基本上我有一个由我无法触及的人编写的命令集。我想看看他的命令究竟在做什么,但如果没有办法“拆解”命令,我就死在了水中。我希望能在操作系统中做到这一点。
答案 0 :(得分:3)
许多核心Linux命令都是GNU核心工具的一部分。该来源可在线here
找到您要打开的文件是二进制可执行文件,它是内核传递给CPU的内容。这些文件是使用编译器生成的,该编译器接收您和我理解的源代码,并通过多个阶段将其转换为此CPU友好格式。
答案 1 :(得分:3)
您可以使用strace
strace your_command
答案 2 :(得分:1)
您很有可能可以使用您的发行版软件包管理器下载源代码。例如,在Debian和相关发行版(包括Ubuntu)上,首先找到该命令所属的包:
$ dpkg -S /bin/cat
coreutils: /bin/cat
输出告诉您/bin/cat
包含在coreutils
中。现在您可以下载源代码:
apt-get source coreutils
答案 3 :(得分:1)
此问题与reverse engineering
。
有些关键字是static analysis
和dynamic analysis
gdb
检查二进制文件是否包含符号表。 (如果使用调试标志进行二进制编译,则可以获取源代码并跳过下面的步骤)strace/ltrace
观察程序行为。objdump/ida-pro
或其他反汇编程序编写seudo-code。如果您想要并且有时间,可以将普通二进制文件还原为源代码。相反,异常程序并不容易做到这一点,但它只出现在特定的ctf竞争中。 (某些特殊技能,如strip/objcopy/packer
...等)
答案 4 :(得分:0)
你可以看到/ bin / cat的汇编代码:
objdump -d /bin/cat
然后分析它并查看可以启动的命令。
另一种接近的方式是strings /bin/cat
,有用的是初步想法然后反转它。
你可以在线获取每个linux命令的源代码:D