Программа, которая ничего не делает.
Да, понадобилась мне такая программа под 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/pro