2016-07-31 2 views
1

nasm을위한 간단한 라이브러리를 작성하면서 실제로 호출되거나 참조되지 않은 레이블이 여전히 바이너리에 포함되어 있음을 알게되었습니다.NASM으로 어셈블하기 참조 된 코드/데이터 블록 만 포함하기

nasm을 사용하여 빌드/컴파일/어셈블 할 때 사용하지 않는 레이블과 해당 코드를 오브젝트에 포함시키지 않으려면 어떻게해야합니까?

+0

'.label '을 사용하여 로컬 라벨을 만드십시오. YASM은 기본적으로 출력의 기호 테이블에 비전 역 레이블을 포함하지 않습니다. (디버그 정보를 출력하기 위해'-gdwarf2'를 사용하면 그것들을 포함합니다.)'strip' 이외의 일반 심볼이 심볼 테이블에서 사용되지 않도록 NASM으로 할 수있는 일이 있는지 확실하지 않습니다. –

+0

@PeterCordes 심볼 만이 아니라 심볼이 가리키는 코드가 포함되어 있습니다. 나는 이것을하기 위해 어떤 해킹 된 매크로에 의지해야 할지도 모르겠다.하지만 나는 그렇게하지 않을 것이다. – Fluffy

답변

2

이 기술은 이미 정적 라이브러리 형태로 존재합니다.

모든 분리 가능한 코드 + 데이터 그룹을 .o에두고 모든 해당 개체 (ar 사용)에서 정적 라이브러리 (.a)를 빌드하십시오.

이 정적 라이브러리와 연결하면 종속성을 충족시키는 데 필요한 객체 (.o 라이브러리 구성원) 만 자동으로 끌어옵니다. (그리고 AFAIK, 이것은 반복적으로 작동하여 다른 라이브러리 객체를 가져 와서 객체의 초기 세트에서 해결되지 않은 심볼을 만족시킵니다).

+0

아마도 참조 된 기호가 들어있는 오브젝트 파일 ('.o' 파일) 만 자동으로 가져 오게됩니다. –

+0

@RossRidge : 고마워. 나는 그것을 말하려고 의도했다. 그러나 편집 이후 did not는 알아 차리지 않았다! 빠른 검색에서 정확한 중복을 찾지 못했습니다. 정적 라이브러리를 만드는 방법 *에 대해 몇 가지 질문이 있지만 질문이 아직없는 라이브러리는 없습니다. TODO : 훌륭한 라이브러리 생성 응답 중 하나를 연결하십시오. –