200920 Май
DLL на Flat Assembler
В предыдущей статье я написал примеры сложения вычитания на FASM (Flat Assembler). В этой статье я напишу пример создания DLL на фасме. В длл запишем процедуру которая может складывать и вычитать числа. ДЛЛ напишем на фасме, а программу которая будет вызывать функцию из длл напишем на дельфи.
Эта статья для тех кто хотя-бы знает что такое DLL. Почитать можно здесь — http://ru.wikipedia.org/wiki/DLL
Код DLL библиотеки:
format PE GUI 4.0 DLL ;формат исполняемого файла PE GUI 4.0 DLL
entry DllEntryPoint ;Инициализация DLL. Функция DllEntryPoint
include 'INCLUDE\win32ax.inc' ;Инклуид файл
section '.data' data readable writable ;дата секция
formats db "%d",0
result db 256 dup(?)
section '.code' code readable executable ;секция кода
proc DllEntryPoint hinstDLL,fdwReason,lpvReserved ;функция инициализации DLL
mov eax,TRUE ; перемещаем в регистр eax значение True т.е Истина. Если сюда поставить False (ложь), то DLL не ;запустится
ret ;выходим из этой функции
endp
proc Calc TypeCalc,Number1,Number2 ;процедура Calc
mov eax,[TypeCalc] ;премещаем в eax значение TypeCalc
.if eax = 0 ;если значение eax равно 0, то...
mov edx,[Number1] ;перемещаем в edx значение Number1
mov ebx,[Number2] ;перемещаем в ebx значение Number2
sub edx,ebx ;вычитаем edx из ebx и сохраняем результат в edx
.endif
.if eax = 1 ;если значение eax равно 1, то...
mov edx,[Number1] ;перемещаем в edx значение Number1
mov ebx,[Number2] ;перемещаем в ebx значение Number2
add edx,ebx ; складываем edx и ebx
.endif
invoke wsprintf,result,formats,edx ;конвернтируем число (значение edx) в строку, для того чтобы вывести на экран
invoke MessageBox,0,result,'Result',MB_OK ;выводим результат на экран
ret ;выходим из процедуры
endp
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include '..\INCLUDE\api\kernel32.inc'
include '..\INCLUDE\api\user32.inc'
section '.edata' export data readable
export 'Calc.dll',\ ;разрешаем экспорт процедуры Calc
Calc, 'Calc'
section '.reloc' fixups data discardable
Сохраните этот код в файле Calc.asm и скомпилируйте код.
Всё. С длл разобрались. Теперь напишем программу которая будет использовать эту длл.
Напишем эту программу на дельфи.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure Calc(TypeCalc,Number1,Number2 : cardinal); stdcall; external 'Calc.dll'; //статический вызов длл Calc.dll
procedure TForm1.Button2Click(Sender: TObject);
begin
Calc(0,StrToInt(Edit1.Text),StrToInt(Edit2.Text)); //с помощью функции Calc вычитаем содержимое Edit2 из Edit1
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Calc(1,StrToInt(Edit1.Text),StrToInt(Edit2.Text)); //с помощью функции Calc складываем содержимое Edit1 с Edit2
end;
end.
Всё! если какие-то проблемы пишите в комментарии статьи.
Ссылка на источник не работает !
Автору респект) Интересная статейка 🙂
Статья супер, буду ждать следующих.
forceful, какая ссылка? ссылка на исходник? работает. Ссылки на источник нету т.к. это моя личная статья.
Если вы имейте ввиду ссылку на википедию, то она работает.
статья супер!!!
Автору спасибо за статью. Очень хорошая статья.
ого спамеров собралось!!! ❗ я будущий программист!!!
Crivel, расслабься это обычный спам.
Да уж коменты конечно заставили улыбнутся 🙄
Тут сарзу видно спамеров!!!
За статью спасибо, но есть вопросик к знающим людям, чем можно открыть .dll, чтобы посмотреть что внутри, а еще лучше и поправить.
Интересно почитать про библиотеки DLL.
Автор постарался, все грамотна расписал, и за это ему спасибо.
Этот материал особенно полезен мне как новичку в изучении FASM и дельфи.
хахаахха
alert()
«>alert()
Спасибо, я тоже прочитала Вашу статью.
Я тоже начала только изучать FASM.
Все приходиться делать самой…..
Огромное спасибо!
Спасибо, очень полезная статья для новичков
Хороший материал, особенно полезен и нужен мне как новичку в изучении FASM и дельфи.
Интересный материальчик но надо еще покумекать разобратся что и как что то догнать надо. Будем разбираться.