Перемещаемость кода. Анализ ехе- и сom-файлов

Страницы работы

Содержание работы

ЛАБОРАТОРНАЯ РАБОТА №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:0010 31C0          XOR     AX,AX

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

-

Сделаем проверку заголовка ехе-файла:

  1. Сегментный адрес для загрузки(START_SEG):

               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

                                    IP=ExeIP=0003h                    

Вывод: таким образом в ходе выполнения данной части лабораторной работы мы разобрали структуру ехе-файла, а также узнали назначение отдельных элементов заголовка ехе-файла на примере файла 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:                                        

Похожие материалы

Информация о работе