ELF파일의 실행파일 해석및 도식화 (16page)
본 자료는 5페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
해당 자료는 5페이지 까지만 미리보기를 제공합니다.
5페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

ELF파일의 실행파일 해석및 도식화 (16page)에 대한 보고서 자료입니다.

목차

Ⅰ. 과제개요

Ⅱ. 설계

Ⅲ. 구현

Ⅳ. 테스트 프로그램의 구성 및 테스트의 주안점

Ⅴ. 테스트 및 결과 - 도식화

Ⅵ. 소스코드

본문내용

에 올려진다.
섹션
- 기계어나 심볼 테이블과 같이 아주 구체적인 정보를 포함하는 파일의 작은 조각
프로그램 헤더 테이블
- 세그먼트에 대한 정보와 메모리에 올리는 방법을 기술
- 프로그램 헤더 테이블에 있는 모든 항목은 동일한 고정 크기를 유지 - 프로그램 헤더 크기(e_phentsize)
- 프로그램 헤더 테이블에서 항목 크기를 정의 - 프로그램 헤더 숫자(e_phnum)
- 프로그램 헤더 테이블에서 항목 개수를 정의
ELF 파일구조
elf는 Unix System Lab.에서 ABI(Application Binary Interface)의 일부로서 개발되어 발표된 것으로, TIS(Tool Interface Standards) 위원회에서 표준화한 32-bit Inter Architecture 환경에서 동작하는 이식 가능한 목적 파일 형식이며 심볼 정보를 이용하여 디버깅도 가능하다.
AXF(ARM eXtended Format) : axf 파일은 elf파일과 매우 유사한 구조를 가지는 arm사에서 사용하는 디버깅 정보를 포함하는 파일 형식이다.
[그림5.2] Code Segment
// 각 Section의 의미는 13page에 모두 한꺼번에 정리하였다.
[그림5.2] Data Segment
[그림5.3] Shared Library
ld-2.7.so
- 링커 자체이며 공유 라이브러리를 동적으로 링크하는 모든 실행 파일은 공유 라이브러리 링커를 가장 먼저 메모리에 적재한다.
- 공유 라이브러리를 하나 이상 링크하는 실행 파일을 생성하면 링커 역시 묵시적으로 실행 파일에 링크된다.
- 링크된 공유 라이브러리에서 모든 외부 심볼을 결정해야 하므로 메모리에 가장먼저 사상되어야 한다.
/* 이 Chapter에서 도식화 한 모든 그림들은
* Ⅳ. 테스트 프로그램의 구성 및 주안점에 참고 된 스크린샷에 나오는
* objdump와 readelf 명령어를 통해 얻은
* 가상메모리 주소를 실제로 계산하여 그렸다.
* 실제로 비교해보면 이론적으로는 이어져 있는 것처럼 보이지만,
* 가상 메모리 주소 공간에서는 이어져있지 않은(미확인된,)
* 공간이 많다는 것을 알 수 있다.
*/
[ 각 Section 의미 ]
Section Name
기능
0
.interp
프로그램 해석기의 경로 이름을 지닌 섹션.
1
.note.ABI-tag
ABI 세부 정보를 담음
2
.gun.hash
라이브러리를 링킹할 때 해당 라이브러리의 심볼과 주소를 담고 있는 hash table
3
.dynsym
Dynamic Linking Symbol Table을 지닌다
4
.dynstr
동적 연결에 필요한 문자열을 지닌다.
5
.gnu.version
심볼 버젼 테이블을 담은 테이블
6
.gnu.version_r
버젼 필수사항을 포함한 심볼
7
.rel.dyn
dyn에 대한 재배정 정보를 담은 섹션.
8
.rel.plt
plt에 대한 재배정 정보를 담은 섹션.
9
.init
프로세스를 초기화 시키는 코드와 관련된 실행 가능한 명령어를 지닌 섹션.
10
.plt
절차적 연결 테이블을 지닌 섹션.
11
.text
프로그램의 text 혹은 실행가능한 명령어를 담은 섹션
12
.fini
프로세스 종료 코드와 관련된 실행가능한 명령어들을 지니고 있는 섹션.
13
.rodata
프로세스 이미지에서 쓰기 불가능한 읽기 전용 데이터를 담은 섹션.
14
.eh_frame
예외처리시 프레임을 풀어내는 필수적인 정보를 지닌 섹션.
15
.ctors
전역 함수 포인터 생성자의 리스트를 담은 섹션
16
.dtors
전역 함수 포인터 파괴자의 리스트를 담은 섹션
17
.jcr
컴파일된 자바 클래스를 등록하는데 필요한 정보를 포함.
18
.dynamic
동적 연결 정보를 지닌 섹션.
19
.got
전역 오프셋 테이블을 지닌 섹션.
20
.got.plt
전역 오프셋 테이블의 읽기 전용 부분을 담은 섹션.
21
.data
초기화 된 데이터 섹션
22
.bss
초기화 되지 않은 데이터 섹션.
23
.comment
version control 정보를 가지고 있는 섹션
24
.debug
디버깅 심볼에 대한 정보를 지닌 섹션.
.hash
해쉬 테이블을 지닌 섹션.
.line
디버깅 심볼에 관련된 줄 번호 정보를 지닌 섹션.
.note
"Note Section"이 표현하는 형식과 정보를 지닌 섹션.
.relname
재배정 정보를 담은 섹션.
.shstrtab
섹션의 이름을 지닌 섹션.
.strtab
심볼 테이블 엔트리와 관련된 이름들을 표현한 문자열들을 담은 섹션.
.symtab
심볼 테이블을 담은 섹션.
▲ [표5.1] 각 Section 기능
Ⅵ. 소스코드
// 주#include
#include
void ELF_print(char *msg);
char s1[40] = "Hi! This is the first string\n";// global valuable
void ELF_print(char *msg){
printf(msg);
}
int main(int argc, char** argv){
char sys_cmd[128];// local valuable
char s2[40] = "Hi! This is the second string\n";
char *s3 = malloc(sizeof(char)*40);// heap영역 잡아줌
sprintf(sys_cmd, "cat /proc/%d/maps", getpid());
/* getpid()는 현재의 프로세스의 아이디를 얻는 함수이다.
* 따라서 cat /proc/ 프로세스 아이디 /maps를 실행하게 되면
* 해당 프로세스의 메모리 구성의 결과가 문자열로 생성되게 된다.
* 여기서 출력은 cat이 그 역할을 담당한다.
*/
system(sys_cmd);
/* 문자열들이 sys_cmd로 들어가면,
* system()함수에서는 그것을 실행시켜 준다.
*/
ELF_print(s1);
ELF_print(s2);
return 0;
}
어진 코드에서 변경된 부분은 빨간색으로 표시하였다.
// 또한 설명이 필요한 코드 부분은 파란색으로 표시하여 주석을 달았다.

키워드

ELF,   ELF파일,   도식화,   OS,   운영체제,   리눅스
  • 가격2,000
  • 페이지수16페이지
  • 등록일2009.04.04
  • 저작시기2008.9
  • 파일형식한글(hwp)
  • 자료번호#527903
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니