2012-02-22 4 views
4

Linux에서 정적으로 링크 된 ELF 파일을 맨손으로 제거하려고합니다. 내가 실행하면 :ELF .notes 섹션이 실제로 필요합니까?

strip --strip-unneeded foo 

또는

strip --strip-all foo 

결과 파일은 여전히 ​​펑키 문자열의 전체 것으로 보인다 지방 .notes의 섹션이

.

.notes 섹션이 정말로 필요합니까? 아니면 --remove-section을 사용하여 강제로 안전하게 제거 할 수 있습니까?

도움 주셔서 감사합니다. strip 어떤 제거하고 얻을을 가정 아니다처럼

경험에서와 strip man 페이지보고에서

답변

5

, 그것은 보인다 필요하지 않은 모든 부분 문자열; 단지 기호. 맨 페이지 Quoth :

GNU strip discards all symbols from object files objfile. 

말했다되고 있다는 심지어 --strip-all없는 경험, strip에서, 같은 .symtab.strtab 등의 로딩을위한 불필요한 부분을 제거하고, 당신은 당신이 참고로, 제거 할 수 있습니다 원하는 섹션을 --remove-section으로 지정하십시오.

.notes 섹션의 예를 들어, 내 우분투 11.10 64 비트 상자에서 /bin/ls했다 다음 .note.ABI-tag 부와 .note.gnu.build-id 섹션을 포함

$ readelf -Wn /bin/ls 

Notes at offset 0x00000254 with length 0x00000020: 
    Owner     Data size Description 
    GNU     0x00000010 NT_GNU_ABI_TAG (ABI version tag) 
    OS: Linux, ABI: 2.6.15 

Notes at offset 0x00000274 with length 0x00000024: 
    Owner     Data size Description 
    GNU     0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) 
    Build ID: 3e6f3159144281f709c3c5ffd41e376f53b47952 

. 프로그램을로드 할 필요가없는 데이터가 포함되어 있지만 표준이 아니기 때문에 프로그램을 제대로 실행하는 데 strip이 필요하지 않은 것으로 알려져 있지 않습니다. ELF는 제거 할 수없는 추가 "알 수없는"섹션. 따라서 가상의 화이트리스트 (비참하게 실패 할 것입니다)를 사용하는 대신, 제거 할 수 있음을 알고있는 섹션의 블랙리스트를 사용합니다.

짧은 버전 :이 섹션은 표준이 아니며 다양한 용도로 사용할 수 있으므로 strip은 안전하게 제거 할 수 있는지 알 수 없습니다. 그러나 위에 나온 정보를 바탕으로, 만약 여러분이 만든 프로그램이라면 그것을 제거하는 것이 거의 확실합니다.

+0

감사합니다. Dan. 나 한테 의미가있어. – srking

+0

.note.gnu.build-id에 대한 일부 참조는 https://fedoraproject.org/wiki/Releases/FeatureBuildId이고 사람들이하는 일은 https://lkml.org/lkml/2011/12/입니다. 15/162 – pfalcon

+1

strip --remove-section = .note.gnu.build-id

관련 문제