제 7 장 링커와 로더 설계

73
7 7 제 제제제 제제 제제 제 제제제 제제 제제

Upload: cid

Post on 22-Jan-2016

107 views

Category:

Documents


1 download

DESCRIPTION

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

TRANSCRIPT

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

제 제 7 7 장 링커와 로더 설계장 링커와 로더 설계

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

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

링커와 로더의 개념과 역할

부프로그램의 호출과 외부기호 참조

재배치와 적재 개요

로더의 종류와 형태

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

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

링커와 로더가 필요로하는 정보원시프로그램과 번역결과절대상수와 재배치상수링크를 위한 어셈블링외부기호와 재배치 링크의 형태

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

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

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

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

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

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

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

링커와 로더의 역할링커와 로더의 역할

링킹 : 모듈들을 연결

주기억장치 할당 :

적재될 기억공간의 확보

재배치 : 기호들을 재배치

적재 : 재배치가 완료된 모듈을 적재

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

부프로그램의 호출부프로그램의 호출

CALL BCALL B

모듈 모듈 AA외부기호로외부기호로

분기분기

복귀복귀

모듈 모듈 BB

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

외부기호의 참조외부기호의 참조

LA1 DW LB1LA1 DW LB1

모듈 모듈 AA외부기호외부기호

참조참조모듈 모듈 BB

LB1 DW 5LB1 DW 5

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

주기억장치의 할당주기억장치의 할당

로더의 요구에 의해

운영체제가 수행운영체제 안에는 기억장치

관리 모듈 존재부분할당과 전체할당으로 구분

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

재배치 및 적재 재배치 및 적재

번역후 재배치가능 코드가 생성됨프로그램의 시작위치가 기준점재배치 작업은 각 명령어의

주소부분에 행해짐컴파일러가 재배치 정보 생성재배치비트를 이용하는 방법

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

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

컴파일 즉시로더

절대로더

재배치로더

링킹로더

동적로더

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

컴파일 즉시로더의 개념컴파일 즉시로더의 개념

가장 간단한 방법로더의 기능은 거의 어셈블러가 수행로더의 기능은 단순히 실행을 제어어셈블러가 적재 기억장소낭비목적모듈이 보조기억장치에 저장 안됨

어셈블러의 재번역이 요구됨서로 다른 언어로 작성된 모듈들끼리 연결불가모든 모듈이 한꺼번에 번역 모듈화가

어려움

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

절대로더의 개념절대로더의 개념

출력결과는 보조기억장치에 저장로더는 번역시 정해진 위치에

적재만 수행프로그래머가 어셈블러에게

적재주소 지정각 모듈의 적재주소 지정

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

절대로더를절대로더를 위한위한 프로그램의프로그램의 형태형태

주프로그램MAIN SEGMENT ASSUME CS : MAIN... ORG 100... CALL 400...MAIN ENDS END

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

절대로더를절대로더를 위한위한 프로그램의프로그램의 형태형태

부프로그램MAIN SEGMENT

ASSUME CS : MAIN...

ORG 400...

RET

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

절대로더의 기능절대로더의 기능

링크 : 프로그래머

기억장소 할당번지 지정 :

프로그래머

재배치 : 어셈블러

적재 : 절대로더

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

재배치로더의 개념재배치로더의 개념

적재모듈을 주기억장치에 적재상대주소를 절대주소로 변환외부기호의 참조

* 모듈의 이름기호 참조

* 외부모듈에서 정의된 기호 참조

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

33 개의 외부모듈 정의개의 외부모듈 정의

모듈 M1

세그먼트 세그먼트 AA(( 상대주소상대주소 ) () ( 기호기호 ) () ( 명령어명령어 ))

0 A 0 A ... ... ... ... ... CALL B ... CALL B 20 LA1 DW 20 LA1 DW LB1LB1

... ...... ... 2929

세그먼트 세그먼트 AA(( 상대주소상대주소 ) () ( 기호기호 ) () ( 명령어명령어 ))

0 A 0 A ... ... ... ... ... CALL B ... CALL B 20 LA1 DW 20 LA1 DW LB1LB1

... ...... ... 2929

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

33 개의 외부모듈 정의개의 외부모듈 정의

모듈 M2

세그먼트 세그먼트 BB(( 상대주소상대주소 ) () ( 기호기호 ) () (명령어명령어 ))

0 B 0 B ... ... ... ... 10 LB1 DW 10 LB1 DW 5 5

... ...... ...

1919

세그먼트 세그먼트 BB(( 상대주소상대주소 ) () ( 기호기호 ) () (명령어명령어 ))

0 B 0 B ... ... ... ... 10 LB1 DW 10 LB1 DW 5 5

... ...... ...

1919

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

33 개의 외부모듈 정의개의 외부모듈 정의

모듈 M3

세그먼트 세그먼트 CC

(( 상대주소상대주소 ) () ( 기호기호 ) () ( 명령어명령어 ))

0 C 0 C ... ...... ...

99

세그먼트 세그먼트 CC

(( 상대주소상대주소 ) () ( 기호기호 ) () ( 명령어명령어 ))

0 C 0 C ... ...... ...

99

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

33 개 모듈의 링크와 재배치개 모듈의 링크와 재배치

00......2200......

2299

00......2200......

2299

AAAA CALL CALL

BBLA1 DW LA1 DW

LB1LB1

CALL CALL BB

LA1 DW LA1 DW LB1LB1

00......1100......

1199

00......1100......

1199

BBBB LB1 DW 5LB1 DW 5 LB1 DW 5LB1 DW 5

00......99

00......99

CCCC

링커링커링커링커

00......2299

3300......

4400......

4499

5500......

5599

00......2299

3300......

4400......

4499

5500......

5599

CALL 30CALL 304040CALL 30CALL 304040

5555

AAAA

BBBB

CCCC

상대주소상대주소상대주소상대주소500500

520520

530530

540540

550550

559559

500500

520520

530530

540540

550550

559559

CALL CALL 530530

540540

CALL CALL 530530

540540

5555

AAAA

BBBB

CCCC

절대주소절대주소절대주소절대주소

적재적재모듈모듈적재적재모듈모듈

기억기억장치장치기억기억장치장치

재배치로더재배치로더재배치로더재배치로더

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

각 모듈의 기호표각 모듈의 기호표

모듈 M1 의 기호표

기호기호

AABB

LA1LA1LB1LB1

기호기호

AABB

LA1LA1LB1LB1

분류분류

SDSDSDSDLDLDERER

분류분류

SDSDSDSDLDLDERER

상대주소상대주소

00--2020--

상대주소상대주소

00--2020--

길이길이

3030------

길이길이

3030------

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

각 모듈의 기호표각 모듈의 기호표

모듈 M2 의 기호표

기호기호

BB

LB1LB1

기호기호

BB

LB1LB1

분류분류

SDSD

LDLD

분류분류

SDSD

LDLD

상대주소상대주소

00

1010

상대주소상대주소

00

1010

길이길이

2020

--

길이길이

2020

--

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

각 모듈의 기호표각 모듈의 기호표

모듈 M3 의 기호표

기호기호

CC

기호기호

CC

분류분류

SDSD

분류분류

SDSD

상대주소상대주소

00

상대주소상대주소

00

길이길이

1010

길이길이

1010

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

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

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

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

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

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

패스 1 의 기능* 모듈에 기억장소 할당* 외부기호들의 주소 확정* 외부기호표 작성

패스 2 의 기능* 모든 상대주소를 절대주소로 변환* 외부기호표 참조 후 적재

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

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

링킹링킹로더로더링킹링킹로더로더

500500

530530

550550

500500

530530

550550

AAAA

BBBB

CCCC

기억장소기억장소기억장소기억장소00......2929

00......2929

AAAA

00......1919

00......1919

BBBB

00......99

00......99

CCCC

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

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

링크 : 링킹로더

기억장소 할당 : 운영체제

재배치 : 링킹로더

적재 : 링킹로더

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

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

재배치로더와 링킹로더의

단점 보완기억장소의 효율적 활용서브루틴들의 상호 호출관계 파악오버레이 구조를 활용

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

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

A (20K)

B (20K)

C (30K)

D (10K)

E (20K)

70K

Page 30: 제  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 31: 제  7  장 링커와 로더 설계

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

번역된 목적코드의 모듈들

모듈의 길이

외부기호와 내부기호

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

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

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

EXTRN 으로 선언된 기호

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

PUBLIC 으로 선언된 기호

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

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

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

MAIN.ASMMAIN SEGMENT ASSUME CS:MAIN, DS:MAINEXTRN ADD2:NEAR, TABLE:WORDPUBLIC DATA3ADD1: MOV AX, CS MOV DS, AX MOV AX, DATA1 ADD AX, DATA2

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

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

MOV DATA3, AX CALL ADD2 MOV AH, 4CH INT 21HDATA1 DW ADD2DATA2 DW TABLEDATA3 DW ?MAIN ENDS END

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

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

SUBST.ASMMAIN SEGMENT ASSUME CS:MAIN, DS:MAINEXTRN DATA3:WORDPUBLIC ADD2, TABLEADD2: PROC NEAR PUSH AX MOV AX, TABLE ADD AX, POINT

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

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

MOV SUM, AX POP AX RETADD2 ENDPTABLE DW 100POINT DW DATA3SUM DW ?MAIN ENDS END

Page 37: 제  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,CS0000 00 MOV AX,CS0002 00 MOV DS,AX0002 00 MOV DS,AX0004 00 MOV AX,01000004 00 MOV AX,01000007 01 ADD AX,WORD 0007 01 ADD AX,WORD PTR[0015]PTR[0015]

000B 10 MOV WORD 000B 10 MOV WORD PTR[001D],AXPTR[001D],AX

000E 01 MOV BX,0019000E 01 MOV BX,00190011 00 MOV AH,4C0011 00 MOV AH,4C0013 00 INT 210013 00 INT 210015 00 00010015 00 00010017 00 00070017 00 00070019 00 00020019 00 0002001B 00 0000001B 00 0000001D 00 0000001D 00 0000001F 10 0000001F 10 0000

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

0000 00 MOV AX,CS0000 00 MOV AX,CS0002 00 MOV DS,AX0002 00 MOV DS,AX0004 00 MOV AX,01000004 00 MOV AX,01000007 01 ADD AX,WORD 0007 01 ADD AX,WORD PTR[0015]PTR[0015]

000B 10 MOV WORD 000B 10 MOV WORD PTR[001D],AXPTR[001D],AX

000E 01 MOV BX,0019000E 01 MOV BX,00190011 00 MOV AH,4C0011 00 MOV AH,4C0013 00 INT 210013 00 INT 210015 00 00010015 00 00010017 00 00070017 00 00070019 00 00020019 00 0002001B 00 0000001B 00 0000001D 00 0000001D 00 0000001F 10 0000001F 10 0000

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

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

절대상수* 같은 모듈내의 기호끼리 연산결과* SAVE - RESULT = 02* 어셈블러가 계산

재배치상수* 기호의 값이 결정된 후 연산결과 결정* SUM - 5* 재배치비트 설정

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

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

번역된 프로그램 :

목적코드로 된 모듈모듈의 길이 : 외부기호표외부기호 : 외부기호표내부기호 : 외부기호표재배치주소와 방법 : 재배치 링크표

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

원시프로그램과원시프로그램과 번역된번역된 프로그램프로그램MAIN.ASM 모듈의 예

MAIN SEGMENTMAIN SEGMENT ASSUME ASSUME CS:MAIN,DS:MAIN;CS:MAIN,DS:MAIN;

EXTRN B:PROC,BI:WORDEXTRN B:PROC,BI:WORDPUBLIC A1;PUBLIC A1;A MOV AX,CSA MOV AX,CS MOV DS,AXMOV DS,AX MOV AX,A2MOV AX,A2 ADD AX,A2+2ADD AX,A2+2 ADD AX,A2+4ADD AX,A2+4 CALL BCALL B MOV AH,4CHMOV AH,4CH INT 21HINT 21H

MAIN SEGMENTMAIN SEGMENT ASSUME ASSUME CS:MAIN,DS:MAIN;CS:MAIN,DS:MAIN;

EXTRN B:PROC,BI:WORDEXTRN B:PROC,BI:WORDPUBLIC A1;PUBLIC A1;A MOV AX,CSA MOV AX,CS MOV DS,AXMOV DS,AX MOV AX,A2MOV AX,A2 ADD AX,A2+2ADD AX,A2+2 ADD AX,A2+4ADD AX,A2+4 CALL BCALL B MOV AH,4CHMOV AH,4CH INT 21HINT 21H

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

0000 00 MOV AX,CS0000 00 MOV AX,CS0002 00 MOV DS,AX0002 00 MOV DS,AX0004 01 MOV AX,0004 01 MOV AX,[0018][0018]

0007 01 ADD AX,0007 01 ADD AX,[001A][001A]

000B 01 ADD AX,000B 01 ADD AX,[001C][001C]

000F 10 CALL 0000000F 10 CALL 00000012 00 MOV AH,4C0012 00 MOV AH,4C0014 00 INT 210014 00 INT 21

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

0000 00 MOV AX,CS0000 00 MOV AX,CS0002 00 MOV DS,AX0002 00 MOV DS,AX0004 01 MOV AX,0004 01 MOV AX,[0018][0018]

0007 01 ADD AX,0007 01 ADD AX,[001A][001A]

000B 01 ADD AX,000B 01 ADD AX,[001C][001C]

000F 10 CALL 0000000F 10 CALL 00000012 00 MOV AH,4C0012 00 MOV AH,4C0014 00 INT 210014 00 INT 21

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

원시프로그램과원시프로그램과 번역된번역된 프로그램프로그램MAIN.ASM 모듈의 예

A1 DW BA1 DW BA2 DW A1+10A2 DW A1+10 DW A2-A1DW A2-A1 DW B1+5DW B1+5 DW 0DW 0MAIN ENDSMAIN ENDS ENDEND

A1 DW BA1 DW BA2 DW A1+10A2 DW A1+10 DW A2-A1DW A2-A1 DW B1+5DW B1+5 DW 0DW 0MAIN ENDSMAIN ENDS ENDEND

상대 재배치상대 재배치주소 비트주소 비트0016 10 00016 10 00018 10 200018 10 20001A 00 02001A 00 02001C 10 05001C 10 05001E 00 00001E 00 00

상대 재배치상대 재배치주소 비트주소 비트0016 10 00016 10 00018 10 200018 10 20001A 00 02001A 00 02001C 10 05001C 10 05001E 00 00001E 00 00

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

원시프로그램과원시프로그램과 번역된번역된 프로그램프로그램SUBST.ASM 모듈의 예

MAIN SEGMENTMAIN SEGMENT ASSUME ASSUME CS:MAIN,DS:MAIN;CS:MAIN,DS:MAIN;

EXTRN A1:NEAREXTRN A1:NEARPUBLIC B, B1;PUBLIC B, B1;B PROCB PROC PUSH AXPUSH AX PUSH BXPUSH BX MOV AX, CSMOV AX, CS MOV DX, AXMOV DX, AX MOV AX, B1MOV AX, B1 ADD AX, B2+2ADD AX, B2+2 MOV B2, AXMOV B2, AX

MAIN SEGMENTMAIN SEGMENT ASSUME ASSUME CS:MAIN,DS:MAIN;CS:MAIN,DS:MAIN;

EXTRN A1:NEAREXTRN A1:NEARPUBLIC B, B1;PUBLIC B, B1;B PROCB PROC PUSH AXPUSH AX PUSH BXPUSH BX MOV AX, CSMOV AX, CS MOV DX, AXMOV DX, AX MOV AX, B1MOV AX, B1 ADD AX, B2+2ADD AX, B2+2 MOV B2, AXMOV B2, AX

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

0000 00 PUSH AX0000 00 PUSH AX0001 00 PUSH BX0001 00 PUSH BX0002 00 MOV AX,CS0002 00 MOV AX,CS0004 00 MOV DS,AX0004 00 MOV DS,AX0006 01 MOV AX,0006 01 MOV AX,[0013][0013]

0009 01 ADD AX,0009 01 ADD AX,[0017][0017]

000D 10 MOV 000D 10 MOV [0015],AX[0015],AX

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

0000 00 PUSH AX0000 00 PUSH AX0001 00 PUSH BX0001 00 PUSH BX0002 00 MOV AX,CS0002 00 MOV AX,CS0004 00 MOV DS,AX0004 00 MOV DS,AX0006 01 MOV AX,0006 01 MOV AX,[0013][0013]

0009 01 ADD AX,0009 01 ADD AX,[0017][0017]

000D 10 MOV 000D 10 MOV [0015],AX[0015],AX

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

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

POP BXPOP BX POP AXPOP AX RETRETB ENDP;B ENDP;B1 DW 10B1 DW 10B2 DW ?B2 DW ? DW B1-A1DW B1-A1MAIN ENDSMAIN ENDS ENDEND

POP BXPOP BX POP AXPOP AX RETRETB ENDP;B ENDP;B1 DW 10B1 DW 10B2 DW ?B2 DW ? DW B1-A1DW B1-A1MAIN ENDSMAIN ENDS ENDEND

상대 재배치상대 재배치주소 비트주소 비트0010 00 POP 0010 00 POP BXBX

0011 00 POP 0011 00 POP AXAX

0012 00 RET0012 00 RET

0013 00 000A0013 00 000A0015 000015 000017 10 00130017 10 0013

상대 재배치상대 재배치주소 비트주소 비트0010 00 POP 0010 00 POP BXBX

0011 00 POP 0011 00 POP AXAX

0012 00 RET0012 00 RET

0013 00 000A0013 00 000A0015 000015 000017 10 00130017 10 0013

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

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

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

MAIN 의 상대주소 0018H 의 경우* A1 = (A1 - A) + A

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

= 16H + A + 10

= 20H + A

Page 45: 제  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 46: 제  7  장 링커와 로더 설계

외부기호표의 형태와 예외부기호표의 형태와 예모듈 MAIN 의 외부기호표

기호기호MAINMAINAAA1A1A2A2BBB1B1

기호기호MAINMAINAAA1A1A2A2BBB1B1

분류분류SDSDLDLDLDLDLDLDERERERER

분류분류SDSDLDLDLDLDLDLDERERERER

상대주소상대주소00000000000000000016001600180018----

상대주소상대주소00000000000000000016001600180018----

길이길이1E1E1E1E--------

길이길이1E1E1E1E--------

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

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

모듈 MAIN 의 재배치 링크표

+ + 또는 또는 -- ++++++++++++++

+ + 또는 또는 -- ++++++++++++++

상대주소상대주소0004000400070007000B000B000F000F0016001600180018001C001C

상대주소상대주소0004000400070007000B000B000F000F0016001600180018001C001C

기호기호AAAAAABBBBAAB1B1

기호기호AAAAAABBBBAAB1B1

상대주소 상대주소 0004H0004H 에 에 AA 의 값을 더하라의 값을 더하라 (+)(+)

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

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

모듈 SUBST 의 외부기호표

기호기호

MAINMAINBBB1B1B2B2A1A1

기호기호

MAINMAINBBB1B1B2B2A1A1

분류분류

SDSDLDLDLDLDLDLDERER

분류분류

SDSDLDLDLDLDLDLDERER

상대주소상대주소

00000000000000000013001300150015--

상대주소상대주소

00000000000000000013001300150015--

길이길이

19191313------

길이길이

19191313------

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

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

모듈 SUBST 의 재배치 링크표

+ + 또는 또는 --

++++++++--

+ + 또는 또는 --

++++++++--

상대주소상대주소

0006000600090009000D000D0017001700170017

상대주소상대주소

0006000600090009000D000D0017001700170017

기호기호

BBBBBBBBA1A1

기호기호

BBBBBBBBA1A1

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

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

패스 1 의 수행과정* 단순링크* 총괄외부기호표 작성* 총괄재배치링크표 작성

패스 2 의 수행과정* 기호값의 수정위치와 방법 결정* 필요한 기호의 값 탐색* 재배치비트 참고 후 재배치

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

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

MAIN.ASMMAIN.ASM 0000 00 MOV AX, CS0000 00 MOV AX, CS 0002 00 MOV DS, AX0002 00 MOV DS, AX 0004 01 MOV AX, 0004 01 MOV AX, [0018][0018]

0007 01 ADD AX, 0007 01 ADD AX, [001A][001A]

000B 01 ADD AX, 000B 01 ADD AX, [001C][001C]

000F 10 CALL 0000000F 10 CALL 0000

MAIN.ASMMAIN.ASM 0000 00 MOV AX, CS0000 00 MOV AX, CS 0002 00 MOV DS, AX0002 00 MOV DS, AX 0004 01 MOV AX, 0004 01 MOV AX, [0018][0018]

0007 01 ADD AX, 0007 01 ADD AX, [001A][001A]

000B 01 ADD AX, 000B 01 ADD AX, [001C][001C]

000F 10 CALL 0000000F 10 CALL 0000

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

재배치재배치비트비트

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

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

0012 00 MOV AH, 0012 00 MOV AH, 4C4C

0014 00 INT 210014 00 INT 21 0016 10 00000016 10 0000 0018 10 00200018 10 0020 001A 00 0002001A 00 0002 001C 10 0005001C 10 0005

0012 00 MOV AH, 0012 00 MOV AH, 4C4C

0014 00 INT 210014 00 INT 21 0016 10 00000016 10 0000 0018 10 00200018 10 0020 001A 00 0002001A 00 0002 001C 10 0005001C 10 0005

재배치재배치비트비트

재배치재배치비트비트

상대주소상대주소상대주소상대주소

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

SUBST.ASMSUBST.ASM 001E 00 PUSH AX001E 00 PUSH AX 001F 00 PUSH BX001F 00 PUSH BX 0020 00 MOV AX, CS0020 00 MOV AX, CS 0022 00 MOV DS, AX0022 00 MOV DS, AX 0024 01 MOV AX, 0024 01 MOV AX, [0013][0013]

SUBST.ASMSUBST.ASM 001E 00 PUSH AX001E 00 PUSH AX 001F 00 PUSH BX001F 00 PUSH BX 0020 00 MOV AX, CS0020 00 MOV AX, CS 0022 00 MOV DS, AX0022 00 MOV DS, AX 0024 01 MOV AX, 0024 01 MOV AX, [0013][0013]

패스패스 11 이 만든 단순링크된 모듈이 만든 단순링크된 모듈패스패스 11 이 만든 단순링크된 모듈이 만든 단순링크된 모듈재배치재배치비트비트

재배치재배치비트비트

상대주소상대주소상대주소상대주소

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

0027 01 ADD AX, 0027 01 ADD AX, [0017][0017]

002B 10 MOV 002B 10 MOV [0015], AX[0015], AX

002E 00 POP BX002E 00 POP BX 002F 00 POP AX 002F 00 POP AX 0030 00 RET0030 00 RET 0031 00 000A0031 00 000A 0033 00 -0033 00 - 0035 10 00130035 10 0013

0027 01 ADD AX, 0027 01 ADD AX, [0017][0017]

002B 10 MOV 002B 10 MOV [0015], AX[0015], AX

002E 00 POP BX002E 00 POP BX 002F 00 POP AX 002F 00 POP AX 0030 00 RET0030 00 RET 0031 00 000A0031 00 000A 0033 00 -0033 00 - 0035 10 00130035 10 0013

패스패스 11 이 만든 단순링크된 모듈이 만든 단순링크된 모듈패스패스 11 이 만든 단순링크된 모듈이 만든 단순링크된 모듈재배치재배치비트비트

재배치재배치비트비트

상대주소상대주소상대주소상대주소

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

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

설명설명

(00H + (00H + 01EH)01EH)

(13H + (13H + 01EH)01EH)

(15H + (15H + 01EH)01EH)

설명설명

(00H + (00H + 01EH)01EH)

(13H + (13H + 01EH)01EH)

(15H + (15H + 01EH)01EH)

기호기호

AAA1A1A2A2

BBB1B1B2B2

기호기호

AAA1A1A2A2

BBB1B1B2B2

주소값주소값

000000000016001600180018

001E001E0031003100330033

주소값주소값

000000000016001600180018

001E001E0031003100330033

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

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

+ + 또는 또는 --

++++++++++++++

+ + 또는 또는 --

++++++++++++++

기호기호

AAAAAABBBBAAB1B1

기호기호

AAAAAABBBBAAB1B1

주소값주소값

0004000400070007000B000B000F000F0016001600180018001C001C

주소값주소값

0004000400070007000B000B000F000F0016001600180018001C001C

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

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

++

++

++

++

--

++

++

++

++

--

BB

BB

BB

BB

A1A1

BB

BB

BB

BB

A1A1

0024(06H + 0024(06H +

01EH)01EH)

0027(09H + 0027(09H +

01EH)01EH)

002B(0DH + 002B(0DH +

01EH)01EH)

0035(17H + 0035(17H +

01EH)01EH)

0035(17H + 0035(17H +

01EH)01EH)

0024(06H + 0024(06H +

01EH)01EH)

0027(09H + 0027(09H +

01EH)01EH)

002B(0DH + 002B(0DH +

01EH)01EH)

0035(17H + 0035(17H +

01EH)01EH)

0035(17H + 0035(17H +

01EH)01EH)

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

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

MAIN.ASMMAIN.ASM 0000 00 -0000 00 - 0002 00 -0002 00 - 0004 01 MOV AX, 0004 01 MOV AX, [0018][0018]

0007 01 ADD AX, 0007 01 ADD AX, [001A][001A]

000B 01 ADD AX, 000B 01 ADD AX, [001C][001C]

000F 10 CALL 001E000F 10 CALL 001E

MAIN.ASMMAIN.ASM 0000 00 -0000 00 - 0002 00 -0002 00 - 0004 01 MOV AX, 0004 01 MOV AX, [0018][0018]

0007 01 ADD AX, 0007 01 ADD AX, [001A][001A]

000B 01 ADD AX, 000B 01 ADD AX, [001C][001C]

000F 10 CALL 001E000F 10 CALL 001E

재배치재배치비트비트

재배치재배치비트비트

상대주소상대주소상대주소상대주소

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

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

0012 00 -0012 00 - 0014 00 -0014 00 - 0016 10 001E0016 10 001E 0018 10 00200018 10 0020 001A 00 0002001A 00 0002 001C 10 0036001C 10 0036

0012 00 -0012 00 - 0014 00 -0014 00 - 0016 10 001E0016 10 001E 0018 10 00200018 10 0020 001A 00 0002001A 00 0002 001C 10 0036001C 10 0036

재배치재배치비트비트

재배치재배치비트비트

상대주소상대주소상대주소상대주소

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

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

SUBST.ASMSUBST.ASM 001E 00 -001E 00 - 001F 00 -001F 00 - 0020 00 -0020 00 - 0022 00 -0022 00 - 0024 01 MOV AX, 0024 01 MOV AX, [0031][0031]

0027 01 ADD AX, 0027 01 ADD AX, [0035][0035]

SUBST.ASMSUBST.ASM 001E 00 -001E 00 - 001F 00 -001F 00 - 0020 00 -0020 00 - 0022 00 -0022 00 - 0024 01 MOV AX, 0024 01 MOV AX, [0031][0031]

0027 01 ADD AX, 0027 01 ADD AX, [0035][0035]

재배치재배치비트비트

재배치재배치비트비트

상대주소상대주소상대주소상대주소

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

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

002B 00 MOV 002B 00 MOV [0033], AX[0033], AX

002E 00 -002E 00 - 002F 00 -002F 00 - 0030 00 -0030 00 - 0031 10 000A0031 10 000A 0033 00 -0033 00 - 0035 00 001B0035 00 001B

002B 00 MOV 002B 00 MOV [0033], AX[0033], AX

002E 00 -002E 00 - 002F 00 -002F 00 - 0030 00 -0030 00 - 0031 10 000A0031 10 000A 0033 00 -0033 00 - 0035 00 001B0035 00 001B

재배치재배치비트비트

재배치재배치비트비트

상대주소상대주소상대주소상대주소

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

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

링크재배치상수

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

예 ) B1 - A1

적재재배치상수

적재될 때 값이 결정

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

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

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

8C C8 MOV AX, CS8C C8 MOV AX, CS8E D8 MOV DS, AX8E D8 MOV DS, AXA1 OO7C MOV AX, A1 OO7C MOV AX, [007C][007C]

03 06 007E ADD AX, 03 06 007E ADD AX, [007E][007E]

03 06 0080 ADD AX, 03 06 0080 ADD AX, [0080][0080]

E8 7200 CALL 0082E8 7200 CALL 0082

8C C8 MOV AX, CS8C C8 MOV AX, CS8E D8 MOV DS, AX8E D8 MOV DS, AXA1 OO7C MOV AX, A1 OO7C MOV AX, [007C][007C]

03 06 007E ADD AX, 03 06 007E ADD AX, [007E][007E]

03 06 0080 ADD AX, 03 06 0080 ADD AX, [0080][0080]

E8 7200 CALL 0082E8 7200 CALL 0082

006400640066006600680068006B006B006F006F00730073

006400640066006600680068006B006B006F006F00730073

주소주소주소주소 기억장치기억장치기억장치기억장치

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

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

B4 4C MOV AH, B4 4C MOV AH, 4C4C

CD 21 INT 21CD 21 INT 212000 -2000 -2000 -2000 -0200 -0200 -3800 -3800 -50 PUSH AX50 PUSH AX53 PUSH BX53 PUSH BX

B4 4C MOV AH, B4 4C MOV AH, 4C4C

CD 21 INT 21CD 21 INT 212000 -2000 -2000 -2000 -0200 -0200 -3800 -3800 -50 PUSH AX50 PUSH AX53 PUSH BX53 PUSH BX

0076007600780078007A007A007C007C007E007E008000800082008200830083

0076007600780078007A007A007C007C007E007E008000800082008200830083

주소주소주소주소 기억장치기억장치기억장치기억장치

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

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

기억장치기억장치기억장치기억장치8C C8 MOV AX, CS8C C8 MOV AX, CS8E D8 MOV DS, AX8E D8 MOV DS, AXA1 0095 MOV AX, A1 0095 MOV AX, [0095][0095]

03 06 0099 ADD AX, 03 06 0099 ADD AX, [0099][0099]

A3 0097 MOV A3 0097 MOV [0097], AX[0097], AX

5B POP BX5B POP BX

8C C8 MOV AX, CS8C C8 MOV AX, CS8E D8 MOV DS, AX8E D8 MOV DS, AXA1 0095 MOV AX, A1 0095 MOV AX, [0095][0095]

03 06 0099 ADD AX, 03 06 0099 ADD AX, [0099][0099]

A3 0097 MOV A3 0097 MOV [0097], AX[0097], AX

5B POP BX5B POP BX

008400840086008600880088008B008B008F008F00920092

008400840086008600880088008B008B008F008F00920092

주소주소주소주소

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

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

기억장치기억장치기억장치기억장치

58 POP AX58 POP AX

C3 RETC3 RET

0A00 -0A00 -

0000 -0000 -

1B00 -1B00 -

58 POP AX58 POP AX

C3 RETC3 RET

0A00 -0A00 -

0000 -0000 -

1B00 -1B00 -

00930093

00940094

00950095

00970097

00990099

00930093

00940094

00950095

00970097

00990099

주소주소주소주소

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

패스패스 22패스패스 22

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

패스패스 11패스패스 11

번역된번역된세그먼트들세그먼트들번역된번역된

세그먼트들세그먼트들

외부외부기호표기호표외부외부기호표기호표

재배치재배치링크표링크표재배치재배치링크표링크표

단순링크된단순링크된모듈모듈

단순링크된단순링크된모듈모듈 적재적재

모듈모듈적재적재모듈모듈

총괄외부 총괄외부 기호표기호표

총괄외부 총괄외부 기호표기호표

총괄재배치총괄재배치링크표링크표

총괄재배치총괄재배치링크표링크표

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

세그먼트 배열순서 결정세그먼트 배열순서 결정세그먼트 배열순서 결정세그먼트 배열순서 결정

시 작시 작시 작시 작

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

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

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

기호가 중복되지 기호가 중복되지 않도록 기호표들을않도록 기호표들을

단순연결단순연결

기호가 중복되지 기호가 중복되지 않도록 기호표들을않도록 기호표들을

단순연결단순연결

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

입력입력입력입력

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

패스패스 11끝끝

패스패스 11끝끝

단순링크된단순링크된모듈모듈

단순링크된단순링크된모듈모듈

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

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

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

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

상대주소변경상대주소변경 상대주소변경상대주소변경상대주소변경상대주소변경

총괄외부총괄외부기호표기호표

총괄외부총괄외부기호표기호표

총괄재배치총괄재배치링크표링크표

총괄재배치총괄재배치링크표링크표

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

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

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

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

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

총괄재배치링크표 끝총괄재배치링크표 끝 ??총괄재배치링크표 끝총괄재배치링크표 끝 ??

아니오아니오아니오아니오

예예예예

패스패스 2 2 시작시작

패스패스 2 2 시작시작

패스패스 2 2 끝끝

패스패스 2 2 끝끝

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

실패실패실패실패

성공성공성공성공

오류오류오류오류

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

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

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

상대주소상대주소 =addr =addr 탐색탐색

실패실패실패실패

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

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

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

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

제 제 7 7 장 요약장 요약

링커와 로더의 역할로더의 종류링커와 로더가 필요한 정보 이해번역된 프로그램 형태 이해절대상수와 재배치상수 이해재배치 링크와 형태 이해

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

제 제 7 7 장 요약장 요약

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

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

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

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