Professional Documents
Culture Documents
l2 Object Files
l2 Object Files
l2 Object Files
T»p èi t÷ñng l nhúng t»p nhà ph¥n ÷ñc sinh ra tø qu¡ tr¼nh bi¶n
dàch ho°c hñp dàch
C¡c t»p èi t÷ñng câ thº k¸t hñp l¤i (bði tr¼nh li¶n k¸t - linker) º t¤o
n¶n mët t»p èi t÷ñng duy nh§t
T»p èi t÷ñng câ thº ÷ñc n¤p l¶n bë nhî (bði tr¼nh n¤p - loader) º
thüc thi ho°c º c¡c ch÷ìng tr¼nh kh¡c sû döng
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 2 / 35
Möc ti¶u v nëi dung cõa b i gi£ng
Möc ti¶u:
Hiºu ÷ñc vai trá cõa c¡c t»p èi t÷ñng
Hiºu c§u tróc cõa c¡c t»p èi t÷ñng v nhúng cì ch¸ tê chùc cõa
chóng
d÷îi h¤n ch¸ ph¦n cùng
trong vi»c c§p ph¡t bë nhî
trong vi»c t¡i ành và
Nëi dung
T¼m hiºu c§u tróc cõa mët sè t»p èi t÷ñng phê bi¸n
MS-DOS COM
MS-DOS EXE
UNIX a.out
UNIX ELF
T¼m hiºu v· v§n · c§p ph¡t bë nhî cho t»p èi t÷ñng
T¼m hiºu v· c¡c kÿ thuªt t¡i ành và cho t»p èi t÷ñng
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 3 / 35
Ph¥n lo¤i m¢ èi t÷ñng
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 4 / 35
Nëi dung t»p èi t÷ñng
Header: Thæng tin chung v· to n bë t»p èi t÷ñng
K½ch th÷îc tøng o¤n m¢
T¶n t»p èi t÷ñng
Ng y t¤o
M¢ èi t÷ñng
M¢ thüc thi
Dú li»u
Thæng tin t¡i ành và
C¡c và tr½ tr¶n m¢ èi t÷ñng c¦n ph£i i·u ch¿nh l¤i khi bë li¶n k¸t thay
êi àa ch¿ gèc cõa o¤n m¢ â
Kþ hi»u
Kþ hi»u to n cöc ÷ñc ành ngh¾a trong module (export)
Kþ hi»u tham chi¸u ra b¶n ngo i module (import)
Kþ hi»u ÷ñc tr¼nh li¶n k¸t ành ngh¾a
Thæng tin hé trñ gï rèi
Nëi dung t»p nguçn v ch¿ sè dáng
C¡c kþ hi»u sû döng cöc bë trong module
C§u tróc dú li»u ÷ñc sû döng trong m¢ èi t÷ñng
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 5 / 35
C¡c d¤ng m¢ èi t÷ñng
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 6 / 35
Qu£n lþ bë nhî tr¶n bë vi xû lþ 8086
Bë xû lþ 8086 sû döng c¡c thanh ghi 16 bit º ¡nh àa ch¿ cho
ch÷ìng tr¼nh
VD. Con trä l»nh IP, con trä ng«n x¸p SP
Giîi h¤n 64K bë nhî
º sû döng ÷ñc khæng gian bë nhî lîn hìn 64K ph£i k¸t hñp th¶m
c¡c thanh ghi o¤n 16 bit
Thanh ghi o¤n cho m¢ ch÷ìng tr¼nh CS
Thanh ghi o¤n cho ng«n x¸p SS
Thanh ghi o¤n cho dú li»u DS, ES
Chuyºn êi àa ch¿
(segment:offset) → àa ch¿ tuy»t èi = (segment lsh 4) + offset
Truy nhªp tèi a 1MB bë nhî
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 7 / 35
àa ch¿ o¤n
V½ dö
CS:IP trä tîi àa ch¿ l»nh
CS=0x1234, IP=0x2140
àa ch¿ tuy»t èi: 0x12340 + 0x2140 = 0x14480
T§t c£ c¡c ch÷ìng tr¼nh ÷ñc n¤p l¶n tr¶n còng mët khæng gian àa
ch¿
Khi mët ch÷ìng tr¼nh ÷ñc n¤p
Mët vòng bë nhî mîi ÷ñc c§p ph¡t ngay sau vòng bë nhî ¢ sû
döng, tr¶n ¿nh vòng bë nhî tü do
PSP(program segment prefix, 256 bytes) ÷ñc t¤o ra tr¶n ¦u vòng bë
nhî mîi n y
Ch÷¡ thæng tin v· k½ch th÷îc vòng bë nhî ÷ñc c§p ph¡t, con trä tîi
PSP cõa ch÷ìng tr¼nh gåi,...
N¤p v thüc thi ch÷ìng tr¼nh
Ch÷ìng tr¼nh khæng ÷ñc n¤p t¤i mët àa ch¿ cè ành
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 9 / 35
Qu£n lþ bë nhî tr¶n MS-DOS
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 10 / 35
T»p èi t÷ñng MS-DOS COM (Null Object Format)
°c iºm
ìn gi£n
Ch¿ chùa m¢ ch÷ìng tr¼nh (m¢ thüc thi, dú li»u), khæng chùa th¶m c¡c
thæng tin kh¡c
Khi mët ch÷ìng tr¼nh ÷ñc n¤p
Mët vòng bë nhî mîi ÷ñc c§p ph¡t ngay sau vòng bë nhî ¢ sû
döng, tr¶n ¿nh vòng bë nhî tü do
PSP(program segment prefix, 256 bytes) ÷ñc t¤o ra tr¶n ¦u vòng bë
nhî mîi n y
Ch÷¡ thæng tin v· k½ch th÷îc vòng bë nhî ÷ñc c§p ph¡t, con trä tîi
PSP cõa ch÷ìng tr¼nh gåi,...
N¤p v thüc thi ch÷ìng tr¼nh
Ch÷ìng tr¼nh khæng ÷ñc n¤p t¤i mët àa ch¿ cè ành
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 11 / 35
T»p èi t÷ñng MS-DOS COM
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 12 / 35
T»p èi t÷ñng MS-DOS COM
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 13 / 35
T»p èi t÷ñng MS-DOS EXE (MZ)
Chùa b£ng t¡i ành và
K½ch th÷îc câ thº lîn hìn 64KB
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 14 / 35
T»p èi t÷ñng MS-DOS EXE
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 15 / 35
T»p èi t÷ñng MS-DOS EXE
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 16 / 35
T»p èi t÷ñng MS-DOS EXE
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 17 / 35
MS-DOS EXE header
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 18 / 35
T»p èi t÷ñng a.out (NMAGIC)
L khuæn d¤ng t»p èi t÷ñng truy·n thèng cõa UNIX, sû döng rëng
r¢i tø nhúng n«m 1990
Ch÷ìng tr¼nh v dú li»u ÷ñc qu£n lþ ëc lªp
Ch÷ìng tr¼nh câ thº ÷ñc ph¥n chia th nh c¡c trang ch¿ åc ho°c c¡c
trang åc/ghi. £m b£o t½nh an to n
D¹ d ng chia s´
fork: Chia s´ ch÷ìng tr¼nh
thread: Chia s´ ch÷ìng tr¼nh v dú li»u, ng«n x¸p ri¶ng
vthread: Chia s´ måi thù
iºm v o méi ch÷ìng tr¼nh l x¡c ành do hé trñ ch¸ ë bë nhî £o
(ph¦n cùng thüc hi»n vi»c t¡i ành và)
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 19 / 35
T»p èi t÷ñng UNIX a.out
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 20 / 35
a.out header
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 21 / 35
C¡c ph¥n o¤n bë nhî trong t»p a.out
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 22 / 35
N¤p v thüc thi t»p èi t÷ñng a.out
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 23 / 35
C¡c d¤ng d¨n xu§t cõa t»p èi t÷ñng a.out
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 24 / 35
Khuæn d¤ng t¡i ành và cõa a.out
Khuæn d¤ng t¡i ành và cõa a.out (relocatable a.out) l khuæn d¤ng
t»p èi t÷ñng hé trñ t½nh n«ng li¶n k¸t (t»p .o)
Chùa c¡c thæng tin
thæng tin t¡i ành và cho m¢ ch÷ìng tr¼nh
thæng tin t¡i ành và cho dú li»u
b£ng kþ hi»u
b£ng t¶n
Khæng hé trñ
Li¶n k¸t ëng
Ngæn ngú h÷îng èi t÷ñng (VD. C++)
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 25 / 35
Khuæn d¤ng t¡i ành và cõa a.out
file
+--------+
| header |
+--------+
|text |
+--------+
|data |
+--------+
|reloc. | ... thæng tin cho vi»c t¡i ành và
|for text| (ch¿ cho c¡c kþ hi»u ch÷a ành ngh¾a)
+--------+ - àa ch¿ (offset cõa text/data seg.)
|reloc. | - text seg.? hay data seg.?
|for data| - con trä tîi b£ng kþ hi»u
+--------+
|symbol | ... Thæng tin v· kþ hi»u t¡i ành và (h m/bi¸n)
| table| - àa ch¿(offset tr¶n b£ng x¥u kþ tü)
+--------+ - lo¤i (to n cöc hay cöc bë)
|string |
| table| ... Nh¢n cõa kþ hi»u (h m/bi¸n)
+--------+
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 26 / 35
T»p èi t÷ñng ELF (Executable and Linkable Format)
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 27 / 35
C§u tróc t»p èi t÷ñng ELF
File
+----------------+
| ELF header |
+----------------+
|Program header |------+
| Table| s
for +----------------+ e
linker s----> + | <--- g for
e----> + | m loader
c +----------------+ e
t----> + | <--- n
i----> + | t
o| +----------------+ s
n+----> + | <----+
s| +----------------+
+----- |Section header |
| Table|
+----------------+
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 28 / 35
ELF header
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 29 / 35
Ph¥n vòng trong t»p èi t÷ñng ELF
Ch÷ìng tr¼nh v dú li»u ÷ñc ph¥n th nh nhi·u vòng, thuªn ti»n cho
pha li¶n k¸t
.text: Vòng m¢ ch÷ìng tr¼nh
.init: Vòng m¢ ch÷ìng tr¼nh cho khði t¤o ch÷ìng tr¼nh
.fini: Vòng m¢ ch÷ìng tr¼nh cho k¸t thóc ch÷ìng tr¼nh
.data: Vòng dú li»u
.bbs: Vòng dú li»u ch÷a khði t¤o
.rodata: Vòng dú li»u ch¿ åc
.rel .text: B£ng t¡i ành và cho vòng m¢ ch÷ìng tr¼nh
.rel .rodata: B£ng t¡i ành và cho vòng dú li»u ch¿ åc
.rel .data: B£ng t¡i ành và cho vòng dú li»u
.symtab: B£ng kþ hi»u
.dynsym: B£ng kþ hi»u cho li¶n k¸t ëng
.strtab: B£ng t¶n
.dynstr: B£ng t¶n cho c¡c kþ hi»u li¶n k¸t ëng
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 30 / 35
Section header
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 31 / 35
Ph¥n o¤n trong t»p èi t÷ñng ELF
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 32 / 35
Program header
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 33 / 35
B£ng kþ hi»u trong t»p èi t÷ñng ELF
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 34 / 35
B£ng kþ hi»u
Nguy¹n Húu ùc (Vi»n CNTT & TT) T»p èi t÷ñng 35 / 35