Толик Панков
hex_laden
............ .................. ................

October 2025
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Толик Панков [userpic]
Программа, которая ничего не делает.

Преамбула


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

Tags: ,
Comments
(Anonymous)

сделай hello world на асме нормальный я в школе покажу мы просто проходим в теории что есть ассемблер но его училка в глаза не видела сама.

малой

А сам чо, там же мануал по ссылке выше есть.

(Anonymous)

я без компа у мну только нафалет бля

ОК. Завтра сделаю.