На этом шаге мы перечислим дополнительные утилиты, используемые при программировании на Ассемблере.
На этом шаге мы дадим краткий обзор ряда других программ, которые часто используются при программировании на Ассемблере. С некоторыми из перечисленных программ мы познакомимся в дальнейшем более подробно, а некоторые более упоминаться не будут.
Обзор редакторов начнем с редактора QEDITOR.EXE, который поставляется вместе с пакетом MASM32. Сам редактор и все сопутствующие ему утилиты написаны на ассемблере. Анализ их размера и возможностей действительно впечатляет. Например, сам редактор имеет длину всего 27 Кбайт, а утилита, используемая для просмотра отчетов о трансляции, - всего 6 Кбайт. Редактор вполне годится для работы с небольшими одномодульными приложениями. Для работы с несколькими модулями он не очень удобен. Работа редактора основана на взаимодействии с различными утилитами посредством пакетных файлов. Например, трансляцию программ осуществляет пакетный файл ASSMBL.BAT, который использует ассемблер ML.EXE, а результат ассемблирования направляется в текстовый файл ASMBL.TXT. Далее для просмотра этого файла используется простая утилита THEGUN.EXE. Аналогично осуществляется редактирование связей. Для дизассемблирования исполняемого модуля используется утилита DUMPPE.EXE, результат работы этой утилиты помещается в текстовый файл DISASM.TXT. Аналогично осуществляются и другие операции. Вы легко сможете настроить эти операции, отредактировав соответствующий пакетный файл с модификацией (при необходимости) используемых утилит (заменив, например, ML.EXE на TASM32.EXE и т. п.).
Вторая программа это EAS.EXE (Easy Assembler Shell). Редактор, а точнее оболочка, позволяет создавать и транслировать довольно сложные проекты, состоящие из ASM-, OBJ-, RC-, RES-, DEF-файлов. Программа позволяет работать как с TASM, так и MASM, а также с другими утилитами (отладчиками, редакторами ресурсов и т. д.). Непосредственно в программе можно настроить компиляторы и редакторы связей на определенный режим работы путем задания ключей этих утилит.
Отладчики позволяют исполнять программу в пошаговом режиме. В дальнейшем мы более подробно будем рассматривать отладчики и дизассемблеры. Здесь же приведем несколько наиболее известных отладчиков: CodeView (Microsoft), Turbo Debugger (Borland), Ice.
Дизассемблеры переводят исполняемый модуль в ассемблерный код. Примером простейшего дизассемблера является программа DUMPPE.EXE, работающая в строковом режиме. Пример работы программы DUMPPE.EXE представлен в листинге 1. Здесь дизассемблируется программа PROG2_2.ASM, приведенная на шаге 2. Ну как, узнали нашу программу? Смысл обозначений будет ясен из дальнейшего изложения.
kn1a.exe (hex) (dec) .EXE size (bytes) 490 1168 Minimum load size (bytes) 450 1104 Overlay number 0 0 Initial CS:IP 0000:0000 Initial SS:SP 0000:0068 184 Minimum allocation (para) 0 0 Maximum allocation (para) FFFF 65535 Header size (para) 4 4 Relocation table offset 40 64 Relocation entries 0 0 Portable Executable starts at a8 Signature 00004550 (PE) Machine 014C (Intel 386) Sections 0001 Time Date Stamp 3AE6D1B1 Wed Apr 25 19:31:29 2001 Symbol Table 00000000 Number of Symbols 00000000 Optional header size 00E0 Characteristics 010F Relocation information stripped Executable Image Line numbers stripped Local symbols stripped 32 bit word machine Magic 010B Linker Version 5.12 Size of Code 00000200 Size of Initialized Data 00000000 Size of Uninitialized Data 00000000 Address of Entry Point 00001000 Base of Code 00001000 Base of Data 00002000 Image Base 00400000 Section Alignment 00001000 File Alignment 00000200 Operating System Version 4.00 Image Version 0.00 Subsystem Version 4.00 Reserved 00000000 Image Size 00002000 Header Size 00000200 Checksum 00000000 Subsystem 0002 (Windows) DLL Characteristics 0000 Size Of Stack Reserve 00100000 Size Of Stack Commit 00001000 Size Of Heap Reserve 00100000 Size Of Heap Commit 00001000 Loader Flags 00000000 Number of Directories 00000010 Directory Name VirtAddr VirtSize --------------------------------- ----------- ------------ Export 00000000 00000000 Import 00000000 00000000 Resource 00000000 00000000 Exception 00000000 00000000 Security 00000000 00000000 Base Relocation 00000000 00000000 Debug 00000000 00000000 Decription/Architecture 00000000 00000000 Machine Value (MIPS GP) 00000000 00000000 Thread Storage 00000000 00000000 Load Configuration 00000000 00000000 Bound Import 00000000 00000000 Import Address Table 00000000 00000000 Delay Import 00000000 00000000 COM Runtime Descriptor 00000000 00000000 (reserved) 00000000 00000000 Section Table ------------------ Virtual Address 0001000 Virtual Size 00000E Raw Data Offset 000200 Raw Data Size 0000200 Relocation Offset 000000 Relocation Count 000 Line Number Offset 0000000 Line Number Count 000 Characteristics 0000020 Code Executable Readable Disassembly 00401000 start: 00401000 E803000000 call fn_00401008 00401005 C3 ret 00401006 CC int 3 00401007 CC int 3 00401008 fn_00401008: 00401008 B8E8030000 mov eax,3E8h 0040100D СЗ ret
Отметим также дизассемблер W32Dasm и дизассемблер Ida Pro. В дальнейших шагах мы будем подробно рассматривать и сами дизассемблеры, и методику их использования.
Hex-редакторы позволяют просматривать и редактировать загружаемые модули в шестнадцатеричном виде. Их великое множество, к тому же отладчики и дизассемблеры, как правило, имеют встроенные НЕХ-редакторы. Отметим только весьма популярную в хакерских кругах программу HIEW.EXE. Эта программа позволяет просматривать загружаемые модули как в шестнадцатеричном виде, так и в виде ассемблерного кода. И не только просматривать, но и редактировать.
В пакетах MASM32 и TASM32 есть компиляторы ресурсов, которые будут описаны далее. Это программы RC.EXE и BRC32.EXE соответственно.
Обычно мы пользуемся редактором ресурсов из пакета Borland C++ 4.5. Простые ресурсы можно создавать в обычном текстовом редакторе. Язык описания ресурсов будет подробно рассмотрен далее.
Со следующего шага мы начнем рассматривать основы программирования в операционной системе Windows.