# HN 공개: 프로그램의 일부를 오브젝트 파일로 내보내는 Ghidra 확장 프로그램

> Clean Markdown view of GeekNews topic #16437. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16437](https://news.hada.io/topic?id=16437)
- GeekNews Markdown: [https://news.hada.io/topic/16437.md](https://news.hada.io/topic/16437.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-08-24T09:49:39+09:00
- Updated: 2024-08-24T09:49:39+09:00
- Original source: [github.com/boricj](https://github.com/boricj/ghidra-delinker-extension)
- Points: 1
- Comments: 0

## Topic Body

### Ghidra용 오브젝트 파일 익스포터 확장

이 Ghidra 확장은 프로그램의 일부를 오브젝트 파일로 내보낼 수 있게 해줌. 이 오브젝트 파일들은 유효한 메타데이터(심볼, 재배치 테이블 등)를 가지고 있어 도구 체인에 의해 직접 재사용될 수 있음.

#### 사용 사례
- **고급 바이너리 패칭**: 원본과 수정된 부분을 수작업 대신 링커를 활용해 결합
- **소프트웨어 포팅**: 시스템 독립적인 코드를 프로그램에서 분리하고 나머지를 교체
- **파일 형식 변환**: 프로그램이나 오브젝트 파일을 다른 파일 형식으로 변환
- **라이브러리 생성**: 프로그램의 일부를 추출하여 다른 컨텍스트에서 재사용
- **디컴파일 프로젝트**: 프로그램을 여러 오브젝트 파일로 분할하고 재구현

#### 지원되는 명령어 집합 아키텍처 및 오브젝트 파일 형식
- **x86**: COFF(지원), ELF(지원)
- **MIPS**: COFF(미지원), ELF(지원)

#### 빌드 (CLI)
- 이 저장소를 클론
- `GHIDRA_INSTALL_DIR` 환경 변수를 Ghidra 설치 디렉토리로 설정
- `gradle buildExtension` 명령 실행
- Ghidra 확장 아카이브가 `dist/` 디렉토리에 생성됨

#### 설치
- 릴리스 페이지에서 확장을 다운로드하거나 로컬에서 빌드
- Ghidra 인스턴스에서 `File > Install Extensions…`로 확장 설치
- CodeBrowser 창에서 `File > Configure`를 통해 `RelocationTableSynthesizedPlugin` 플러그인 활성화

#### 사용법
1. Listing 뷰에서 주소 집합 선택
2. `Relocation table synthesizer` 분석기 실행 (원샷 모드에서 사용 가능)
3. `File > Export Program…`을 통해 재배치 가능한 오브젝트 파일 익스포터 호출
4. `Window > Relocation table(synthesized)`에서 재구성된 재배치 테이블 확인 가능

- ⚠️ _Relocation table synthesizer_ 분석기는 완전히 채워진 Ghidra 데이터베이스(정확히 선언된 심볼, 데이터 타입 및 참조)를 필요로 함. **부정확하거나 누락된 정보는 분석 중에 잘못된 또는 발견되지 않은 재배치를 초래할 수 있음**
- ⚠️ 오브젝트 파일 익스포터는 _Relocation table synthesizer_ 분석기의 결과에 의존함. **오브젝트 파일을 내보내기 전에 이 분석기를 실행하여 재배치 테이블 내용이 최신 상태인지 확인**

#### 작동 원리
오브젝트 파일은 세 부분으로 구성됨:
- 재배치 가능한 섹션 바이트
- 심볼 테이블
- 재배치 테이블

링커가 여러 오브젝트 파일에서 실행 파일을 생성할 때:
- 섹션을 메모리에 배치
- 가상 주소 공간에서 심볼의 주소를 계산
- 섹션 바이트에 심볼의 최종 주소를 기반으로 재배치를 적용

일반적으로 이 과정 후 재배치 테이블은 폐기되며, 디버깅 심볼이 유지되지 않는 한 심볼 테이블도 폐기됨. 그러나 신중한 분석을 통해 이 데이터를 재생성할 수 있으며, 이를 통해 프로그램을 다시 오브젝트 파일로 _delink_할 수 있음.

### GN⁺의 정리
- 이 Ghidra 확장은 프로그램의 일부를 오브젝트 파일로 내보낼 수 있게 해줌.
- 고급 바이너리 패칭, 소프트웨어 포팅, 파일 형식 변환 등 다양한 사용 사례가 있음.
- 정확한 데이터베이스가 필요하며, 분석기 실행 후 오브젝트 파일을 내보내는 것이 중요함.
- 비슷한 기능을 제공하는 프로젝트로는 IDA Pro와 같은 디컴파일러가 있음.

## Comments



_No public comments on this page._
