» DLL на Flat Assembler Assembler. Borland Delphi. . Блог программистов


Блог программистов






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.

Всё! если какие-то проблемы пишите в комментарии статьи.

Скачать исходник

Комментарии

  1. 17 июня, 2009 | 20:14

    Ссылка на источник не работает !

  2. 19 июня, 2009 | 03:21

    Автору респект) Интересная статейка 🙂

  3. 23 июня, 2009 | 11:08

    Статья супер, буду ждать следующих.

  4. Crivel
    27 июня, 2009 | 14:55

    forceful, какая ссылка? ссылка на исходник? работает. Ссылки на источник нету т.к. это моя личная статья.

  5. Crivel
    27 июня, 2009 | 22:04

    Если вы имейте ввиду ссылку на википедию, то она работает.

  6. 30 июня, 2009 | 12:48

    статья супер!!!

  7. 5 июля, 2009 | 13:53

    Автору спасибо за статью. Очень хорошая статья.

  8. 20 июля, 2009 | 23:57

    ого спамеров собралось!!! ❗ я будущий программист!!!

  9. rpy3uH
    30 июля, 2009 | 07:39

    Crivel, расслабься это обычный спам.

  10. 5 августа, 2009 | 00:13

    Да уж коменты конечно заставили улыбнутся 🙄

  11. Ela
    19 августа, 2009 | 22:55

    :mrgreen: Тут сарзу видно спамеров!!!

  12. 10 октября, 2009 | 14:26

    За статью спасибо, но есть вопросик к знающим людям, чем можно открыть .dll, чтобы посмотреть что внутри, а еще лучше и поправить.

  13. 9 декабря, 2009 | 21:46

    Интересно почитать про библиотеки DLL.
    Автор постарался, все грамотна расписал, и за это ему спасибо.
    Этот материал особенно полезен мне как новичку в изучении FASM и дельфи.

  14. :D
    4 марта, 2010 | 22:52

    хахаахха

    alert()

    «>alert()

  15. 10 ноября, 2010 | 13:09

    Спасибо, я тоже прочитала Вашу статью.
    Я тоже начала только изучать FASM.
    Все приходиться делать самой…..
    Огромное спасибо!

  16. 19 февраля, 2011 | 10:18

    Спасибо, очень полезная статья для новичков

  17. 19 февраля, 2011 | 10:22

    Хороший материал, особенно полезен и нужен мне как новичку в изучении FASM и дельфи.

  18. 31 августа, 2011 | 10:22

    Интересный материальчик но надо еще покумекать разобратся что и как что то догнать надо. Будем разбираться.