| 원저자 | 데니스 리치 (AT&T 벨 연구소) |
|---|---|
| 개발자 | 다양한 오픈 소스 및 상용 소프트웨어 개발자 |
| 발표일 | 1972년 6월 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이다.--strip-unneeded이다.--debug-local이다.--discard-all이다.--strip-all, LLVM에서는 --strip-all-gnu이다.다음과 같은 추가 기능도 있다.
--only-keep-debug).많은 옵션은 서로 모순되지 않는 경우 함께 사용할 수 있다(예: --strip-debug --discard-local).
글로벌 심볼 대 로컬 심볼, 재배치된 심볼 대 재배치되지 않은 심볼의 구분은 동적 라이브러리의 기능을 유지하는 데 중요하다.