설탕이 아닌 구문 셸(Bash) 명령을 어셈블리 코드나 기계어 코드와 같은 "낮은 수준" 유형의 코드로 변환하는 방법은 무엇입니까?

설탕이 아닌 구문 셸(Bash) 명령을 어셈블리 코드나 기계어 코드와 같은 "낮은 수준" 유형의 코드로 변환하는 방법은 무엇입니까?

다음을 고려하십시오:

cd ~
cd $HOME

첫 번째 명령은 덜 추상적인 두 번째 명령에 대한 가능한 설탕 구문이라고 말하고 싶습니다.


프로그래밍 초보자에게 쉘에 초점을 맞춰 명령이 점점 덜 추상화되는 방식을 보여주기 위해 다음과 같이 묻습니다.
설탕이 아닌 구문 쉘(Bash) 명령을 "낮은" 유형의 코드로 변환하는 방법 , 예를 들어 어셈블리 코드나 기계어 코드(또는 cd $HOME어셈블리 표현과 같은 그 사이의 모든 것)?
이를 달성하고 컴퓨터 명령이 단순한 것에서 복잡한 것으로 어떻게 변하는지 보여주기 위해 어떤 소프트웨어(아마도 셸에서)를 사용할 수 있습니까?

답변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

고급 쉘 명령을 실행하려면 복잡한 프로그램인 쉘이 필요합니다.

커널을 호출하는 일련의 명령이 아닌 이상 어셈블리나 기계어 코드는 프로세스의 현재 디렉터리를 변경하지 않습니다. 커널은 셸보다 더 복잡한 소프트웨어이며 실행이 간단하지 않습니다 chdir. 파일 시스템 추상화 계층도 있습니다.

일반적으로 말하면, 특히 프로그래밍 초보자에게는 어셈블리 코드나 기계 코드의 이점이 거의 없습니다.

관련 정보