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

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

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

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

Библиотека.
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, а из нее в свою очередь...

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

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

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

4
Модератор
Эксперт по электронике
8561 / 4409 / 1655
Регистрация: 01.02.2015
Сообщений: 13,694
Записей в блоге: 9
25.11.2018, 21:15 2
Лучший ответ Сообщение было отмечено Nord0102033 как решение

Решение

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

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

Добавлено через 15 секунд
Спасибо!
0
Эксперт Hardware
Эксперт Hardware
6163 / 2400 / 398
Регистрация: 29.07.2014
Сообщений: 3,144
Записей в блоге: 4
26.11.2018, 17:43 5
Лучший ответ Сообщение было отмечено 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
26.11.2018, 17:43
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.11.2018, 17:43
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru