Strip

다른 뜻에 대해서는 스트립 문서를 참고하십시오.
strip
원저자데니스 리치
(AT&T 벨 연구소)
개발자다양한 오픈 소스 및 상용 소프트웨어 개발자
발표일1972년 6월 12일(54년 전)(1972-06-12)
프로그래밍 언어C
운영 체제유닉스, 유닉스 계열, 플랜 9, 마이크로소프트 윈도우
플랫폼교차 플랫폼
종류명령어
라이선스플랜 9: MIT 허가서

strip은 이진 실행 컴퓨터 프로그램 및 오브젝트 파일에서 실행에 필요하지 않은 정보를 제거하기 위한 셸 명령어이며, – 일반적으로 디버깅 데이터, 심볼 테이블, 재배치 정보 및 기타 메타데이터를 포함한다. 결과로 생성된 파일은 더 작은 파일 크기를 갖는다. 이를 '스트립된 바이너리(stripped binary)'라고도 부른다.

strip을 사용하면 실행 파일의 역공학을 더 어렵게 만들어 보안을 강화할 수 있다. 심볼 및 디버깅 정보가 없으면 바이너리의 프로그램 분석이 복잡해지기 때문이다.

strip의 효과는 동일한 과정을 수행하는 컴파일러나 링커를 통해서도 얻을 수 있다. 예를 들어, GNU C 컴파일러(gcc)에서는 -s 옵션을 통해 수행된다.

strip(옵션 없음)은 X/Open Portability Guide Issue 2(1987) 이후 POSIX 표준에 포함되었다. 이 명령어는 유닉스, 플랜 9 및 유닉스 계열 시스템에서 사용할 수 있다. GNU 프로젝트는 GNU 바이너리 유틸리티 패키지에 이 구현을 포함하고 있다. 이 명령어는 윈도우를 포함한 다른 운영체제에도 구현되어 있다.

단계

POSIX는 strip의 동작을 "파일 피연산자가 지정하는 제거 가능한 파일에서 구현자가 실행에 불필요하다고 간주하는 정보를 제거"하는 것으로 정의하며, 이는 의도적으로 모호하게 작성되어 있다. 이러한 모호함을 해결하기 위해, 일반적인 strip 구현(FreeBSD에서 사용하는 LLVM과 리눅스에서 사용하는 GNU 바이너리 유틸리티)은 다음과 같은 옵션을 제공한다.

다음과 같은 추가 기능도 있다.

많은 옵션은 서로 모순되지 않는 경우 함께 사용할 수 있다(예: --strip-debug --discard-local).

글로벌 심볼 대 로컬 심볼, 재배치된 심볼 대 재배치되지 않은 심볼의 구분은 동적 라이브러리의 기능을 유지하는 데 중요하다.

같이 보기

각주

  1. ↑ “Linux Strip Command” (영어). 《www.computerhope.com》. 2024년 9월 13일에 원본 문서에서 보존된 문서. 2024년 10월 1일에 확인함.
  2. 1 2 “What is the difference between "gcc -s" and a "strip" command?” (영어). 《Stack Overflow》. 2024년 9월 25일에 원본 문서에서 보존된 문서. 2024년 10월 1일에 확인함.
  3. 1 2 strip(CU) – 리눅스 매뉴얼 페이지
  4. ↑ “llvm-strip - object stripping tool — LLVM 24.0.0git documentation”. 《llvm.org》.
  5. ↑ strip(1) – 리눅스 사용자 매뉴얼 – User Commands