ELF 는 실행 가능한 바이너리 또는 오브젝트 파일 등의 형식을 규정한 것입니다. ELF 파일은 ELF 헤더가 맨 앞에 위치하고, 프로그램 헤더 테이블과 섹션 헤더 테이블이 그 뒤에 위치한다. (사실 더 복잡한 구조지만 큰 구조가 그렇다는 이야기)

ELF 헤더는 파일이 ELF 포맷일 경우 파일 맨앞에 반드시 존재하며, readelf -h 명령어로 elf의 헤더를 볼 수 있습니다. 명령어 참~ 쉽죠? read elf 입니다. 기억하기 쉬워요. 파일 분석시 굉장히 많이 사용하는 명령어 입니다.

사용자 삽입 이미지

Entry point Address - 시작하는 가상주소를 나타낸다.



프로그램 헤더는 readelf -l '파일명' 으로 섹션 헤더는 readelf -S '파일명'으로 확인 가능하다.

사용자 삽입 이미지

shstrtab


위 그림에서 빨간색 네모로 쳐진 shstrtab 의 type 항목을 보면 String table 이라는 것을 알 수 있다. base address 는 0x00ff0c 크기는 0x0000c7 인 것을 알 수 있다. od --skip-bytes 0x00ff0c --read-bytes 0xc7 -t x1z -A x zip 이라고 입력하면 shstrtab 의 내용을 볼 수 있다.

심볼 테이블은 readelf -s 파일명으로 볼 수 있다.

배운 명령어
  • readelf -h (ELF 헤더 확인) 
  • readelf -l (Program 헤더 확인) 
  • readelf -S (Section 헤더 확인)
  • readelf -s (심볼 테이블 확인)
  • od --skip-bytes 0x00ff0c --read-bytes 0xc7 -t x1z -A x zip