56
Mi Jung Choi [email protected] Dept. of Computer Science 7 7 장 장장장 장장 장장 장 장장장 장장 장장

7 장 링커와 로더 설계

Embed Size (px)

DESCRIPTION

7 장 링커와 로더 설계. 로더의 종류와 형태 링커와 로더가 필요로하는 정보 원시프로그램과 번역결과 절대상수와 재배치상수 링크를 위한 어셈블링 외부기호와 재배치 링크의 형태. 제 7 장 학습내용. 패스 1 과 패스 2 의 수행과정 패스 1 과 패스 2 의 자료구조 기억장소에 적재된 후의 형태 패스 1 과 패스 2 의 알고리즘. 제 7 장 학습내용. 컴파일 즉시로더 절대로더 재배치로더 링킹로더 동적로더. 로더의 종류와 형태. 재배치링크 및 적재를 한꺼번에 수행 - PowerPoint PPT Presentation

Citation preview

Page 1: 7 장 링커와 로더 설계

Mi Jung [email protected]

Dept. of Computer Science

77 장 링커와 로더 설계장 링커와 로더 설계

Page 2: 7 장 링커와 로더 설계

시스템 프로그래밍

제 제 7 7 장 학습내용장 학습내용

• 로더의 종류와 형태

• 링커와 로더가 필요로하는 정보

• 원시프로그램과 번역결과

• 절대상수와 재배치상수

• 링크를 위한 어셈블링

• 외부기호와 재배치 링크의 형태

Page 2

Page 3: 7 장 링커와 로더 설계

시스템 프로그래밍

제 제 7 7 장 학습내용장 학습내용

• 패스 1 과 패스 2 의 수행과정

• 패스 1 과 패스 2 의 자료구조

• 기억장소에 적재된 후의 형태

• 패스 1 과 패스 2 의 알고리즘

Page 3

Page 4: 7 장 링커와 로더 설계

시스템 프로그래밍

로더의 종류와 형태로더의 종류와 형태

• 컴파일 즉시로더

• 절대로더

• 재배치로더

• 링킹로더

• 동적로더

Page 4

Page 5: 7 장 링커와 로더 설계

시스템 프로그래밍

링킹로더의 개념링킹로더의 개념

• 재배치링크 및 적재를 한꺼번에 수행

• 두 단계의 패스로 구성 ( 패스 1 과 패스 2 로 구성 )

Page 5

Page 6: 7 장 링커와 로더 설계

시스템 프로그래밍

링킹로더의 패스링킹로더의 패스 11 과 패스과 패스22

• 패스 1 의 기능

* 모듈에 기억장소 할당

* 외부기호들의 주소 확정

* 외부기호표 작성

• 패스 2 의 기능

* 모든 상대주소를 절대주소로 변환

* 외부기호표 참조 후 적재

Page 6

Page 7: 7 장 링커와 로더 설계

시스템 프로그래밍

링킹로더의 수행과정링킹로더의 수행과정

링킹로더

500

530

550

A

B

C

기억장소0...29

A

0...19

B

0...9

C

Page 7

Page 8: 7 장 링커와 로더 설계

시스템 프로그래밍

링킹로더의 역할링킹로더의 역할

• 링크 : 링킹로더

• 기억장소 할당 : 운영체제

• 재배치 : 링킹로더

• 적재 : 링킹로더

Page 8

Page 9: 7 장 링커와 로더 설계

시스템 프로그래밍

동적로더의 개념동적로더의 개념

• 재배치로더와 링킹로더의 단점 보완

• 기억장소의 효율적 활용

• 서브루틴들의 상호 호출관계 파악

• 오버레이 구조를 활용

Page 9

Page 10: 7 장 링커와 로더 설계

시스템 프로그래밍

동적적재시 서브루틴의 호출관계동적적재시 서브루틴의 호출관계

A (20K)

B (20K)

C (30K)

D (10K)

E (20K)

70K

Page 10

Page 11: 7 장 링커와 로더 설계

시스템 프로그래밍

동적적재시 기억장소의 변화동적적재시 기억장소의 변화

50K40K60K70K

A (20K)

B (20K)

C (30K)

A (20K)

B (20K)

E (20K)

A (20K) A (20K)

E (20K)

E (20K) D (10K)

Page 11

Page 12: 7 장 링커와 로더 설계

시스템 프로그래밍

링커와 로더가 필요로 하는 정보링커와 로더가 필요로 하는 정보

• 번역된 목적코드의 모듈들

• 모듈의 길이

• 외부기호와 내부기호

• 재배치할 기호들과 수정방법

Page 12

Page 13: 7 장 링커와 로더 설계

시스템 프로그래밍

원시프로그램의 형태원시프로그램의 형태

• EXTRN 으로 선언된 기호

* 외부에서 정의되고 내부에서 이용

• PUBLIC 으로 선언된 기호

* 내부에서 정의되고 외부에서 이용

Page 13

Page 14: 7 장 링커와 로더 설계

시스템 프로그래밍

MAIN.ASM MAIN.ASM 모듈의 예모듈의 예

MAIN.ASM

MAIN SEGMENT

ASSUME CS:MAIN, DS:MAIN

EXTRN ADD2:NEAR, TABLE:WORD

PUBLIC DATA3

ADD1: MOV AX, CS

MOV DS, AX

MOV AX, DATA1

ADD AX, DATA2

Page 14

Page 15: 7 장 링커와 로더 설계

시스템 프로그래밍

MAIN.ASM MAIN.ASM 모듈의 예모듈의 예

MOV DATA3, AX

CALL ADD2

MOV AH, 4CH

INT 21H

DATA1 DW ADD2

DATA2 DW TABLE

DATA3 DW ?

MAIN ENDS

END

Page 15

Page 16: 7 장 링커와 로더 설계

시스템 프로그래밍

SUBST.ASM SUBST.ASM 모듈의 예모듈의 예

SUBST.ASM

MAIN SEGMENT

ASSUME CS:MAIN, DS:MAIN

EXTRN DATA3:WORD

PUBLIC ADD2, TABLE

ADD2: PROC NEAR

PUSH AX

MOV AX, TABLE

ADD AX, POINT

Page 16

Page 17: 7 장 링커와 로더 설계

시스템 프로그래밍

SUBST.ASM SUBST.ASM 모듈의 예모듈의 예

MOV SUM, AX

POP AX

RET

ADD2 ENDP

TABLE DW 100

POINT DW DATA3

SUM DW ?

MAIN ENDS

END

Page 17

Page 18: 7 장 링커와 로더 설계

시스템 프로그래밍

번역된 프로그램의 형태번역된 프로그램의 형태

MAIN SEGMENT ASSUME CS:MAIN,DS:MAIN;EXTRN SUM:WORD; MOV AX,CS MOV DX,AX MOV AX,100H ADD AX,TABLE MOV SAVE,AX MOV BX,OFFSET POINT MOV AH,4CH INT 21HTABLE DW 1, 7;POINT DW SAVE-RESULTRESULT DW ?SAVE DW ?ASUM DW SUMMAIN ENDS END

상대 재배치주소 비트

0000 00 MOV AX,CS0002 00 MOV DS,AX0004 00 MOV AX,01000007 01 ADD AX,WORD

PTR[0015]000B 10 MOV WORD

PTR[001D],AX000E 01 MOV BX,00190011 00 MOV AH,4C0013 00 INT 210015 00 00010017 00 00070019 00 0002001B 00 0000001D 00 0000001F 10 0000

Page 18

Page 19: 7 장 링커와 로더 설계

시스템 프로그래밍

절대상수와 재배치상수절대상수와 재배치상수

• 절대상수

* 같은 모듈내의 기호끼리 연산결과

* SAVE - RESULT = 02

* 어셈블러가 계산

• 재배치상수

* 기호의 값이 결정된 후 연산결과 결정

* SUM - 5

* 재배치비트 설정

Page 19

Page 20: 7 장 링커와 로더 설계

시스템 프로그래밍

링크를 위한 어셈블링링크를 위한 어셈블링

• 번역된 프로그램 : 목적코드로 된 모듈

• 모듈의 길이 : 외부기호표

• 외부기호 : 외부기호표

• 내부기호 : 외부기호표

• 재배치주소와 방법 : 재배치 링크표

Page 20

Page 21: 7 장 링커와 로더 설계

시스템 프로그래밍

원시프로그램과 번역된 프로그램원시프로그램과 번역된 프로그램

• MAIN.ASM 모듈의 예

MAIN SEGMENT ASSUME

CS:MAIN,DS:MAIN;EXTRN B:PROC,B1:WORDPUBLIC A1;A MOV AX,CS MOV DS,AX MOV AX,A2 ADD AX,A2+2 ADD AX,A2+4 CALL B MOV AH,4CH INT 21H

상대 재배치상대 재배치주소 비트주소 비트

0000 00 MOV AX,CS0002 00 MOV DS,AX0004 01 MOV AX,[0018]0007 01 ADD AX,[001A]000B 01 ADD AX,[001C]000F 10 CALL 00000012 00 MOV AH,4C0014 00 INT 21

Page 21

Page 22: 7 장 링커와 로더 설계

시스템 프로그래밍

• MAIN.ASM 모듈의 예

원시프로그램과 번역된 프로그램원시프로그램과 번역된 프로그램

A1 DW B

A2 DW A1+10

DW A2-A1

DW B1+5

DW 0

MAIN ENDS

END

상대 재배치주소 비트

0016 10 0

0018 10 20

001A 00 02

001C 10 05

001E 00 00

Page 22

Page 23: 7 장 링커와 로더 설계

시스템 프로그래밍

• SUBST.ASM 모듈의 예

원시프로그램과 번역된 프로그램원시프로그램과 번역된 프로그램

MAIN SEGMENT ASSUME

CS:MAIN,DS:MAIN;EXTRN A1:NEARPUBLIC B, B1;B PROC PUSH AX PUSH BX MOV AX, CS MOV DX, AX MOV AX, B1 ADD AX, B2+2 MOV B2, AX

상대 재배치주소 비트

0000 00 PUSH AX0001 00 PUSH BX0002 00 MOV AX,CS0004 00 MOV DS,AX0006 01 MOV AX,

[0013]0009 01 ADD AX,

[0017]000D 10 MOV

[0015],AXPage 23

Page 24: 7 장 링커와 로더 설계

시스템 프로그래밍

원시프로그램과 번역된 프로그램원시프로그램과 번역된 프로그램

POP BX POP AX RETB ENDP;B1 DW 10B2 DW ? DW B1-A1MAIN ENDS END

상대 재배치주소 비트0010 00 POP BX0011 00 POP AX0012 00 RET

0013 00 000A0015 000017 10 0013

SUBST.ASM 모듈의 예

Page 24

Page 25: 7 장 링커와 로더 설계

시스템 프로그래밍

번역된 프로그램의 분석번역된 프로그램의 분석

• MAIN 의 상대주소 0018H 의 경우

* A1 = (A1 - A) + A

* A1 + 10 = (A1 - A) + A + 10

= 16H + A + 10

= 20H + A

Page 25

Page 26: 7 장 링커와 로더 설계

시스템 프로그래밍

번역된 프로그램의 분석번역된 프로그램의 분석

• MAIN 의 상대주소 001AH 의 경우

* A2 - A1 = 02H

* 재배치비트는 00 으로 됨

• SUBST 의 상대주소 0009H 의 경우

* B2 = (B2 - B) + B = 15H + B

* B2 + 2 = (B2 - B) + B + 2

= 15H + B + 2 = 17H + B

Page 26

Page 27: 7 장 링커와 로더 설계

시스템 프로그래밍

외부기호표의 형태와 예외부기호표의 형태와 예

• 모듈 MAIN 의 외부기호표

기호기호

MAINMAIN

AA

A1A1

A2A2

BB

B1B1

분류분류

SDSD

LDLD

LDLD

LDLD

ERER

ERER

상대주소상대주소

00000000

00000000

00160016

00180018

--

--

길이길이

1E1E

1E1E

--

--

--

--

Page 27

Page 28: 7 장 링커와 로더 설계

시스템 프로그래밍

재배치 링크의 형태와 예재배치 링크의 형태와 예

• 모듈 MAIN 의 재배치 링크표

+ 또는 - +++++++

상대주소00040007000B000F00160018001C

기호AAABBAB1

상대주소 0004H 에 A 의 값을 더하라 (+)

Page 28

Page 29: 7 장 링커와 로더 설계

시스템 프로그래밍

재배치 링크의 형태와 예재배치 링크의 형태와 예

• 모듈 SUBST 의 외부기호표

기호

MAIN

B

B1

B2

A1

분류

SD

LD

LD

LD

ER

상대주소

0000

0000

0013

0015

-

길이

19

13

-

-

-

Page 29

Page 30: 7 장 링커와 로더 설계

시스템 프로그래밍

재배치 링크의 형태와 예재배치 링크의 형태와 예

• 모듈 SUBST 의 재배치 링크표

+ 또는 -

+

+

+

+

-

상대주소

0006

0009

000D

0017

0017

기호

B

B

B

B

A1

Page 30

Page 31: 7 장 링커와 로더 설계

시스템 프로그래밍

링크 및 재배치의 과정링크 및 재배치의 과정

• 패스 1 의 수행과정

* 단순링크

* 총괄외부기호표 작성

* 총괄재배치링크표 작성

• 패스 2 의 수행과정

* 기호값의 수정위치와 방법 결정

* 필요한 기호의 값 탐색

* 재배치비트 참고 후 재배치

Page 31

Page 32: 7 장 링커와 로더 설계

시스템 프로그래밍

패스패스 11 이 만든 단순링크된 모듈이 만든 단순링크된 모듈

MAIN.ASM

0000 00 MOV AX, CS

0002 00 MOV DS, AX

0004 01 MOV AX, [0018]

0007 01 ADD AX, [001A]

000B 01 ADD AX, [001C]

000F 10 CALL 0000

상대주소 재배치 비트

Page 32

Page 33: 7 장 링커와 로더 설계

시스템 프로그래밍

패스패스 11 이 만든 단순링크된 모듈이 만든 단순링크된 모듈

0012 00 MOV AH, 4C

0014 00 INT 21

0016 10 0000

0018 10 0020

001A 00 0002

001C 10 0005

재배치 비트상대주소

Page 33

Page 34: 7 장 링커와 로더 설계

시스템 프로그래밍

SUBST.ASM

001E 00 PUSH AX

001F 00 PUSH BX

0020 00 MOV AX, CS

0022 00 MOV DS, AX

0024 01 MOV AX, [0013]

패스패스 11 이 만든 단순링크된 모듈이 만든 단순링크된 모듈

재배치 비트상대주소

Page 34

Page 35: 7 장 링커와 로더 설계

시스템 프로그래밍

0027 01 ADD AX, [0017]

002B 10 MOV [0015], AX

002E 00 POP BX

002F 00 POP AX

0030 00 RET

0031 00 000A

0033 00 -

0035 10 0013

패스패스 11 이 만든 단순링크된 모듈이 만든 단순링크된 모듈

재배치 비트상대주소

Page 35

Page 36: 7 장 링커와 로더 설계

시스템 프로그래밍

MAIN.ASM

0000 00 MOV AX, CS 0002 00 MOV DS, AX 0004 01 MOV AX,

[0018] 0007 01 ADD AX,

[001A] 000B 01 ADD AX,

[001C] 000F 10 CALL 0000 0012 00 MOV AH, 4C 0014 00 INT 21 0016 10 0000 0018 10 0020 001A 00 0002 001C 10 0005

패스패스 11 이 만든 단순링크된 모듈이 만든 단순링크된 모듈

재배치 비트상대주소

Page 36

SUBST.ASM

001E 00 PUSH AX 001F 00 PUSH BX 0020 00 MOV AX, CS 0022 00 MOV DS, AX 0024 01 MOV AX,

[0013] 0027 01 ADD AX,

[0017] 002B 10 MOV

[0015], AX 002E 00 POP BX 002F 00 POP AX 0030 00 RET 0031 00 000A 0033 00 - 0035 10 0013

Page 37: 7 장 링커와 로더 설계

시스템 프로그래밍

패스패스 11 이 만든 총괄외부기호표 형태이 만든 총괄외부기호표 형태

설명

(00H + 01EH)

(13H + 01EH)

(15H + 01EH)

기호

A

A1

A2

B

B1

B2

주소값

0000

0016

0018

001E

0031

0033

Page 37

Page 38: 7 장 링커와 로더 설계

시스템 프로그래밍

패스패스 11 이 만든 총괄재배치링크표이 만든 총괄재배치링크표

+ 또는 -

+

+

+

+

+

+

+

기호

A

A

A

B

B

A

B1

주소값

0004

0007

000B

000F

0016

0018

001C

Page 38

Page 39: 7 장 링커와 로더 설계

시스템 프로그래밍

패스패스 11 이 만든 총괄재배치링크표이 만든 총괄재배치링크표

+

+

+

+

-

B

B

B

B

A1

0024(06H + 01EH)

0027(09H + 01EH)

002B(0DH + 01EH)

0035(17H + 01EH)

0035(17H + 01EH)

Page 39

Page 40: 7 장 링커와 로더 설계

시스템 프로그래밍

패스패스 22 가 만든 적재모듈가 만든 적재모듈

MAIN.ASM

0000 00 -

0002 00 -

0004 01 MOV AX, [0018]

0007 01 ADD AX, [001A]

000B 01 ADD AX, [001C]

000F 10 CALL 001E

재배치 비트상대주소

Page 40

Page 41: 7 장 링커와 로더 설계

시스템 프로그래밍

패스패스 22 가 만든 적재모듈가 만든 적재모듈

0012 00 -

0014 00 -

0016 10 001E

0018 10 0020

001A 00 0002

001C 10 0036

재배치 비트상대주소

Page 41

Page 42: 7 장 링커와 로더 설계

시스템 프로그래밍

패스패스 22 가 만든 적재모듈가 만든 적재모듈

SUBST.ASM

001E 00 -

001F 00 -

0020 00 -

0022 00 -

0024 01 MOV AX, [0031]

0027 01 ADD AX, [0035]

재배치 비트상대주소

Page 42

Page 43: 7 장 링커와 로더 설계

시스템 프로그래밍

패스패스 22 가 만든 적재모듈가 만든 적재모듈

002B 00 MOV [0033], AX

002E 00 -

002F 00 -

0030 00 -

0031 10 000A

0033 00 -

0035 00 001B

재배치 비트상대주소

Page 43

Page 44: 7 장 링커와 로더 설계

시스템 프로그래밍

MAIN.ASM

0000 00 0002 00 0004 01 MOV AX,

[0018] 0007 01 ADD AX,

[001A] 000B 01 ADD AX,

[001C] 000F 10 CALL 0000 0012 00 0014 00 0016 10 001E 0018 10 0020 001A 00 0002 001C 10 0036

패스패스 22 가 만든 적재 모듈가 만든 적재 모듈

재배치 비트상대주소

Page 44

SUBST.ASM

001E 00 001F 00 0020 00 0022 00 0024 01 MOV AX,

[0031] 0027 01 ADD AX,

[0035] 002B 10 MOV

[0033], AX 002E 00 002F 00 0030 00 0031 00 000A 0033 00 - 0035 00 001B

Page 45: 7 장 링커와 로더 설계

시스템 프로그래밍

링크재배치상수와 적재재배치상수링크재배치상수와 적재재배치상수

• 링크재배치상수

모듈들을 링크하면 값이 결정

예 ) B1 - A1

• 적재재배치상수

적재될 때 값이 결정

Page 45

Page 46: 7 장 링커와 로더 설계

시스템 프로그래밍

기억장소에 적재된 후의 모양기억장소에 적재된 후의 모양

• 기억장소의 할당이 100(64H) 번지부터 시작

8C C8 MOV AX, CS

8E D8 MOV DS, AX

A1 OO7C MOV AX, [007C]

03 06 007E ADD AX, [007E]

03 06 0080 ADD AX, [0080]

E8 7200 CALL 0082

0064

0066

0068

006B

006F

0073

주소 기억장치

Page 46

Page 47: 7 장 링커와 로더 설계

시스템 프로그래밍

기억장소에 적재된 후의 모양기억장소에 적재된 후의 모양

B4 4C MOV AH, 4C

CD 21 INT 21

2000 -

2000 -

0200 -

3800 -

50 PUSH AX

53 PUSH BX

0076

0078

007A

007C

007E

0080

0082

0083

주소 기억장치

Page 47

Page 48: 7 장 링커와 로더 설계

시스템 프로그래밍

기억장소에 적재된 후의 모양기억장소에 적재된 후의 모양

기억장치

8C C8 MOV AX, CS

8E D8 MOV DS, AX

A1 0095 MOV AX, [0095]

03 06 0099 ADD AX, [0099]

A3 0097 MOV [0097], AX

5B POP BX

0084

0086

0088

008B

008F

0092

주소

Page 48

Page 49: 7 장 링커와 로더 설계

시스템 프로그래밍

기억장소에 적재된 후의 모양기억장소에 적재된 후의 모양

기억장치

58 POP AX

C3 RET

0A00 -

0000 -

1B00 -

0093

0094

0095

0097

0099

주소

Page 49

Page 50: 7 장 링커와 로더 설계

시스템 프로그래밍

패스 2

패스패스 11 과 패스과 패스 22 의 데이터베이스의 데이터베이스

패스 1

번역된세그먼트들

외부기호표

재배치링크표

단순링크된모듈

적재모듈

총괄외부 기호표

총괄재배치링크표

Page 50

Page 51: 7 장 링커와 로더 설계

시스템 프로그래밍

세그먼트 배열순서 결정

시 작

세그먼트들을배열순서에따라 연결

패스패스 11 의 알고리즘의 알고리즘

기호가 중복되지 않도록 기호표들을단순연결

재배치링크표들을 단순연결

입력

Page 51

Page 52: 7 장 링커와 로더 설계

시스템 프로그래밍

패스 1끝

단순링크된모듈

상대주소변경( 앞에 배열된세그먼트의길이를 더한다 )

패스패스 11 의 알고리즘의 알고리즘

기호의 상대주소변경 상대주소변경

총괄외부기호표

총괄재배치링크표

Page 52

Page 53: 7 장 링커와 로더 설계

시스템 프로그래밍

패스패스 22 의 알고리즘의 알고리즘

읽은 줄의 내용을 다음과 같이 변수에 치환 addr = 상대주소 symbol = 기호 sign = + 또는 -

총괄재배치링크표에서 한 줄을 읽음

총괄재배치링크표 끝 ?

아니오

패스 2 시작

패스 2 끝

Page 53

Page 54: 7 장 링커와 로더 설계

시스템 프로그래밍

실패

성공

오류

패스패스 22 의 알고리즘의 알고리즘

재배치비트가 가리키는 데이터에Value 를 sign 에 따라 더함

단순링크 모듈에서상대주소 =addr 탐색

실패

성공

탐색된 기호의 상대주소를 변수에 치환 Value= 주소값

오류총괄외부기호표에서 기호 =symbol 인 행을 탐색

Page 54

Page 55: 7 장 링커와 로더 설계

시스템 프로그래밍

제 제 7 7 장 요약장 요약

• 링커와 로더의 역할

• 로더의 종류

• 링커와 로더가 필요한 정보 이해

• 번역된 프로그램 형태 이해

• 절대상수와 재배치상수 이해

• 재배치 링크와 형태 이해

Page 55

Page 56: 7 장 링커와 로더 설계

시스템 프로그래밍

제 제 7 7 장 요약장 요약

• 패스 1 과 패스 2 의 수행과정 이해

• 패스 1 과 패스 2 의 자료구조 이해

• 기억장소에 적재된 상태 이해

• 패스 1 과 패스 2 의 알고리즘 이해

Page 56