유닉스에서 벗겨지지 않은 실행 파일은 무엇입니까?


37

에서 남자 파일 ,

EXAMPLES
   $ file file.c file /dev/{wd0a,hda}
   file.c:   C program text
   file:     ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
             dynamically linked (uses shared libs), stripped
   /dev/wd0a: block special (0/0)
   /dev/hda: block special (3/0)
   $ file -s /dev/wd0{b,d}
   /dev/wd0b: data
   /dev/wd0d: x86 boot sector
   $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
   /dev/hda:   x86 boot sector
   /dev/hda1:  Linux/i386 ext2 filesystem
   /dev/hda2:  x86 boot sector
   /dev/hda3:  x86 boot sector, extended partition table
   /dev/hda4:  Linux/i386 ext2 filesystem
   /dev/hda5:  Linux/i386 swap file
   /dev/hda6:  Linux/i386 swap file
   /dev/hda7:  Linux/i386 swap file
   /dev/hda8:  Linux/i386 swap file
   /dev/hda9:  empty
   /dev/hda10: empty

   $ file -i file.c file /dev/{wd0a,hda}
   file.c:      text/x-c
   file:        application/x-executable, dynamically linked (uses shared libs),
   not stripped
   /dev/hda:    application/x-not-regular-file
   /dev/wd0a:   application/x-not-regular-file

실행 가능 제거는 무엇을 의미합니까?

일부 실행 파일이 제거 된 반면 다른 실행 파일은 제거되지 않은 이유는 무엇입니까?

답변:


50

gcc의 -g 플래그를 사용하여 실행 파일을 컴파일하면 디버깅 정보가 포함됩니다. 즉, 각 명령어마다 소스 코드의 어느 라인이 소스 코드를 생성했는지, 소스 코드의 변수 이름이 유지되며 런타임시 일치하는 메모리와 연관 될 수 있습니다. 스트립은이 디버깅 정보 및 기타 포함 된 데이터를 제거 할 수 있습니다. 실행 파일의 크기를 줄이기 위해 실행에 필요하지 않은 실행 파일.


10
strip (1) 맨 페이지 도 참조하십시오 . 일반적으로 strip은 모든 심볼이 꼭 필요한 것은 아니기 때문에 제거합니다. 그것은 디버깅 정보도 제거하지만 심볼은 큰 것입니다
Michael Mrozek

3
이 개념은 대부분의 실행 가능한 형식으로 일반화되며 gcc 또는 유닉스에 국한되지 않습니다.
Gilles 'SO- 악마 그만해'11

4
40MB의 실행 파일이 제거되었을 때 6MB로 줄어 들었습니다. 그래서 디버깅 데이터가 차지하는 공간에 대한 아이디어를 얻습니다.
Nathan Osman

따라서 prog.e빌드 된 실행 파일 을 제거하면 gcc -g -o prog.e prog.c컴파일과 동등한 성능을 얻을 수 gcc -O0 -o prog.e prog.c있습니까?
ysap

1
@ysap 아니오, 최적화 (-O)와는 아무런 관련이 없습니다. 파일이 제거되었는지 여부에 관계없이 어셈블리 코드는 동일하게 유지됩니다. 디버깅 정보가없고 ( "-g"의 손실에 대해 맞습니다) 모든 기호 (함수 이름, 전역 변수 이름 ...)가 없는 실행 파일을 얻습니다 . "gcc -s -o prog.e prog.c"와 같습니다. 프로그램이 실행될 때 기호는 아무런 차이가 없습니다. 그러나 예를 들어 독점 소프트웨어에는 항상 기호가 제거되어 있습니다. 그렇지 않으면 모든 사람이 원래 기능 이름과 위치를 알 수 있기 때문입니다.
Pikrass
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.