如何将非糖语法 shell (Bash) 命令转换为“低级”类型的代码,例如汇编代码甚至机器代码?

如何将非糖语法 shell (Bash) 命令转换为“低级”类型的代码,例如汇编代码甚至机器代码?

请考虑:

cd ~
cd $HOME

我想说,第一个命令是第二个命令的可能糖语法,而第二个命令则不太抽象。


只是为了向编程新手展示命令如何变得越来越不抽象(在解释什么是抽象的背景下),重点关注 shell,我问:
如何将非糖语法 shell (Bash) 命令转换为“较低”类型的代码,例如汇编代码甚至机器代码(或介于两者之间的任何代码,cd $HOME例如其汇编表示形式)?
我可以使用什么软件(也许在 shell 中)来实现这一目标,以演示计算机命令如何从简单到复杂?

答案1

既然你提到了 Bash,那么翻译cd成汇编语言可以如下完成:

git://git.savannah.gnu.org/bash.git
cd bash
./configure
make
cd builtins
./mkbuiltins -D . cd.def
gcc -S -DHAVE_CONFIG_H -DSHELL  -I. -I..  -I.. -I../include -I../lib -I.    -g -O2 -Wno-parentheses -Wno-format-security cd.c

然后您将在 中找到相应的汇编语言builtins/cd.s。 (您需要安装许多开发工具;如何安装取决于您的发行版,并且./configure会告诉您缺少什么。)

我怀疑这会非常有用,特别是对于编程新手来说。

答案2

要执行高级 shell 命令,您需要一个复杂的程序,即 shell。

任何汇编或机器代码都不会更改进程的当前目录,除非它是调用内核的指令序列。内核是比 shell 更复杂的软件,并且执行起来并不简单chdir,还有文件系统抽象层。

一般来说,从汇编代码或机器代码中没有什么好处,特别是对于编程新手来说。

相关内容