а затем слегка его подправим.
m 0 l 200 100 w q
Осталось лишь добавить PE-заголовок. Сначала скопируем его шаблон (header.txt) в рабочий каталог, а затем слегка его подправим. Потребуются изменения всего в трех местах. Самое главное - нужно изменить подсистему: вместо графической (2) поставить консольную (3). Собственно, это единственное, чем консольные приложения отличаются от графических! Находим в шаблоне строки:
a 9C ; Подсистема: 2 - графическая, 03 - консольная (2 байта)
Сразу после нее должно быть:
db 03 00
Теперь надо указать расположение таблицы импорта. Находим строку:
; Здесь начинается первый элемент каталога:
За ней должен следовать текст:
; смещение таблицы экспорта (4 байта) db 0 0 0 0 ; размер таблицы экспорта (4 байта) db 0 0 0 0 ; Второй элемент каталога: ; смещение таблицы импорта (4 байта) db 20 30 0 0 ; размер таблицы импорта (4 байта) db 28 0 0 0
Наконец, мы поменяли местами секции .data и .rdata (хотя в принципе этого можно было и не делать). Находим начало второй секции:
; вторая секция
И заменяем оставшийся текст на следующий:
db '.data' 0 0 0 db 0 2 0 0 db 0 20 0 0 db 0 2 0 0 db 0 4 0 0 db 0 0 0 0 0 0 0 0 0 0 0 0 db 40 0 0 c0 ; ; третья секция db '.rdata' 0 0 db 0 2 0 0 db 0 30 0 0 db 0 2 0 0 db 0 6 0 0 db 0 0 0 0 0 0 0 0 0 0 0 0 db 40 0 0 40
m 0 l 200 100 w q
Вот и все. В файле сборки (make.bat) секции также должны идти в соответствующем порядке:
@echo off debug < header.txt > report.lst debug < code.txt >> report.lst debug < data.txt >> report.lst debug < rdata.txt >> report.lst copy /b header.bin+code.bin+data.bin+rdata.bin cnsl.exe
Проверив файл отчета report.lst, можно запускать cnsl.exe. Если вы запускаете его не из консоли, создаваемое окно будет мелькать - закрываться сразу после завершения программы. Поэтому можно запустить сначала консоль командной строки DOS и уже из него - наше приложение, набрав его имя (и путь, если требуется).
Еще одно примечание - в консольных приложениях используется кодировка DOS. Поэтому если вы набрали текст для вывода в Блокноте и на русском, то в консольном окне прочесть его не сможете - в Windows используется другая кодировка (ANSI).
На самом деле, возможности текстового вывода шире, чем можно было бы подумать. Попробуйте в качестве примера использовать такой файл data.txt:
n data1.bin r cx 200 f 0 l 200 0 a 0 db 0 0 0 0 db c9 cd cd cb cd cd bb 0a 0d db ba 20 20 ba 20 20 ba 0a 0d db c7 c4 c4 d7 c4 c4 b6 0a 0d db ba 20 20 ba 20 20 ba 0a 0d db c8 cd cd ca cd cd bc 0a 0d 0
m 0 l 200 100 w q
Чтобы пример работал правильно, надо еще подправить кодовую секцию - там, где строка:
; длина строки = 30 (1Eh)
надо заменить
db 6a 1e
на
db 6a 2e
Впрочем, это лишь подсказка - экспериментируйте сами!
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий