ЛАБОРАТОРНАЯ РАБОТА №5
Тема: »ПЕРЕМЕЩАЕМОСТЬ КОДА»
Цель работы: Получение навыков анализа ехе- и сom-файлов, а также
подтвердить неперемещаемость кода com-файлов.
Индивидуальное задание:
· Провести анализ файла pas1.exe, взятого из первой лабораторной работы
· Доказать и объяснить неперемещаемость кода com-файла(mode.com).
I часть
Часть заголовка файла pas1.exe:
_ 00000000: 4D 5A 10 01-08 00 13 00-07 00 26 04-26 A4 10 01 MZ &
_ 00000010: 00 40 00 00-03 00 00 00-1C 00 00 00-06 00 00 00 @
_ 00000020: 0B 00 00 00-15 00 00 00-1A 00 00 00-5A 00 00 00 § Z
Рассмотрим содержимое(назначение) отдельных элементов заголовка:
Смещение Содержимое Данные
00-01 4D5A - "подпись" компоновщика, указывающая,
что файл является файлом EXE.
02-03 Длина образа задачи по модулю 512 (т.е. PartPag=0110h(272d)
число полезных байт в последнем блоке).
04-05 Длина файла в блоках. PageCnt=0008h
06-07 Число элементов таблицы настройки адресов. 0013h(19d)
08-09 Длина заголовка в 16-ти байтных параграфах. HdrSize=0007h
0A-0B Минимальный объем памяти, которую нужно MinMem=0426h(1062d)
выделить после конца образа задачи.
(в 16-ти байтных параграфах).
0C-0D Максимальный объем памяти, которую нужно MaxMem=A426h(42022d)
выделить после конца образа задачи.
(в 16-ти байтных параграфах).
0E-0F Сегментный адрес начала стекового сегмента ReloSS=0110h
относительно начала образа задачи.
10-11 Значение SP при входе в задачу. ExeSP=4000h
12-13 Контрольная сумма - ноль минус 0000h
результат сложения без переноса всех
слов файла.
14-15 Значение IP (счетчика команд)при входе в задачу. ExeIP=0003h
16-17 Сегментный адрес начала кодового сегмента ReloCS=0000h
относительно начала образа задачи.
18-19 Адрес первого элемента таблицы настройки адресов 001Ch
относительно начала файла.
1A-1B Номер сегмента перекрытий. 0000h
(0 для корневого сегмента программы).
Листинг машинного кода(pas1.exe)
-u
14CF:0003 9A00003815 CALL 1538:0000
14CF:0008 9A0D00D614 CALL 14D6:000D
14CF:000D 55 PUSH BP
14CF:000E 89E5 MOV BP,SP
14CF:0012 9ACD023815 CALL 1538:02CD
14CF:0017 9ACC01D614 CALL 14D6:01CC
14CF:001C C70666005555 MOV WORD PTR [0066],5555
14CF:0022 C70664000100 MOV WORD PTR [0064],0001
-
Состояние регистров перед выполнением программы:
-r
AX=0000 BX=0000 CX=0D10 DX=0000 SP=4000 BP=0000 SI=0000 DI=0000
DS=14BF ES=14BF SS=15DF CS=14CF IP=0003 NV UP EI PL NZ NA PO NC
14CF:0003 9A00003815 CALL 1538:0000
-
Сделаем проверку заголовка ехе-файла:
PSP=ES=DS
START_SEG=PSP+10h=14BFh+10h=14CFh
2. Вычисляем RELO_SEG:
RELO_SEG=START_SEG+I_SEG=14CFh+0000h=14CFh
4. Читаем слово по адресу RELO_SEG:I_OFF и получаем 0069h
5. К прочитанному слову прибавляем START_SEG:
0069h+14CFh=1538h
6. Найдём SS и SP:
SS=START_SEG+ReloSS=14CFh+0110h=15DFh
SP=ExeSP=4000h
7. Найдём CS и IP:
CS= START_SEG+ReloCS=14CFh+0000h=14CFh
Вывод: таким образом в ходе выполнения данной части лабораторной работы мы разобрали структуру ехе-файла, а также узнали назначение отдельных элементов заголовка ехе-файла на примере файла pas1.exe, полученного в первой лабораторной работе.
II часть
Проверка неперемещаемости кода com–файла.
Листинг машинного кода до сдвига в памяти(mode.com)
-u 0e4d:0100 012f
0E4D:0100 E9482B JMP 2C4B
0E4D:0103 80FC04 CMP AH,04
0E4D:0106 7319 JNB 0121
0E4D:0108 51 PUSH CX
0E4D:0109 8ACA MOV CL,DL
0E4D:010B D0E1 SHL CL,1
0E4D:010D 32ED XOR CH,CH
0E4D:010F 80CD03 OR CH,03
0E4D:0112 D2E5 SHL CH,CL
0E4D:0114 2E CS:
0E4D:0115 222E8201 AND CH,[0182]
0E4D:0119 2E CS:
0E4D:011A 890E6902 MOV [0269],CX
0E4D:011E 59 POP CX
0E4D:011F 7505 JNZ 0126
0E4D:0121 EA39E700F0 JMP F000:E739
0E4D:0126 2E CS:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.