Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Краткие сведения о DLL





DLL (англ. dynamic-link library — «библиотека динамической компоновки», «динамически подключаемая библиотека») — понятие операционных систем Microsoft Windows и IBM OS/2, динамическая библиотека, позволяющая многократное использование различными программными приложениями. K DLL относятся также элементы управления ActiveX и драйверы. Формат файлов DLL придерживается тех же соглашений, что и формат исполняемых файлов, сочетая код, таблицы и ресурсы, отличаясь лишь интерпретацией некоторых полей.

Аналогично защите основного кода программы, Sentinel HASP API позволяет защитить и DLL библиотеку. Это подразумевает под собой внедрение функций HASP API в код динамических библиотек. При этом разработчик программного обеспечения имеет возможность пользоваться всеми доступными функциями (рассмотрены в работе 2).

1. Программа, как и в лабораторной работе 2, должна проверять доступность аппаратного ключа HASP и в случае успешной проверки вычислять определенный интеграл функции на заданном интервале. Различие состоит в том, что теперь функция вычисления интеграла вынесена в отдельную DLL библиотеку и будет импортирована из нее в процессе работы. Поскольку в эту библиотеку будет устанавливаться встроенная защита, то необходимо добавить в папку с проектом вспомогательные файлы, выполнив пункт 1 задания к лабораторной работе 2.

 

2. Далее необходимо запустить программу Borland Delphi и создать новый объект DLL Wizard, File-> New-> DLL Wizard, как показано на рисунке 49.

 

Рисунок 49 – создание DLL библиотеки

 

3. После сохранения проекта, следует приступить к добавлению в программный модуль необходимых функций. В данном случае это процедура integral, которая будет в дальнейшем будет вызываться из DLL библиотеки, и функция f. Исходный код программного модуля:

library Project1;

uses

SysUtils,

Classes,

hasp_unit;

{$R *.res}

{$I hasp_vcode.inc }

function f(x, m: real): real;

begin

f: =x*x;

end;

procedure integral(a, b, e: real; n: integer; var s: real; var status: hasp_status_t);

const

SCOPE_VIEW_MAXSIZE = (1024 * 128);

var

handle: hasp_handle_t;

handle2: hasp_handle_t;

fsize: hasp_size_t;

time: hasp_time_t;

info: pchar;

feature, i: integer;

day, month, year, hour, minute, second: cardinal;

scope: Array[0..SCOPE_VIEW_MAXSIZE-1] of char;

view: Array[0..SCOPE_VIEW_MAXSIZE-1] of char;

s1, d, m, raz: real;

begin

feature: = 50;

status: = hasp_login(feature, @vendor_code[1], handle);

if status = HASP_STATUS_OK then

begin

s1: =0;

s: =200;

raz: =100;

m: =b-1;

d: =(b-a)/n;

while raz> e do

begin

for i: =0 to n do

S1: =S1+d*(F(a + I*d, m) + F(a + (I+1)*d, m))/2;

raz: =abs(s-s1);

s: =s1;

s1: =0;

n: =n*2;

d: =(b-a)/n;

end;

end;

end;

exports integral;

begin

end.

4. Необходимо обратить внимание, что экспортируется только процедура integral. Также можно увидеть в коде DLL библиотеки вызов функции hasp_login, что позволит проверить наличие подлинного ключа защиты. Теперь необходимо сформировать DLL-библиотеку, выполнив действия Project-> Build All Projects. В папке с проектом появится файл Project1.dll, который нужно скопировать в папку основной программы и переименовать в HASP_INT.dll.

5. Далее следует приступить к формированию основной программы. Интерфейс пользователя не изменился, он представлен на рисунке 48. Однако код программы теперь выглядит иначе, поскольку были вынесены необходимые математические функции в отдельную DLL-библиотеку. Содержание программного модуля unit1.pas:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, hasp_unit;

type

TForm1 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Edit2: TEdit;

Memo1: TMemo;

Edit3: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit4: TEdit;

Label4: TLabel;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const

AES_MIN_DATA_LEN = 16; { минимальная длина данных для AES шифрования }

MAX_MEMORY = 128; { Макс. размер памяти, который будет обрабатываться }

CUSTOM_FEATURE = 42;

DEMO_MEMBUFFER_SIZE = 8;

SCOPE_VIEW_MAXSIZE = (1024 * 128);

var

Form1: TForm1;

a, b, s, d, e: real;

n: integer;

status: hasp_status_t;

integral: procedure(a, b, e: real; n: integer; var s: real; var status: hasp_status_t);

LibHandle: THandle;

data: array[0..16] of byte =

($74, $65, $73, $74, $20, $73, $74, $72,

$69, $6e, $67, $20, $31, $32, $33, $34, 0);

membuffer: array [0..DEMO_MEMBUFFER_SIZE] of byte;

datalen: hasp_size_t;

implementation

{$R *.dfm}

{$I hasp_vcode.inc }

procedure TForm1.FormCreate(Sender: TObject);

begin

Memo1.Clear();

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

@integral: = nil;

LibHandle: = LoadLibrary('HASP_INT.dll');

if LibHandle > = 32 then begin

@integral: = GetProcAddress(LibHandle, 'integral');

if @integral < > nil then

Memo1.Clear();

n: =100; a: =StrToFloat(Edit1.Text); b: =StrToFloat(Edit2.Text);

e: =StrToFloat(Edit4.Text); integral(a, b, e, n, s, status);

if status = HASP_STATUS_OK then begin

Memo1.Lines.Add(FloatToStr(s));

end

else if status = HASP_FEATURE_NOT_FOUND then

Showmessage('Невозможно подключиться к feature')

else if status = HASP_CONTAINER_NOT_FOUND then

Showmessage('HASP ключ с данным кодом не найден')

else if status = HASP_OLD_DRIVER then

Showmessage('Устаревшая версия драйвера аппаратного ключа защиты')

else if status = HASP_NO_DRIVER then

Showmessage('Драйвер ключа не установлен')

else if status = HASP_INV_VCODE then

Showmessage('Ошибка в коде ключа')

else

Showmessage('Подключение к feature закончилось неудачей');

end; FreeLibrary(LibHandle);

end;

end.

5. Важно обратить внимание на то, что в коде основной программы нет вызова функций Sentinel HASP API, а также присутствует механизм импорта функций из DLL библиотеки HASP_INT.dll

6. Теперь необходимо скомпилировать программу и проверить ее работоспособность при подключенном и отсутствующем ключе HASP HL. Результаты описать в выводе к отчету.

 

Контрольные вопросы

1. Объясните принцип работы DLL библиотек?

2. Какие преимущества дает использование DLL библиотек? Есть ли недостатки и если есть, то какие?

3. Опишите процесс создания динамически подключаемых библиотек в среде Borland Delphi?

4. Возможно ли использование нескольких DLL библиотек одной программой?







Дата добавления: 2014-11-12; просмотров: 779. Нарушение авторских прав; Мы поможем в написании вашей работы!




Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...


Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Классификация потерь населения в очагах поражения в военное время Ядерное, химическое и бактериологическое (биологическое) оружие является оружием массового поражения...

Факторы, влияющие на степень электролитической диссоциации Степень диссоциации зависит от природы электролита и растворителя, концентрации раствора, температуры, присутствия одноименного иона и других факторов...

Йодометрия. Характеристика метода Метод йодометрии основан на ОВ-реакциях, связанных с превращением I2 в ионы I- и обратно...

ИГРЫ НА ТАКТИЛЬНОЕ ВЗАИМОДЕЙСТВИЕ Методические рекомендации по проведению игр на тактильное взаимодействие...

Реформы П.А.Столыпина Сегодня уже никто не сомневается в том, что экономическая политика П...

Виды нарушений опорно-двигательного аппарата у детей В общеупотребительном значении нарушение опорно-двигательного аппарата (ОДА) идентифицируется с нарушениями двигательных функций и определенными органическими поражениями (дефектами)...

Studopedia.info - Студопедия - 2014-2025 год . (0.01 сек.) русская версия | украинская версия