Міністерство Освіти і Науки України
Національний Технічний Університет
Лабораторна робота № 2
по курсу “Системне програмування”
на тему:
“Декомпозиція коду”
Виконав:
студент групи КІТ-11А
Ткаченко С. М.
Мета роботи:
Отримання навичок аналізу будь-якого машинного коду. Ознайомлення з декомпозицією коду під час деасемблерування.
Індивідуальне завдання:
Отримати лістінг фрагменту машинного коду утиліти 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, виконуються деякі інші дії.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.