Да, понадобилась мне такая программа под Win32, которая совсем ничего не делает. Запускается, и сразу завершает работу, не открывая окна консоли и не создавая окно GUI. Для чего, расскажу в другой раз. Встал вопрос, на чем писать. .NET не подходит — слишком уж за такой программой Framework таскать, был Lasarus, но, если честно, не понял, как там все правильно сделать. И тут осенило, есть же TASM, идеально подходящий для такой задачи, будет максимально маленький экзешник, требующий только одну функцию из WinAPI — ExitProcess
. Самое то! Правда, на ассемблере я кодил в лохматых годах, так что пришлось немного повспоминать.
.386
.MODEL FLAT
extrn ExitProcess:proc
.DATA
szHelp DB 'This program start and end'
.CODE
Start:
nop
nop
nop
push 0
call ExitProcess
end Start
.386
— директива, позволяющая ассемблировать инструкции i386-го процессора, нам хватит.
.MODEL FLAT
— выбор стандартной в Win32 модели памяти (FLAT
)
extrn ExitProcess:proc
— директива extrn
позволяет использовать в программе функцию (тут ExitProcess
) из внешней библиотеки, которую подключим на этапе линковки.
Библиотека IMPORT32.LIB
, содержащая основные функции WinAPI должна быть в комплекте TASM.
.DATA
— начало сегмента данных, в принципе, в этой программе можно его просто определить и не заполнять, но я определю в нем строку, которая будет храниться прямо в в экзешнике, как его описание. Можно открыть экзешник по F3 в Far’е, например, и увидеть ее. При работе программы строка использоваться не будет.
szHelp DB 'This program start and end'
— та самая строчка.
.CODE
— Сегмент кода.
Start:
— метка, обозначающая точку входа в программу. Можно назвать хоть как (Start
, Main
и т.д.).
nop
— пустая операция, процессор в буквальном смысле делает ничего. Можно пропустить, но пусть будет.
push 0
— кладем в стек код возврата, который будет использован функцией ExitProcess
.
end Start
— конец основной функции программы.
Компиляция:
tasm32 /m simple.asm
где:
/ml
— учитывать регистр символов при компиляции.
simple.asm
— имя файла с исходником.
Получилось:
Assembling file: simple.asm Error messages: None Warning messages: None Passes: 1
Будет создан файл simple.OBJ
Линковка:
tlink32 /Tpe /aa simple.OBJ,,,IMPORT32.LIB
где:
/Tpe
— создать на выходе Win32 PE-файл (Стандартный формат 32-х битного экзешника, начиная с Windows 95).
/aa
— Использовать WinAPI
Примечание: Библиотека IMPORT32.LIB
должна лежать в том же каталоге, где и simple.OBJ
, или прописывайте полный путь к файлам
Writing Win32 programs in assembly language using TASM:
— Читать на tolik-punkoff.com
— Читать на lj.rossia.org
— Скачать с Mega.NZ
— Скачать с Google.Drive