Декомпозиція коду. Ознайомлення з декомпозицією коду під час деасемблерування

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

3 страницы (Word-файл)

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

Міністерство Освіти і Науки України

Національний Технічний Університет

“Харківський Політехнічний Інститут”

Кафедра обчислювальної техніки та програмування

Лабораторна робота № 2

по курсу “Системне програмування”

на тему:

“Декомпозиція коду”

Виконав:

студент групи КІТ-11А

Ткаченко С. М.

Харків 2003

Мета роботи:

   Отримання навичок аналізу будь-якого машинного коду. Ознайомлення з декомпозицією коду під час деасемблерування.

Індивідуальне завдання:

   Отримати лістінг фрагменту машинного коду утиліти format.com з набору програм операційної системи Windows Me та провести його аналіз із застосуванням декомпозиції.

Лістінг машинного коду:

10A8:57F9 5A            POP     DX         

; (DX) = SS:[SP]

; (SP) = (SP) + 2

; (IP) = 57FA                       

10A8:57FA 59            POP     CX         

; (CX) = SS:[SP]

; (SP) = (SP) + 2

; (IP) = 57FB                      

10A8:57FB 53            PUSH    BX         

; (SP) = (SP) - 2

; SS:[SP] = (BX)

; (IP) = 57FC                   

10A8:57FC 8B1E8F06      MOV     BX,[068F]  

; (BX) = DS:[068F]

; (IP) = 5800                      

10A8:5800 83EB10        SUB     BX,+10     

; (BX) = (BX) - 10h

; (IP) = 5803                      

10A8:5803 B80020        MOV     AX,2000   

; (AX) = 2000h

; (IP) = 5806                      

10A8:5806 2BC3          SUB     AX,BX      

; (AX) = (AX) - (BX)                      

; (IP) = 5808

10A8:5808 5B            POP     BX         

; (BX) = SS:[SP]

; (SP) = (SP) + 2

; (IP) = 5809                       

10A8:5809 7818          JS      5823       

; если SF = 1( т.е. старший бит результата вычитания (AX) - (BX) равен 1;

; а это будет в том случае, если (AX) < (BX) ), тогда (IP) = 5823

; иначе ( если (AX) >= (BX) ) (IP) = 580B                      

//////////////////////////////////////////////////////////////////////////

10A8:580B 8B0E8D06      MOV     CX,[068D]  

; (CX) = DS:[068D]

; (IP) = 580F                      

10A8:580F 83E910        SUB     CX,+10     

; (CX) = (CX) - 10h              

; (IP) = 5812        

10A8:5812 1E            PUSH    DS         

; (SP) = (SP) - 2

; SS:[SP] = (DS)

; (IP) = 5813                     

10A8:5813 8CD8          MOV     AX,DS      

; (AX) = (DS)

; (IP) = 5815                     

10A8:5815 8EC0          MOV     ES,AX      

; (ES) = (AX)

; (IP) = 5817

10A8:5817 8D16A706      LEA     DX,[06A7]  

; (DX) = 06A7

; (IP) = 581B                      

10A8:581B B43F          MOV     AH,3F      

; (AH) = 3Fh

; (IP) = 581D                     

10A8:581D CD21          INT     21         

; Вызывается функция DOS 3Fh

; Эта функция читает (CX) байтов из устройства (или файла) с номером

; handler'а (BX) в буфер по адресу (DS):[DX]

10A8:581F 1F            POP     DS         

; (DS) = SS:[SP]

; (SP) = (SP) +2

; (IP) = 5820                      

10A8:5820 7201          JB      5823       

; если CF = 1( т.е. в результате выполнения функции DOS 3Fh произошла

; ошибка), тогда (IP) = 5823

; если ошибки не было, то (IP) = 5822                      

10A8:5822 C3            RET                

; возврат из процедуры

; (IP) = SS:[SP]

; (SP) = (SP) - 2

10A8:5823 F9            STC                

; CF = 1    

; (IP) = 5824                 

10A8:5824 EBFC          JMP     5822       

; переход на RET

; (IP) = 5822                      

Висновки:

   Поданий фрагмент програми являє собою процедуру, що складається з двох частин. Перша частина порівнює деякі два числа та в залежності від результату порівняння або встановлює CF=1 та передає керування до головної процедури, або передає керування до другої частини процедури.

   Друга частина процедури забезпечує прийом інформації від деякого пристрою. Якщо читання інформації пройшло без помилок, то CF=0; якщо були помилки, то CF=1.  

   Отже, головна процедура, отримавши керування від поданої процедури, аналізує прапор CF. Якщо він дорівнює 1, можливо, викликається обробник помилки. Якщо CF=0, виконуються деякі інші дії.

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

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