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

3
我想查看Linux命令的源代码,以了解每个命令内部实际发生了什么。当我尝试在文本/十六进制编辑器中打开/bin中的命令时,我得到了一堆垃圾信息。有没有正确的方法来查看这些命令的源代码呢?
提前感谢您的帮助, Geoff
编辑: 我应该更加具体说明。基本上,我有一个命令集,是由一个现在联系不上的人编写的。我想知道他的命令实际上是在做什么,但如果没有一种“反汇编”命令的方式,我就束手无策了。我希望能在操作系统内部找到一种方法来完成这个任务。
5个回答

6

许多核心的Linux命令都是GNU核心工具的一部分。可以在这里找到源代码。

您要打开的文件是二进制可执行文件,它们是内核传递给CPU的东西。这些文件由编译器制作而成,该编译器接受您和我理解的源代码,并通过多个阶段将其转换为这种CPU友好的格式。


嗨,安迪,我应该更具体一些。基本上,我有一个命令集,是由一个我现在无法联系到的人编写的。我想知道他的命令实际上是做什么的,但是没有办法“反汇编”这个命令,我就束手无策了。我希望能够在操作系统内部找到一种方法来解决这个问题。 - undefined
这很困难。原生代码很难反汇编成C或C++源代码。你可以使用类似"objdump -d mycommand"的工具将二进制文件转换为汇编代码。然后你需要理解汇编语言才能理解它在做什么。 - undefined
1
我在上面更新了我的评论。实际上并不是答案,对于C代码来说并不是如此。如果你知道编译器(具体版本)、编译器选项以及它是如何进行转换的,从理论上讲是可能的(尽管在逆转过程中仍然可能存在歧义)。 - undefined
那个方法起作用了,现在我有了汇编代码,现在我只需要将汇编代码反汇编成C语言。感谢你帮我走到这一步。如果你有任何关于将汇编代码转换为C代码的建议,请告诉我! - undefined

3
你可以使用 strace 来查看正在调用的系统调用。
strace your_command

1

很可能您可以通过发行版的包管理器下载源代码。例如,在Debian和相关的发行版(包括Ubuntu)上,首先找到该命令所属的软件包:

$ dpkg -S /bin/cat 
coreutils: /bin/cat

输出结果告诉您/bin/catcoreutils软件包中。现在您可以下载源代码:
apt-get source coreutils

1
这个问题涉及到反向工程。
一些关键词是"静态分析"和"动态分析"。
1. 使用"gdb"检查二进制文件是否含有符号表。(如果二进制文件使用调试标志编译,你可以获取源代码并跳过下面的步骤。) 2. 通过"strace/ltrace"观察程序行为。 3. 使用"objdump/ida-pro"或其他反汇编器编写伪代码。 4. 通过gdb运行它进行动态分析并更正伪代码。
一个普通的二进制文件可以根据需要和时间还原回源代码。相反,一个异常程序不容易实现这一点,但它只出现在特定的ctf比赛中。(一些特殊技能如"strip/objcopy/packer"...等)

0

你可以使用以下命令查看/bin/cat的汇编代码: objdump -d /bin/cat

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

另一种方法是使用strings /bin/cat,这对于形成初步想法然后进行反向操作很有用。

无论如何,你都可以在线获取每个Linux命令的源代码 :D


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接