Форум программистов, компьютерный форум, киберфорум
FASM
Войти
Регистрация
Восстановить пароль
Другие темы раздела
FASM Вечная ошибка https://www.cyberforum.ru/ fasm/ thread2339645.html
Почему вылезает такая ошибка? перепробовала что могла, но я ничего не смогла =(
Посимвольная очистка буфера клавиатуры FASM
Помогите как сделать чтобы при нажатии backpace удалялся символ из буфера дальше продолжался ввод с этого места.format MZ mov ah, 0 mov al, 3 int 10h start: mov ax, 0b800h ; задаём адрес страницы mov es, ax ; помещаем его в сегмент mov ax, 0x0040 ; задаём адрес указателей mov fs, ax ; помещаем в сегмент
FASM Очистка кольцевого буфера клавиатуры https://www.cyberforum.ru/ fasm/ thread2339369.html
Пытался работать с буфером клавиатуры, и совсем не могу его очистить по нажатию клавиши backspace. Пытался делать через приправнивание головы и хвоста mov ax, mov ,ax Но как то совсем не получилось. Вот мелкий код, в asm разбираюсь очень неочень, тапками сильно не бейте ^^" org 100h go: mov ah, 0 mov al, 3 int 10h mov ax, 0b800h
FASM Рисование кривой линии при нажатой ЛКМ Сабж. Нужно отрисовывать кривую линию при нажатой ЛКМ. Видеорежим: 320х200 (13h). Беру координаты курсора с помощью функции 3h прерывания 33h (cx - x, dx - y). При зажатой ЛКМ отрисовка идёт почти как и надо, за исключением того, что есть небольшая область слева, в которой отрисовка не идёт совсем, и того, что по горизонтали линия начинает убегать от курсора. Читал, что в режиме 13h,... https://www.cyberforum.ru/ fasm/ thread2336098.html
Работа с ОЗУ FASM
Здравствуйте! При ассемблировании кода в строке: mov , bx Происходит ошибка: error: reserved word used as symbol. Как записать в память значение регистра bx?
FASM Заполнение, обмен значений элементов массива. Ошибка при компиляции. Вот задание: Разработать и ввести исходный текст простейшей программы, которая 1) выводит на экран вашу фамилию; 2) резервирует память для таблицы элементов длиной равной 16 (N-номер варианта) со следующим типом элементов: четные варианты-байт; нечетные-слово (2 байта); 3) заполняет таблицу целыми числами, начиная с номера вашего варианта; 4) обнуляет элемент таблицы cо значением равным... https://www.cyberforum.ru/ fasm/ thread2317578.html
FASM Parallel.For, хочу посоветоваться https://www.cyberforum.ru/ fasm/ thread2284167.html
Всем привет! Решил написать небольшой include для fasm под Windows, который будет позволять выполнять параллельные вычисления для for-циклов по аналогии с TParallel.For в Delphi или Parallel.For в C#, но без таких заморочек, как там, а что-то простенькое (строк на 500 асм-кода, ну может, чуть больше). Результат потом выложу. Кто не в теме – схема такая. Запускается функция инициализации,...
Резидентный обработчик 21h прерывания (из 10-й главы Калашникова) FASM
Имеется вот такой код резидентного обработчика прерываний, написанный предположительно на MASM данная программа должна после выполнения оставить часть себя в оперативной памяти подписать ее на прерывание 21h я изучаю ассемблер с компилятором FASM и не совсем могу понять реализацию данного примера по этому прошу помочь мне перевести этот код с MASM на FASM CSEG segment assume cs:CSEG,...
FASM Чтение и запись файлов у меня возникла проблема с реализацией чтения файлов в сети полно примеров по этой теме, но в основном они написаны c под компиляторы MASM, NASM и пр., в то время как я использую FASM корень проблемы заключается в том что я не могу понять, как корректно объявить переменную-буфер в которую буду считывать файл в найденных мною примерах буфер объявлялся так Buffer equ $ или так Buffer DB... https://www.cyberforum.ru/ fasm/ thread2274156.html FASM Резидентный обработчик: перехват нажатия "F1" и после этого запись в буфер клавиатуры символа "о" я пытаюсь разобраться с написанием обработчика и созданием резидентных программ на просторах сети нашел такой пример, который, по идее должен перехватывать нажатие "F1" и после этого записывать в в буфер клавиатуры символ "о" format mz jmp init old_09 dw 0, 0 new_09: push ax in al,60h cmp al, 3bh https://www.cyberforum.ru/ fasm/ thread2271116.html
Как остановить кулеры? FASM
Доброе время суток! Делаю программу на подобии SpeedFan, для остановки кулеров. Есть ли в Windows встроенный функции для работы с кулером? Какое делать прерывание? Где есть та функция, что управляет кулером?
FASM Как подключить include к flat компилятору Здравствуйте,как подключить include к flat компилятору?Требуется подключить include 'win32a.inc' к проекту.win32a.inc лежит в папке "include" компилятора. https://www.cyberforum.ru/ fasm/ thread2265992.html
Эксперт Hardware
Эксперт Hardware
6101 / 2345 / 390
Регистрация: 29.07.2014
Сообщений: 3,107
Записей в блоге: 4
25.10.2018, 00:20  [ТС] 0

Пишем DLL на FASM'e - FASM - Ответ 12999257

25.10.2018, 00:20. Показов 32942. Ответов 17
Метки (Все метки)

Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

Пример простейшей DLL на FASM

Думаю для теории достаточно и предлагаю подкрепить её практикой.
Напишем небольшую тестовую DLL, чтобы проверить вышесказанное в отладчике.
Из инструментов понадобятся: собственно FASM, отладчик 'OllyDbg', редактор 'HIEW' и наконец 'TotalComander', в котором используем только его плагин Lister для сбора инфы о модулях exe/dll (Ctrl+Q). Скелет типичной библиотеки DLL представлен ниже:
Assembler
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
format   PE gui dll                 ; собираем DLL-модуль
include 'win32ax.inc'               ; макросы для укороченных директив
include 'encoding/win1251.inc'      ; подключим кирилицу
;---------
.data
mes0    db  'Библиотека Dll удачно поключена!',0      ; мессага-флаг, что DLL робит
wName   db  'Тест внешнего модуля',0                  ;  ..обзовём окно.
 
;---------
.code
start:                    ; точка входа!
       mov     eax,1      ; возвращаем TRUE
       ret                ;  ..в родитель LdrLoadDLL()
 
; Теперь наша либа зарегана, и мы можем вставлять всякие процедуры.
; Пока только одна.., которая просто покажет окно.
proc   Hello
       invoke  MessageBox,0,mes0,wName,0   ; даём о себе знать!
       ret                                 ; на выход.
endp                                       ; конец процедуры 'Hello'
 
.end start                ; макрос автоматом вставит секцию импорта.
 
; А вот секцию экспорта нужно вбить на клаве,
; и перечислить в ней весь экспорт, чтобы EXE смог их импортировать
;---------
section '.edata' export data readable      ;
export  'myDll.dll',\                      ; имя нашей библиотеки
         Hello, 'Hello'                    ; тут перечисляем имена всех процедур 
;---------
section '.reloc' fixups data discardable   ; разрешаем загрузчику перемещать базу DLL в памяти
Здесь я привёл пример без стандартной функции входа 'DllEntryPoint', и сразу вернул TRUE загрузчику образа. Поскольку в секции импорта указано имя библиотеки как 'myDLL.dll', выходной файл тоже должен быть с таким-же именем, иначе экзешник его не подхватит.

После компиляции исходника по F9, откроем полученную либу в Оле и посмотрим на состояние стека, где последовательно выстроились аргументы для 'DllEntryPoint'. Значит можно вообще не придерживаться правил и читать флаги fdwReason прямо из стека, что позволит проводить ручную инициализацию даже за пределами точки-входа:



Намотав это на ус, теперь напишем EXE-модуль, который будет вызывать процедуру 'Hello' из нашей DLL. Если принять во-внимание толмут выше, проблем возникнуть не должно - компилим обычное гуй-приложение, которое затребует сначала внешнюю процедуру, а потом и сама покажет форточку:
Assembler
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
format  PE gui                    ; собираем EXE
include 'win32ax.inc'
include 'encoding/win1251.inc'
entry   start
;---------
.data
mess0    db  'А это уже EXE приложение..',0
wName    db  'Проверка EXE!',0
 
;---------
.code
start:
        invoke  Hello             ; зовём внешнюю процедуру из нашей DLL
        nop
        invoke  MessageBox,0,mess0,wName,0     ; следом - сразу системную.
        invoke  ExitProcess,0                  ; на выход!
 
;---------
; Тут макрос '.end start' уже не поможет, т.к. в импорте есть самопальные библиотеки dll.
; Перечисляем их имена и импортируемые из них функции
;---------
section '.idata' import data readable
library  myLib,  'myDLL.dll',\                 ; прописываем нашу либу,
         kernel, 'kernel32.dll',\              ;   ..а так-же системные.
         user,   'user32.dll'                  ;     ^^^^
import   myLib,  Hello, 'Hello'                ; таблица IAT со-списком функций.
import   kernel, ExitProcess, 'ExitProcess'
import   user,   MessageBox, 'MessageBoxA'
Осталось положить EXE рядом с DLL, и попробовать запустить EXE.
Если всё сделали правильно, то функциональность либы должно подтвердиться окном 'Библиотека Dll удачно поключена!', иначе проблема в имени DLL.

Практика показывает, что если не брать во-внимание парочку нюансов, то в программировании библиотек DLL нет ничего особенного. Другое дело как их вызывать и проецировать в память. Вот здесь и нужно набить руку и практику.

Позже рассмотрим способы подключения библиотек, которых всего-то два - статический (как в примере выше) и динамический (требует некоторых пояснений). Кроме того, нужно уделить внимание и проблеме авто/перемещения загрузчиком базовых адресов загружаемых модулей (релоки) с технологией ALSR. Актуальными являются и способы обмена данными между DLL и EXE, аргументов и глобальных переменных. Было-бы желание, настрой и время..

Вернуться к обсуждению:
Пишем DLL на FASM'e FASM
5
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2018, 00:20
Готовые ответы и решения:

Обсуждение статьи "Пишем DLL на FASM'e"
R71MT, на сам знаешь каком сайте в разделе ARTICLES моя статья "Import x64", посмотри, может...

Пишем DLL для работы с регистром.
Добрый день. Пишу DLL для работы с регистром и столкнулся со следующей проблемой при записи...

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете...

17
25.10.2018, 00:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.10.2018, 00:20
Помогаю со студенческими работами здесь

Затупил, скажите где взять libmysqld.dll, libmysqld50.dll, libmysqld51.dll
Вечер добрый, ставлю ZEOS на Delphi 7, и для нормальной работы нужны файлы libmysqld.dll,...

Сборка Qt: отучение Qt от mingw10.dll, libgcc_s_dw2-1.dll и других Qt***.dll
В связи с тем, что часто возникают одни и те же вопросы, а в нете копаться никто не любит привожу...

Пишем патч на C++
Обясните как мне написать патч на C++, в asm естественно. Данные: 1) есть файл с именем Prog.exe...

Пишем брут
Кто знает возможно ли написать брут другвокруг

Пишем поисковик
Возникла идея написать поисковик файлов на компьютере, но не простой. Поисковик будет работать в...

ПИшем читалку
Мне надо сделать прогу для отображения текста в многостраничном формате(чтоб можно было ходить по...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru