ASLR이 적용되면 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등이 무작위 주소에 매핑되므로, 공격자가 이 영역들을 공격에 활용하기 어려워집니다.

하지만 지금 껏 문제를 풀다보면 다른 영역의 주소는 계속 바뀌었지만 main 함수의 주소는 매번 같았습니다.

이런 특징을 이용하여 공격자는 고정된 주소의 코드 가젯을 활용한 ROP를 수행할 수 있었습니다.

**Position-Independent Executable(PIE)**은 ASLR이 코드 영역에도 적용되게 해주는 기술입니다.

이 기술은 보안성 향상을 위해 도입된 것이 아니라서 엄밀하게는 보호 기법이 아닙니다.

그러나 실제로는 ASLR과 맞물려서 공격을 더욱 어렵게 만들었기에 여러 글이나 발표에서 보호 기법이라고 소개되기도 합니다.

PIC

리눅스에서 ELF는 실행 파일(Executable)과 공유 오브젝트(Shared Object, SO)로 두 가지가 존재합니다.

실행 파일은 addr처럼 일반적인 실행 파일이 해당하고, 공유 오브젝트는 libc.so와 같은 라이브러리 파일이 해당합니다.

공유 오브젝트는 기본적으로 재배치(Relocation)가 가능하도록 설계되어 있습니다.

재배치가 가능하다는 것은 메모리의 어느 주소에 적재되어도 코드의 의미가 훼손되지 않음을 의미하는데, 컴퓨터 과학에서는 이런 성질을 만족하는 코드를 **Position-Independent Code(PIC)**라고 부릅니다.