![Linux 내장 명령의 소스 코드를 보는 방법은 무엇입니까? [복사]](https://linux55.com/image/205361/Linux%20%EB%82%B4%EC%9E%A5%20%EB%AA%85%EB%A0%B9%EC%9D%98%20%EC%86%8C%EC%8A%A4%20%EC%BD%94%EB%93%9C%EB%A5%BC%20%EB%B3%B4%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
ping
내가 아는 한, grep
or 또는 같은 명령을 실행하면 ls
Linux 운영 체제는 해당 명령 이름을 찾기 위해 디렉터리를 검색합니다 /bin
. 또한 대부분의 Linux 명령이 C로 작성된다는 것도 알고 있습니다.
ping
실제 C에서 OR이 어떻게 ls
작성되는지 보고 싶었습니다 . 그런데 cat
파일을 사용 하면 cat /bin/ping
바이너리 형식이기 때문에 가비지 데이터를 뱉어냅니다.
그렇다면 C로 작성된 명령을 볼 수 있는 방법이 있습니까?
답변1
어떤 패키지가 명령을 제공하는지 아는 것이 도움이 됩니다. 예를 들어, 많은(전부는 아님!) Linux 배포판에서 이 ls
명령은 GNU 패키지에서 제공됩니다 coreutils
. 다음 링크를 통해 이러한 명령의 소스를 찾을 수 있습니다.coreutils 웹 페이지.
이 ping
명령은 패키지에서 제공됩니다 iputils
. 소스를 찾을 수 있습니다.여기.
대부분의 배포판은 어떤 패키지가 특정 파일을 소유하는지 확인하는 메커니즘을 제공합니다. 예를 들어 Ubuntu에서는 dpkg-query
아래와 같이 사용할 수 있습니다 .
$ dpkg-query -S /bin/ls
coreutils: /bin/ls
Red Hat/Fedora/CentOS/etc에 해당하는 명령은 다음과 같습니다.
$ rpm -qf /bin/ls
coreutils-8.32-33.fc35.x86_64
관심 있는 파일을 제공하는 패키지를 알고 있다면 일반적으로 배포판에서 제공하는 해당 소스 패키지를 찾아 소스 코드를 찾을 수 있습니다. 우분투의 경우 다음을 방문할 수 있습니다.https://packages.ubuntu.com/이름으로 패키지를 찾으면 iputils
다음과 같이 됩니다.여기, 패키지를 빌드하는 데 사용된 소스를 다운로드할 수 있는 링크를 찾을 수 있습니다.
Fedora 패키지의 경우 다음을 방문하세요.https://packages.fedoraproject.org/패키지를 검색해 보세요. 이 경우 파일을 읽어야 합니다 spec
(예:이것은 iputils에서 가져온 것입니다.) 출처를 어디서 찾을 수 있는지 알아보세요.
Ubuntu 또는 Fedora 이외의 시스템을 사용하는 경우 유사한 메커니즘을 사용할 수 있습니다. 대부분의 배포판은 이름별로 소스 패키지를 다운로드하기 위한 명령줄 도구도 제공합니다.
답변2
라고 말하면 cat /bin/ping
C 소스 코드에서 컴파일된 명령의 바이너리 코드를 보려고 하는 것입니다. 이 명령에 대한 C 소스 코드를 찾아야 합니다. 보다쉘 명령의 소스 코드를 읽는 방법은 무엇입니까?더 많은 정보를 알고 싶습니다.
답변3
Linux에서는 다음을 포함하여 바이너리 명령을 분석하는 몇 가지 방법이 있습니다.
- 파일, 파일 형식을 결정합니다.
- ldd는 공유 객체 종속성을 인쇄합니다.
- ltrace, 라이브러리 호출 추적기.
- Hexdump는 파일 내용을 ASCII, 10진수, 16진수 또는 8진수로 표시합니다.
- 문자열, 인쇄 파일의 인쇄 가능한 문자열입니다.
- readelf는 ELF 파일에 대한 정보를 표시합니다.
- objdump는 대상 파일의 정보를 표시합니다.
- strace는 시스템 호출과 신호를 추적합니다.
- nm, 개체 파일의 기호를 나열합니다.
- gdb, GNU 디버거.