4번독수리의 둥지

Position Independent Executable 본문

Go

Position Independent Executable

4번독수리 2023. 1. 18. 15:08

https://ko.wikipedia.org/wiki/위치_독립_코드

위치 독립 코드(PIC: position-independent code) 또는 위치 독립 실행 파일(PIE: position-independent executable)은 메모리의 어딘가에 위치한 기계어 코드의 몸체로서 절대 주소와 관계 없이 적절히 실행된다. PIC는 주로 공유 라이브러리에 사용돼서, 같은 라이브러리 코드도 (사용되는 메모리 공간에 겹쳐써지지 않으면서) 각 프로그램의 주소 공간에 로드될 수 있게 된다. PIC는 또한 메모리 관리 장치(MMU)가 없는 오래된 컴퓨터 시스템에서도 사용되며, 운영 체제가 애플리케이션을 단일 주소 공간 내에서 서로 떨어져 있게 해줄 수 있다.
위치 독립 코드는 수정 없이 어느 메모리 주소에서도 실행될 수 있다. 이것은 재배치 가능 코드와의 다른 점인데, 재배치 가능 코드는 링커 또는 로더가 실행 전에 프로그램을 수정해서 단지 특정한 메모리 위치에서만 실행된다. 위치 독립 코드를 생성하는 것은 종종 컴파일러의 기본 옵션이지만, 컴파일러는 절대 주소의 사용을 불허하는 것 같이 몇몇 언어들에서의 사용을 제한한다(위치 독립 코드는 상대 주소를 사용해야 한다). 비록 현대 프로세서들은 실질적으로 무시해도 될 만한 차이점을 보이지만, 직접적으로 특정한 메모리 주소들을 참조하는 명령어들은 동등한 상대 주소 명령어들보다 가끔은 빨리 실행되는 특징을 갖는다.
위치 독립 실행 파일(PIE: Position-independent executables)은 전체가 위치 독립 코드로 이루어진 실행 가능한 바이너리이다. 몇몇 시스템들이 오직 PIC 실행 파일만 실행할 수 있다는 것 외에도 이것들이 사용되는 다른 이유들이 존재한다. PIE 바이너리는 몇몇 보안 중심 리눅스 배포판들에서 PaX나 Exec Shield가 주소 공간 배치 난수화를 사용할 수 있도록 해서, (Return-to-libc 공격 같이 바이너리에서 실행 가능한 코드의 오프셋을 아는 것에 의지하는) 익스플로잇을 사용하는 공격 동안에 공격자가 보안 공격 시에 어디에 실행 가능한 코드가 존재하는지를 알 수 없게 한다.
go build -buildmode=pie