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