Программа, которая ничего не делает.
ПреамбулаДа, понадобилась мне такая программа под 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
На PasteBinОписание.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Это репост с сайта http://tolik-punkoff.com
Оригинал: https://tolik-punkoff.com/2022/05/09/programma-kotoraya-nichego-ne-delaet/