Форум программистов, компьютерный форум, киберфорум
FASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 01.10.2017
Сообщений: 56
FASM

Создать DLL и из тестовой программы вызвать процедуру из этой DLL

25.11.2018, 19:28. Показов 3294. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте ,проверти правильно выполнения задания ,нужно создать библиотеку и использовать ее же в программе .

Библиотека.
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
32
format PE GUI DLL
include 'C:\Program Files\ass\include\win32a.inc'
a dd 12
b dd 14
c dd 16
d dd 18
e dd ?
start:
mov ebx,1
ret
func1:
mov eax,[a]
mov ebx,[b]
mul ebx     ;eax=a*b
mov esi,eax ;перекинули eax в esi
mov eax,[c]
mov ebx,[d]
add ebx,eax ;ebx=c+d
mov eax,[a]
mul ebx     ;eax=a*(c+d)
add esi,eax ;сложили результат eax=a*(c+d) с eax=a*b
mov eax,[d]
neg eax
add eax,esi ;-d+a*b+a*(c+d)
mov [e],eax
 
section '.edata' export data readable ; объявление секции экспорта
export 'lab3.1.DLL',\ ; перечисление экспортируемых точек входа
         func1, 'func1'
 
data fixups  ; объявление секции релокаций символов
end data
Добавлено через 27 секунд
Программа.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
format PE GUI
entry start
include 'C:\Program Files\ass\include\win32a.inc'
 
start:
invoke  func1 ; зовём внешнюю процедуру из нашей DLL
 
 
 
 
 
ret
 
section '.idata' import data readable writeable ; объявление секции импорта
library mydll, 'C:\Program Files\lab3.1.DLL' ; указание импортируемой библиотеки
import mydll,\ ; для указанной библиотеки
        func1, 'func1' ; перечисление импортируемых символов из неё
Добавлено через 56 секунд
Еще нужно сделать тоже самое только с соглашением вызова cdecl,не подскажите как ? Спасибо !
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.11.2018, 19:28
Ответы с готовыми решениями:

можно ли вызвать в VB процедуру из 32-разрядной DLL?
Кто-нибудь знает можно ли вызвать в VB процедуру из 32-разрядной DLL, а из нее в свою очередь вызвать процедуру из 16-разрядной DLL? Буду...

Как вызвать процедуру в dll из службы
Пробую так, в приложении все работает, в службе нет var LibHandle: THandle; fExtract: procedure; begin LibHandle :=...

Как вызвать с помощью команды Calli(MSIL) процедуру из unmanaged DLL
Задача в том чтобы написать на MSIL процедуру вызова функции из unmanaged DLL не прибегая к стандартным вариантам типа DllImport и Declare...

4
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
25.11.2018, 21:15
Лучший ответ Сообщение было отмечено Nord0102033 как решение

Решение

Посмотрите статью
Пишем DLL на FASM'e

А про передачу параметров в процедуру - нужно среди параметров макроса proc искать тип соглашения о передаче параметров. Поищите в описании proc - я совсем не знаю FASM.
1
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6206 / 2441 / 402
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
26.11.2018, 13:58
Nord0102033, в строке(9) библиотеки поставь MOV EAX,1 а не ebx
и оформи нормально функцию func1, чтобы в конце был выход по RET
1
1 / 1 / 0
Регистрация: 01.10.2017
Сообщений: 56
26.11.2018, 14:45  [ТС]
R71MT, что значит оформи нормально функцию ,вообщем? или только ret добавить?

Добавлено через 15 секунд
Спасибо!
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6206 / 2441 / 402
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
26.11.2018, 17:43
Лучший ответ Сообщение было отмечено Nord0102033 как решение

Решение

Цитата Сообщение от Nord0102033 Посмотреть сообщение
или только ret добавить?
формат описания fasm-функции без аргументов:
Assembler
1
2
3
4
5
6
7
8
proc   func1
       nop
;[....]
       ret
endp
;======== так она выглядит в отладчике:
00362006 >   90             NOP
00362007   . C3             RETN
по сути это cdecl-функция, код которой не очищает стек сам.
если ты добавишь в её описание пару аргументов, то fasm автоматом сгенерит stdcall, который будет очищать за собой стек:
Assembler
1
2
3
4
5
6
7
8
9
10
11
proc   func1  arg1,arg2
       nop
;[....]
       ret
endp
;======== так она выглядит в отладчике:
00362006 >/$ 55             PUSH  EBP
00362007  |. 89E5           MOV   EBP,ESP
00362009  |. 90             NOP
0036200A  |. C9             LEAVE
0036200B  \. C2 0800        RETN 8         ;<-- очищает стек от двух аргументов
т.е. fasm при трансляции исходника сам проверяет кол-во аргументов и подставляет в RETN нужное значение - в данном случае 2*4=8. Если при вызове такой функции ты подсунешь ей 1 или 3 аргумента (но не 2, как нужно), то программа выдаст ошибку. Здесь нужно следить за кол-вом аргументов..

Этим отличается первый/cdecl вариант, где в зависимости от кол-ва переданных аргументов ты сам очищаешь стек уже после того, как функция вернёт тебе управление по RETN. Пример её вызова с двумя аргументами из библиотеки будет выглядеть так:
Assembler
1
2
     invoke  func1,[a],[b]
     retn    8
и переменные a,b,c,d,e вытащи из библиотеки - нечего им там делать.
в DLL'ках лучше хранить только константы, или неинициализированные данные.
для хранения промежуточных данных советуют пользоваться или регистрами, или локальным фреймом в стеке.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.11.2018, 17:43
Помогаю со студенческими работами здесь

Как сохранить форму в dll и потом вызвать её из проэкта к которому подключена эта dll?
Как сохранить форму в dll и потом вызвать её из проэкта к которому подключена эта dll?

Можно ли из ASP как-то вызвать dll, чтобы результат её (dll) работы вставился в место вызова?
Можно ли из ASP как-то вызвать dll, чтобы результат её (dll) работы вставился в место вызова? Вызываемая dll - это ISAPI-приложение.

Inject dll, а также вызов функции из этой же dll
Всем привет, заинжектить dll в другой процесс получилось, но еще необходимо вызвать функцию в этой длл, каким образом это реализовать? ...

Как из DLL, в котором есть только DllGetClassObject, обратиться к методу, который должен быть в этой DLL?
Есть метод ITaskbarList3::SetProgressState, он предназначен для того, чтобы в значке программы рисовать прогресс, как например хром рисует,...

Создать DLL на С++ и вызвать ее функции
Здравствуйте, в общем пытаюсь это сделать, но после компиляции не могу найти библиотеку ))), куда она сохраняется непонятно. using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru