Вторник, 22.07.2025, 16:44 Приветствую Вас Гость

On-line: Книги, учебники, статьи

Главная | Регистрация | Вход | RSS

Глава 2. Обзор отладчиков и дизассемблеров(2)

II

Утилиты других производителей

DUMPPE.EXE

Данная программа рассматривалась нами в гл. 1.1. Она во многом похожа на предыдущую программу DUMPBIN.EXE, но более удобна, хотя и обладает несколько меньшими возможностями.

HIEW.EXE

Данная программа широко известна в среде программистов, скажем так, хакерского направления. Название программы происходит от фразы "Hacker's View". Основная задача, которую выполняет данная программа - просматривать и редактировать загружаемые модули. Причем просмотр и редактирование допускается в трех вариантах: двоичный, текстовый и ассемблерный. Хороших дизассемблирующих программ создано довольно много, а вот программ, подобных данной, можно по пальцам перечесть.

Интерфейс программы весьма напоминает интерфейс редакторов таких программ, как FAR или Norton Commander (см. Рис. 4.2.2.). Все команды осуществляются при помощи функциональных клавиш с использованием клавиш "Alt" и "Ctrl". Например, нажимая клавишу F4, вы получаете возможность выбрать способ представления двоичного файла: текстовый, ассемблерный или двоичный. Нажимая клавишу F3 (при условии, если Вы находитесь в двоичном или ассемблерном просмотре), Вы получаете возможность редактировать файл. Если же, находясь в ассемблерном просмотре, Вы после F3 нажмете еще и F2, то сможете редактировать машинную команду в символьном виде. Мы не будем далее останавливаться на командах данной программы, поскольку они просты, очевидны и могут быть получены просто по F1, а перейдем сразу к простому примеру использования данной программы, хотя пример тематически и относится к материалу Гл. 4.6. Чтобы слишком не загромождать рассмотрение возьмем простую консольную программу.

Рис. 4.2.2. Внешний вид программы HIEW.EXE

Ниже (Рис. 4.2.3) представлена простая консольная программа, выводящая на экран текстовую строку.

.386P
; плоская модель
.MODEL FLAT, stdcall
; константы
STD_OUTPUT_HANDLE equ -11
INVALID_HANDLE_VALUE equ -1
; прототипы внешних процедур
EXTERN GetStdHandle@4:NEAR
EXTERN WriteConsoleA@20:NEAR
EXTERN ExitProcess@4:NEAR
; директивы компоновщику для подключения библиотек
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
;-------------------------------------------------
; сегмент данных
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'
 BUF DB "Строка для вывода",0
 LENS DWORD ? ; количество выведенных символов
 HANDL DWORD ?
_DATA ENDS

; сегмент кода
_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'
START:
; получить HANDLE вывода
 PUSH STD_OUTPUT_HANDLE
 CALL GetStdHandle@4
 CMP EAX,INVALID_HANDLE_VALUE
 JNE _EX
 MOV HANDL,EAX
; вывод строки
 PUSH 0
 PUSH OFFSET LENS
 PUSH 17
 PUSH OFFSET BUF
 PUSH HANDL
 CALL WriteConsoleA@20
_EX:
 PUSH 0
 CALL ExitProcess@4
_TEXT ENDS
END START

Рис. 4.2.3. Консольная программа.

Программа на Рис. 4.2.3 проста и корректна. Представьте теперь, что при отладке Вы случайно изменили одну команду: вместо JE поставили JNE. В результате поспе трансляции программа перестала работать. Можно исправить ее, не прибегая к ассемблерному тексту? Конечно. Для этого в начале ее следует дизассемблировать, найти ошибку, а потом воспользоваться программой HIEW.EXE. Вообще говоря, можно ограничиться только программой HIEW, так как она вполне корректно дизассемблирует. Однако мы нарочно проведем исправление в два этапа.

Дизассемблируем модуль при помощи программы DUMPBIN.EXE. Вот дизассемблированный текст программы (Рис. 4.2.4).

Dump of file cons1.exe

File Type: EXECUTABLE IMAGE

 00401000: 6A F5 push 0F5h
 00401002: E8 2B 00 00 00 call 00401032
 00401007: 83 F8 FF cmp eax,0FFFFFFFFh
 0040100A: 75 1E jne 0040102A
 0040100C: A3 16 30 40 00 mov [00403016],eax
 00401011: 6A 00 push 0
 00401013: 68 12 30 40 00 push 403012h
 00401018: 6A 11 push 11h
 0040101A: 68 00 30 40 00 push 403000h
 0040101F: FF 35 16 30 40 00 push dword ptr ds:[00403016h]
 00401025: E8 0E 00 00 00 call 00401038
 0040102A: 6A 00 push 0
 0040102C: E8 0D 00 00 00 call 0040103E
 00401031: CC int 3
 00401032: FF 25 08 20 40 00 jmp dword ptr ds:[00402008h]
 00401038: FF 25 00 20 40 00 jmp dword ptr ds:[00402000h]
 0040103E: FF 25 04 20 40 00 jmp dword ptr ds:[00402004h]




Вход на сайт
Поиск
Календарь
«  Июль 2025  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей
Наш опрос
Как Вам удобнее??
Всего ответов: 341
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0