Учебник хакера


S-ICE - часть 19


Нажмите несколько клавиш. Очевидно у программы Jed'а

проблемы! Jed потратил часы, изучая этот исходный код, и уверен, что в его

логике нет никаких недостатков. Однако, Jed позаимствовал несколько

вспомогательных подпрограмм у его друга Jake'а (get_key, is_space?). Jed

немного подозревает эти подпрограммы, но не может найти ошибку.



Исходный код программы Jed'а выглядит следующим образом:


Page 55,80

Title Пример программы для обучающей части Soft-ICE

DATA Segment Public 'Data'

pad db 12H dup(O)

char db 0

answer db 0

space_msg db 'Был нажат ПРОБЕЛ',0DH,0AH,'$'

no_space_msg db 'Введенный символ - НЕ '

db 'ПРОБЕЛ',0DH,0AH,'$'

DATA Ends

STACK Segment Stack 'Stack'

Dw 128 Dup (?) ;Стек программы

STACK Ends

CODE Segment Public 'Code'

Assume CS:CODE,DS:DATA,ES:Nothing,SS:STACK


start:



; Устанавливаем сегменты

mov ax,DATA

mov es,ax

mov ds,ax


; Основной цикл программы

main_loop:

call get_key

call is_space?

cmp answer,0

je no_space

; Это пробел, выводим сообщение о пробеле



mov ah,9

mov dx,offset space_msg

int 21H

jmp main_loop

; Это НЕ пробел, выводим сообщение об отсутствии пробела


no_space:

mov ah,9

mov dx,offset no_space_msg

int 21H

jmp main_loop


;----------------------------------------------------------;

; ПОДПРОГРАММЫ JAKE'а

;----------------------------------------------------------;


; Подпрограмма Get Key (одна из подпрограмм Jake'а)

get_key proc

mov ah,8

int 21H

mov char,al

ret

get_key endp


; Проверка, является ли символ пробелом (одна из подпрограмм Jake'а)


is_space? proc

cmp char,20H

jne not_space

mov answer,1

ret

not_space:

mov cs:answer,0

ret

is_space? endp


CODE Ends

End start



Jed использовал DEBUG, но не был способен решить проблему с его помощью. По

рекомендации его племянника Jethro, Jed купил Soft-ICE. Он немного сомневался

в необходимости этого, потому что он уже пытался использовать отладчик

аппаратного уровня, но так и не смог заставить его правильно работать. Он

хотел попробовать Soft-ICE, потому что он мог бы продолжать использовать DEBUG



Начало  Назад  Вперед



Книжный магазин