<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
		<id>https://tcatmon.com/w/index.php?action=history&amp;feed=atom&amp;title=ELF</id>
		<title>ELF - 편집 역사</title>
		<link rel="self" type="application/atom+xml" href="https://tcatmon.com/w/index.php?action=history&amp;feed=atom&amp;title=ELF"/>
		<link rel="alternate" type="text/html" href="https://tcatmon.com/w/index.php?title=ELF&amp;action=history"/>
		<updated>2026-07-28T01:09:05Z</updated>
		<subtitle>이 문서의 편집 역사</subtitle>
		<generator>MediaWiki 1.28.0</generator>

	<entry>
		<id>https://tcatmon.com/w/index.php?title=ELF&amp;diff=9407&amp;oldid=prev</id>
		<title>2017년 1월 18일 (수) 02:26에 Maintenance script님의 편집</title>
		<link rel="alternate" type="text/html" href="https://tcatmon.com/w/index.php?title=ELF&amp;diff=9407&amp;oldid=prev"/>
				<updated>2017-01-18T02:26:50Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[include(틀:다른 뜻1,other1=판타지의 엘프와 관련된 정보,rd1=엘프)]&lt;br /&gt;
&lt;br /&gt;
[목차]&lt;br /&gt;
||혹시 금융상품 ELF에 대해 궁금하신 분은 [[주가연계증권]](ELS)을 읽어보세요.||&lt;br /&gt;
== 개요 ==&lt;br /&gt;
Executable and Linkable Format, 또는 ELF. ELF는 [[유닉스]] 계열 [[운영체제]]의 실행, 오브젝트 파일, 공유 라이브러리, 또는 코어 덤프를 할 수 있게 하는 바이너리 파일이다. 간단히, 실행 파일이다. 원래 뜻은 Extensible Linking Format 이라는 뜻을 가지고 있었다.&lt;br /&gt;
&lt;br /&gt;
사용하는 운영체제는 유닉스, BSD, 솔라리스, 그리고 리눅스가 있다. 아무리 같은 바이너리 포멧이라하여도, '''서로 호환이 되지 않는다.''' 예를 들어, 리눅스 프로그램을 솔라리스에서 돌리려고 하면 에러가 나온다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 구조 ==&lt;br /&gt;
ELF 파일은 이런 구조를 가지고 있다.&lt;br /&gt;
|| ELF Header ||&lt;br /&gt;
|| Program header table ||&lt;br /&gt;
|| .text ||&lt;br /&gt;
|| .rodata ||&lt;br /&gt;
|| .data ||&lt;br /&gt;
|| Section header table ||&lt;br /&gt;
&lt;br /&gt;
=== ELF header ===&lt;br /&gt;
먼저, ELF 해더 같은 경우는 실행 파일에 대한 정보를 가지고 있다. 매직넘버는 .ELF (0x7F 0x45 0x4C 0x46).&lt;br /&gt;
파일이 오브젝트 파일인지, 실행 파일인지, 아니면 공유 라이브러리 알려주는 데이터나, ELF 버전, 어떤 운영체제와 비트를 위해 컴파일된건지에 관해 정보가 있다.&lt;br /&gt;
&lt;br /&gt;
|| 오프셋 || 길이 || 뜻 ||&lt;br /&gt;
|| 0x00 || 4 || 해더이다. 0x7F다음에 ELF라고 적혀있다. 틀리면 실행 안된다. ||&lt;br /&gt;
|| 0x04 || 1 || 비트 정보이다. 64 비트(0x02)를 위한건지, 아니면 32비트 (0x01)를 위한건지에 관한 바이트다. ||&lt;br /&gt;
|| 0x05 || 1 || Endianness 관한것이다. Little Endian (0x01)이거나, Big Endian (0x02) 이여야 한다. ||&lt;br /&gt;
|| 0x06 || 1 || 버전이다. 항상 0x01이다. ||&lt;br /&gt;
|| 0x07 || 1 || 어떤 [[운영체제]]를 위하여 제작되었는지를 결정한다. [[리눅스]]는 0x03, [[FreeBSD]]는 0x06 이다. 자주 0x00으로 설정되는데, 문제 없다. ||&lt;br /&gt;
|| 0x08 || 1 || ABI 버전. [[리눅스]] 에서는 특별한 뜻은 없는듯 하다. ||&lt;br /&gt;
|| 0x09 || 7 || 사용 되고 있지 않다. ||&lt;br /&gt;
|| 0x10 || 2 || 현 파일이 실행 (1), 오브젝트 (2), 공유 라이브러리 (3), 아니면 코어 (4) 인지 결정한다. ||&lt;br /&gt;
|| 0x12 || 2 || 아키텍쳐. x86은 0x03, x86-64는 0x3E, SPARC은 0x02이다. ||&lt;br /&gt;
|| 0x14 || 4 || ELF 버전. 0x01으로 설정되어 있다. ||&lt;br /&gt;
|| 0x18 || 4, 8 [* 32 비트일경우 4이고, 64비트이면 8이다.] || 어디서 부터 실행되어야 하는지에 관한 메모리 주소 포인트. ||&lt;br /&gt;
|| 0x1C, 0x20 || 4, 8 || 프로그램 헤더가 어디서 시작해야하는지에 관한 메모리 주소 포인트. ||&lt;br /&gt;
|| 0x20, 0x28 || 4, 8 || 섹션 해더가 어디서 시작해야하는지에 관한 메모리 주소 포인트. ||&lt;br /&gt;
|| 0x24, 0x30 || 4 || 이 부분은 어떤 아키텍쳐이냐에 따라 다르다. ||&lt;br /&gt;
|| 0x28, 0x34 || 2 || 현 해더의 크기. 32 비트이면 52, 64비트이면 64 (16진수가 아니다.) ||&lt;br /&gt;
|| 0x2A, 0x36 || 2 || 프로그램 해더 크기. ||&lt;br /&gt;
|| 0x2C, 0x38 || 2 || 프로그램 해더 테이블 엔트리 수. ||&lt;br /&gt;
|| 0x2E, 0x3A || 2 || 섹션 해더 테이블 크기. ||&lt;br /&gt;
|| 0x30, 0x3C || 2 || 섹션 해더 테이블 엔트리 수. ||&lt;br /&gt;
|| 0x32, 0x3E || 2 || 섹션 이름들이 있는 섹션 해더 테이블 엔트리 인덱스. ||&lt;br /&gt;
&lt;br /&gt;
=== Program Header Table ===&lt;br /&gt;
프로그램 해더 테이블이다.&lt;br /&gt;
&lt;br /&gt;
=== .text ===&lt;br /&gt;
이곳에 코드가 들어간다. 주로, push rax, mov {{{[esp - 4]}}}, rdi, int 0x80같은 명령이 있다.&lt;br /&gt;
물론, 바이너리이다 (...)&lt;br /&gt;
&lt;br /&gt;
=== .rodata ===&lt;br /&gt;
Read-only Data segment. 읽기만 가능한 데이터 부분이다.&lt;br /&gt;
{{{char s[] = &amp;quot;hello world&amp;quot;;}}} 주로, 이런 코드가 이 부분에 들어간다.&lt;br /&gt;
주로, static이나, const 값들이 이곳으로 온다.&lt;br /&gt;
&lt;br /&gt;
=== .data ===&lt;br /&gt;
이곳에는 데이터들이 있다. &lt;br /&gt;
예를 들어, Hello, World! 프로그램이라면, Hello, World! 하는 문자열이 저장되어 있다.&lt;br /&gt;
보통 .text의 명령어가 이 문자열을 불러 온다.&lt;br /&gt;
.rodata와의 차이점은, 이 부분은 읽고 '''쓸수'''있다.&lt;br /&gt;
&lt;br /&gt;
=== Section Header Table ===&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>	</entry>

	</feed>