์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

1. ๊ฐœ์š”2. ๊ตฌ์กฐ
2.1. ELF header2.2. Program Header Table2.3. .text2.4. .rodata2.5. .data2.6. Section Header Table

1. ๊ฐœ์š”[ํŽธ์ง‘]

Executable and Linkable Format, ๋˜๋Š” ELF. ELF๋Š” ์œ ๋‹‰์Šค ๊ณ„์—ด ์šด์˜์ฒด์ œ์˜ ์‹คํ–‰, ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ, ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋˜๋Š” ์ฝ”์–ด ๋คํ”„๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์ด๋‹ค. ๊ฐ„๋‹จํžˆ, ์‹คํ–‰ ํŒŒ์ผ์ด๋‹ค. ์›๋ž˜ ๋œป์€ Extensible Linking Format ์ด๋ผ๋Š” ๋œป์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค.

์‚ฌ์šฉํ•˜๋Š” ์šด์˜์ฒด์ œ๋Š” ์œ ๋‹‰์Šค, BSD, ์†”๋ผ๋ฆฌ์Šค, ๊ทธ๋ฆฌ๊ณ  ๋ฆฌ๋ˆ…์Šค๊ฐ€ ์žˆ๋‹ค. ์•„๋ฌด๋ฆฌ ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๋ฉง์ด๋ผํ•˜์—ฌ๋„, ์„œ๋กœ ํ˜ธํ™˜์ด ๋˜์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฆฌ๋ˆ…์Šค ํ”„๋กœ๊ทธ๋žจ์„ ์†”๋ผ๋ฆฌ์Šค์—์„œ ๋Œ๋ฆฌ๋ ค๊ณ  ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚˜์˜จ๋‹ค.

2. ๊ตฌ์กฐ[ํŽธ์ง‘]

ELF ํŒŒ์ผ์€ ์ด๋Ÿฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
ELF Header
Program header table
.text
.rodata
.data
Section header table

2.1. ELF header[ํŽธ์ง‘]

๋จผ์ €, ELF ํ•ด๋” ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์‹คํ–‰ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋งค์ง๋„˜๋ฒ„๋Š” .ELF (0x7F 0x45 0x4C 0x46).
ํŒŒ์ผ์ด ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์ธ์ง€, ์‹คํ–‰ ํŒŒ์ผ์ธ์ง€, ์•„๋‹ˆ๋ฉด ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์•Œ๋ ค์ฃผ๋Š” ๋ฐ์ดํ„ฐ๋‚˜, ELF ๋ฒ„์ „, ์–ด๋–ค ์šด์˜์ฒด์ œ์™€ ๋น„ํŠธ๋ฅผ ์œ„ํ•ด ์ปดํŒŒ์ผ๋œ๊ฑด์ง€์— ๊ด€ํ•ด ์ •๋ณด๊ฐ€ ์žˆ๋‹ค.
์˜คํ”„์…‹
๊ธธ์ด
๋œป
0x00
4
ํ—ค๋”์ด๋‹ค. 0x7F ๋‹ค์Œ์— ELF๋ผ๊ณ  ์ ํ˜€์žˆ๋‹ค. ํ‹€๋ฆฌ๋ฉด ์‹คํ–‰ ์•ˆ๋œ๋‹ค.
0x04
1
๋น„ํŠธ ์ •๋ณด์ด๋‹ค. 64 ๋น„ํŠธ(0x02)๋ฅผ ์œ„ํ•œ๊ฑด์ง€, ์•„๋‹ˆ๋ฉด 32๋น„ํŠธ (0x01)๋ฅผ ์œ„ํ•œ๊ฑด์ง€์— ๊ด€ํ•œ ๋ฐ”์ดํŠธ๋‹ค.
0x05
1
Endianness ๊ด€ํ•œ๊ฒƒ์ด๋‹ค. Little Endian (0x01)์ด๊ฑฐ๋‚˜, Big Endian (0x02) ์ด์—ฌ์•ผ ํ•œ๋‹ค.
0x06
1
๋ฒ„์ „์ด๋‹ค. ํ•ญ์ƒ 0x01์ด๋‹ค.
0x07
1
์–ด๋–ค ์šด์˜์ฒด์ œ๋ฅผ ์œ„ํ•˜์—ฌ ์ œ์ž‘๋˜์—ˆ๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ๋ฆฌ๋ˆ…์Šค๋Š” 0x03, FreeBSD๋Š” 0x06 ์ด๋‹ค. ์ž์ฃผ 0x00์œผ๋กœ ์„ค์ •๋˜๋Š”๋ฐ, ๋ฌธ์ œ ์—†๋‹ค.
0x08
1
ABI ๋ฒ„์ „. ๋ฆฌ๋ˆ…์Šค ์—์„œ๋Š” ํŠน๋ณ„ํ•œ ๋œป์€ ์—†๋Š”๋“ฏ ํ•˜๋‹ค.
0x09
7
์‚ฌ์šฉ ๋˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค.
0x10
2
ํ˜„ ํŒŒ์ผ์ด ์‹คํ–‰ (1), ์˜ค๋ธŒ์ ํŠธ (2), ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (3), ์•„๋‹ˆ๋ฉด ์ฝ”์–ด (4) ์ธ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.
0x12
2
์•„ํ‚คํ…์ณ. x86์€ 0x03, x86-64๋Š” 0x3E, SPARC์€ 0x02์ด๋‹ค.
0x14
4
ELF ๋ฒ„์ „. 0x01์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.
0x18
4, 8 [1]
์–ด๋””์„œ ๋ถ€ํ„ฐ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š”์ง€์— ๊ด€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ํฌ์ธํŠธ.
0x1C, 0x20
4, 8
ํ”„๋กœ๊ทธ๋žจ ํ—ค๋”๊ฐ€ ์–ด๋””์„œ ์‹œ์ž‘ํ•ด์•ผํ•˜๋Š”์ง€์— ๊ด€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ํฌ์ธํŠธ.
0x20, 0x28
4, 8
์„น์…˜ ํ•ด๋”๊ฐ€ ์–ด๋””์„œ ์‹œ์ž‘ํ•ด์•ผํ•˜๋Š”์ง€์— ๊ด€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ํฌ์ธํŠธ.
0x24, 0x30
4
์ด ๋ถ€๋ถ„์€ ์–ด๋–ค ์•„ํ‚คํ…์ณ์ด๋ƒ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.
0x28, 0x34
2
ํ˜„ ํ•ด๋”์˜ ํฌ๊ธฐ. 32 ๋น„ํŠธ์ด๋ฉด 52, 64๋น„ํŠธ์ด๋ฉด 64 (16์ง„์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.)
0x2A, 0x36
2
ํ”„๋กœ๊ทธ๋žจ ํ•ด๋” ํฌ๊ธฐ.
0x2C, 0x38
2
ํ”„๋กœ๊ทธ๋žจ ํ•ด๋” ํ…Œ์ด๋ธ” ์—”ํŠธ๋ฆฌ ์ˆ˜.
0x2E, 0x3A
2
์„น์…˜ ํ•ด๋” ํ…Œ์ด๋ธ” ํฌ๊ธฐ.
0x30, 0x3C
2
์„น์…˜ ํ•ด๋” ํ…Œ์ด๋ธ” ์—”ํŠธ๋ฆฌ ์ˆ˜.
0x32, 0x3E
2
์„น์…˜ ์ด๋ฆ„๋“ค์ด ์žˆ๋Š” ์„น์…˜ ํ•ด๋” ํ…Œ์ด๋ธ” ์—”ํŠธ๋ฆฌ ์ธ๋ฑ์Šค.

2.2. Program Header Table[ํŽธ์ง‘]

ํ”„๋กœ๊ทธ๋žจ ํ•ด๋” ํ…Œ์ด๋ธ”์ด๋‹ค.

2.3. .text[ํŽธ์ง‘]

์ด๊ณณ์— ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค. ์ฃผ๋กœ, push rax, mov [esp - 4], rdi, int 0x80๊ฐ™์€ ๋ช…๋ น์ด ์žˆ๋‹ค.
๋ฌผ๋ก , ๋ฐ”์ด๋„ˆ๋ฆฌ์ด๋‹ค (...)

2.4. .rodata[ํŽธ์ง‘]

Read-only Data segment. ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ๋ถ€๋ถ„์ด๋‹ค.
char s[] = "hello world"; ์ฃผ๋กœ, ์ด๋Ÿฐ ์ฝ”๋“œ๊ฐ€ ์ด ๋ถ€๋ถ„์— ๋“ค์–ด๊ฐ„๋‹ค.
์ฃผ๋กœ, static์ด๋‚˜, const ๊ฐ’๋“ค์ด ์ด๊ณณ์œผ๋กœ ์˜จ๋‹ค.

2.5. .data[ํŽธ์ง‘]

์ด๊ณณ์—๋Š” ๋ฐ์ดํ„ฐ๋“ค์ด ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, Hello, World! ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด, Hello, World! ํ•˜๋Š” ๋ฌธ์ž์—ด์ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.
๋ณดํ†ต .text์˜ ๋ช…๋ น์–ด๊ฐ€ ์ด ๋ฌธ์ž์—ด์„ ๋ถˆ๋Ÿฌ ์˜จ๋‹ค.
.rodata์™€์˜ ์ฐจ์ด์ ์€, ์ด ๋ถ€๋ถ„์€ ์ฝ๊ณ  ์“ธ์ˆ˜์žˆ๋‹ค.

2.6. Section Header Table[ํŽธ์ง‘]

[1] 32 ๋น„ํŠธ์ผ๊ฒฝ์šฐ 4์ด๊ณ , 64๋น„ํŠธ์ด๋ฉด 8์ด๋‹ค.