Download - 7 장 링커와 로더 설계
시스템 프로그래밍
제 제 7 7 장 학습내용장 학습내용
• 로더의 종류와 형태
• 링커와 로더가 필요로하는 정보
• 원시프로그램과 번역결과
• 절대상수와 재배치상수
• 링크를 위한 어셈블링
• 외부기호와 재배치 링크의 형태
Page 2
시스템 프로그래밍
제 제 7 7 장 학습내용장 학습내용
• 패스 1 과 패스 2 의 수행과정
• 패스 1 과 패스 2 의 자료구조
• 기억장소에 적재된 후의 형태
• 패스 1 과 패스 2 의 알고리즘
Page 3
시스템 프로그래밍
로더의 종류와 형태로더의 종류와 형태
• 컴파일 즉시로더
• 절대로더
• 재배치로더
• 링킹로더
• 동적로더
Page 4
시스템 프로그래밍
링킹로더의 개념링킹로더의 개념
• 재배치링크 및 적재를 한꺼번에 수행
• 두 단계의 패스로 구성 ( 패스 1 과 패스 2 로 구성 )
Page 5
시스템 프로그래밍
링킹로더의 패스링킹로더의 패스 11 과 패스과 패스22
• 패스 1 의 기능
* 모듈에 기억장소 할당
* 외부기호들의 주소 확정
* 외부기호표 작성
• 패스 2 의 기능
* 모든 상대주소를 절대주소로 변환
* 외부기호표 참조 후 적재
Page 6
시스템 프로그래밍
링킹로더의 수행과정링킹로더의 수행과정
링킹로더
500
530
550
A
B
C
기억장소0...29
A
0...19
B
0...9
C
Page 7
시스템 프로그래밍
링킹로더의 역할링킹로더의 역할
• 링크 : 링킹로더
• 기억장소 할당 : 운영체제
• 재배치 : 링킹로더
• 적재 : 링킹로더
Page 8
시스템 프로그래밍
동적로더의 개념동적로더의 개념
• 재배치로더와 링킹로더의 단점 보완
• 기억장소의 효율적 활용
• 서브루틴들의 상호 호출관계 파악
• 오버레이 구조를 활용
Page 9
시스템 프로그래밍
동적적재시 서브루틴의 호출관계동적적재시 서브루틴의 호출관계
A (20K)
B (20K)
C (30K)
D (10K)
E (20K)
70K
Page 10
시스템 프로그래밍
동적적재시 기억장소의 변화동적적재시 기억장소의 변화
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
시스템 프로그래밍
원시프로그램의 형태원시프로그램의 형태
• EXTRN 으로 선언된 기호
* 외부에서 정의되고 내부에서 이용
• PUBLIC 으로 선언된 기호
* 내부에서 정의되고 외부에서 이용
Page 13
시스템 프로그래밍
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
시스템 프로그래밍
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
시스템 프로그래밍
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
시스템 프로그래밍
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
시스템 프로그래밍
번역된 프로그램의 형태번역된 프로그램의 형태
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
시스템 프로그래밍
절대상수와 재배치상수절대상수와 재배치상수
• 절대상수
* 같은 모듈내의 기호끼리 연산결과
* SAVE - RESULT = 02
* 어셈블러가 계산
• 재배치상수
* 기호의 값이 결정된 후 연산결과 결정
* SUM - 5
* 재배치비트 설정
Page 19
시스템 프로그래밍
링크를 위한 어셈블링링크를 위한 어셈블링
• 번역된 프로그램 : 목적코드로 된 모듈
• 모듈의 길이 : 외부기호표
• 외부기호 : 외부기호표
• 내부기호 : 외부기호표
• 재배치주소와 방법 : 재배치 링크표
Page 20
시스템 프로그래밍
원시프로그램과 번역된 프로그램원시프로그램과 번역된 프로그램
• 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
시스템 프로그래밍
• 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
시스템 프로그래밍
• 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
시스템 프로그래밍
원시프로그램과 번역된 프로그램원시프로그램과 번역된 프로그램
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
시스템 프로그래밍
번역된 프로그램의 분석번역된 프로그램의 분석
• MAIN 의 상대주소 0018H 의 경우
* A1 = (A1 - A) + A
* A1 + 10 = (A1 - A) + A + 10
= 16H + A + 10
= 20H + A
Page 25
시스템 프로그래밍
번역된 프로그램의 분석번역된 프로그램의 분석
• 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
시스템 프로그래밍
외부기호표의 형태와 예외부기호표의 형태와 예
• 모듈 MAIN 의 외부기호표
기호기호
MAINMAIN
AA
A1A1
A2A2
BB
B1B1
분류분류
SDSD
LDLD
LDLD
LDLD
ERER
ERER
상대주소상대주소
00000000
00000000
00160016
00180018
--
--
길이길이
1E1E
1E1E
--
--
--
--
Page 27
시스템 프로그래밍
재배치 링크의 형태와 예재배치 링크의 형태와 예
• 모듈 MAIN 의 재배치 링크표
+ 또는 - +++++++
상대주소00040007000B000F00160018001C
기호AAABBAB1
상대주소 0004H 에 A 의 값을 더하라 (+)
Page 28
시스템 프로그래밍
재배치 링크의 형태와 예재배치 링크의 형태와 예
• 모듈 SUBST 의 외부기호표
기호
MAIN
B
B1
B2
A1
분류
SD
LD
LD
LD
ER
상대주소
0000
0000
0013
0015
-
길이
19
13
-
-
-
Page 29
시스템 프로그래밍
재배치 링크의 형태와 예재배치 링크의 형태와 예
• 모듈 SUBST 의 재배치 링크표
+ 또는 -
+
+
+
+
-
상대주소
0006
0009
000D
0017
0017
기호
B
B
B
B
A1
Page 30
시스템 프로그래밍
링크 및 재배치의 과정링크 및 재배치의 과정
• 패스 1 의 수행과정
* 단순링크
* 총괄외부기호표 작성
* 총괄재배치링크표 작성
• 패스 2 의 수행과정
* 기호값의 수정위치와 방법 결정
* 필요한 기호의 값 탐색
* 재배치비트 참고 후 재배치
Page 31
시스템 프로그래밍
패스패스 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
시스템 프로그래밍
패스패스 11 이 만든 단순링크된 모듈이 만든 단순링크된 모듈
0012 00 MOV AH, 4C
0014 00 INT 21
0016 10 0000
0018 10 0020
001A 00 0002
001C 10 0005
재배치 비트상대주소
Page 33
시스템 프로그래밍
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
시스템 프로그래밍
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
시스템 프로그래밍
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
시스템 프로그래밍
패스패스 11 이 만든 총괄외부기호표 형태이 만든 총괄외부기호표 형태
설명
(00H + 01EH)
(13H + 01EH)
(15H + 01EH)
기호
A
A1
A2
B
B1
B2
주소값
0000
0016
0018
001E
0031
0033
Page 37
시스템 프로그래밍
패스패스 11 이 만든 총괄재배치링크표이 만든 총괄재배치링크표
+ 또는 -
+
+
+
+
+
+
+
기호
A
A
A
B
B
A
B1
주소값
0004
0007
000B
000F
0016
0018
001C
Page 38
시스템 프로그래밍
패스패스 11 이 만든 총괄재배치링크표이 만든 총괄재배치링크표
+
+
+
+
-
B
B
B
B
A1
0024(06H + 01EH)
0027(09H + 01EH)
002B(0DH + 01EH)
0035(17H + 01EH)
0035(17H + 01EH)
Page 39
시스템 프로그래밍
패스패스 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
시스템 프로그래밍
패스패스 22 가 만든 적재모듈가 만든 적재모듈
0012 00 -
0014 00 -
0016 10 001E
0018 10 0020
001A 00 0002
001C 10 0036
재배치 비트상대주소
Page 41
시스템 프로그래밍
패스패스 22 가 만든 적재모듈가 만든 적재모듈
SUBST.ASM
001E 00 -
001F 00 -
0020 00 -
0022 00 -
0024 01 MOV AX, [0031]
0027 01 ADD AX, [0035]
재배치 비트상대주소
Page 42
시스템 프로그래밍
패스패스 22 가 만든 적재모듈가 만든 적재모듈
002B 00 MOV [0033], AX
002E 00 -
002F 00 -
0030 00 -
0031 10 000A
0033 00 -
0035 00 001B
재배치 비트상대주소
Page 43
시스템 프로그래밍
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
시스템 프로그래밍
링크재배치상수와 적재재배치상수링크재배치상수와 적재재배치상수
• 링크재배치상수
모듈들을 링크하면 값이 결정
예 ) B1 - A1
• 적재재배치상수
적재될 때 값이 결정
Page 45
시스템 프로그래밍
기억장소에 적재된 후의 모양기억장소에 적재된 후의 모양
• 기억장소의 할당이 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
시스템 프로그래밍
기억장소에 적재된 후의 모양기억장소에 적재된 후의 모양
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
시스템 프로그래밍
기억장소에 적재된 후의 모양기억장소에 적재된 후의 모양
기억장치
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
시스템 프로그래밍
기억장소에 적재된 후의 모양기억장소에 적재된 후의 모양
기억장치
58 POP AX
C3 RET
0A00 -
0000 -
1B00 -
0093
0094
0095
0097
0099
주소
Page 49
시스템 프로그래밍
패스 2
패스패스 11 과 패스과 패스 22 의 데이터베이스의 데이터베이스
패스 1
번역된세그먼트들
외부기호표
재배치링크표
단순링크된모듈
적재모듈
총괄외부 기호표
총괄재배치링크표
Page 50
시스템 프로그래밍
세그먼트 배열순서 결정
시 작
세그먼트들을배열순서에따라 연결
패스패스 11 의 알고리즘의 알고리즘
기호가 중복되지 않도록 기호표들을단순연결
재배치링크표들을 단순연결
입력
Page 51
시스템 프로그래밍
패스 1끝
단순링크된모듈
상대주소변경( 앞에 배열된세그먼트의길이를 더한다 )
패스패스 11 의 알고리즘의 알고리즘
기호의 상대주소변경 상대주소변경
총괄외부기호표
총괄재배치링크표
Page 52
시스템 프로그래밍
패스패스 22 의 알고리즘의 알고리즘
읽은 줄의 내용을 다음과 같이 변수에 치환 addr = 상대주소 symbol = 기호 sign = + 또는 -
총괄재배치링크표에서 한 줄을 읽음
총괄재배치링크표 끝 ?
아니오
예
패스 2 시작
패스 2 끝
Page 53
시스템 프로그래밍
실패
성공
오류
패스패스 22 의 알고리즘의 알고리즘
재배치비트가 가리키는 데이터에Value 를 sign 에 따라 더함
단순링크 모듈에서상대주소 =addr 탐색
실패
성공
탐색된 기호의 상대주소를 변수에 치환 Value= 주소값
오류총괄외부기호표에서 기호 =symbol 인 행을 탐색
Page 54
시스템 프로그래밍
제 제 7 7 장 요약장 요약
• 링커와 로더의 역할
• 로더의 종류
• 링커와 로더가 필요한 정보 이해
• 번역된 프로그램 형태 이해
• 절대상수와 재배치상수 이해
• 재배치 링크와 형태 이해
Page 55
시스템 프로그래밍
제 제 7 7 장 요약장 요약
• 패스 1 과 패스 2 의 수행과정 이해
• 패스 1 과 패스 2 의 자료구조 이해
• 기억장소에 적재된 상태 이해
• 패스 1 과 패스 2 의 알고리즘 이해
Page 56