查看标准Linux命令的源代码,例如猫,ls,cd

时间:2014-10-15 18:22:21

标签: linux bash command

我想查看Linux命令的源代码,以查看每个命令内部实际发生的情况。当我尝试在文本/十六进制编辑器中打开/ bin中的命令时,我得到了一堆垃圾。在这些命令上查看源的正确方法是什么?

提前致谢, 杰夫

编辑: 我应该更具体一点。基本上我有一个由我无法触及的人编写的命令集。我想看看他的命令究竟在做什么,但如果没有办法“拆解”命令,我就死在了水中。我希望能在操作系统中做到这一点。

5 个答案:

答案 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 analysisdynamic analysis

  1. 使用gdb检查二进制文件是否包含符号表。 (如果使用调试标志进行二进制编译,则可以获取源代码并跳过下面的步骤)
  2. strace/ltrace观察程序行为。
  3. 使用objdump/ida-pro或其他反汇编程序编写seudo-code。
  4. 通过gdb运行它进行动态分析并更正seudo-code。
  5. 如果您想要并且有时间,可以将普通二进制文件还原为源代码。相反,异常程序并不容易做到这一点,但它只出现在特定的ctf竞争中。 (某些特殊技能,如strip/objcopy/packer ...等)

答案 4 :(得分:0)

你可以看到/ bin / cat的汇编代码:  objdump -d /bin/cat

然后分析它并查看可以启动的命令。

另一种接近的方式是strings /bin/cat,有用的是初步想法然后反转它。

你可以在线获取每个linux命令的源代码:D