[C++] Создание библиотек - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Sanoxxx, Alowir  
[C++] Создание библиотек
DexT3R Дата: Воскресенье, 17.11.2013, 22:40 | Сообщение # 1
(•̪●)=ε/̵͇̿̿/’̿’̿ ̿ ̿̿ ̿ ̿””
Сообщений: 1978
Статус: Offline
Всем привет с вами Kukushka!! И сегодняшний урок будет посвящен dll библиотекам.


Приступим:
Что же такое "библиотека"?
Библиотекой называют файлы типа ".dll"
Более углубленный ответ будет:

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

Ну или для новичков:
Библиотека - это набор функций.
Вроде все обьяснил приступим smile
В этом уроке мы напишем простейшую библиотеку на С++ и используем её в Cleo-скрипте.

1. Начнем с написания. Писать библиотеку я буду на Visual Studio 2012. Для этого, откроем новый проект и укажем тип проекта:

Указывает шаблон Консольное приложение Win32, тип проекта - Win32. Вводим имя проекта и нажимаете ОК. После чего в нас появиться диалоговое окно такого типа:

Выбираем DLL, и ставим галочку на пустой проект, после чего нажимаем кнопку Готово. Программа создала нам 3 папки: Заголовочные файлы, Файлы исходного кода и Файлы ресурсов. Выбираем папку "Файлы исходного кода", нажимаем ПКМ и выбираем опцию Добавить > Создать элемент:

В появившемся окне выбираем Код > Файл CPP. В поле ИМЯ мы даём название нашему исходному файлу:

Когда данные заполнены, нажимаем Добавить. Перед нами пустой проект. Здесь мы будем писать код библиотеки. Все функции должны быть экспортными, по этому перед каждой из них мы должны написать код:
Код
extern "C" __declspec(dllexport)

Используя язык С++, мы напишем простенькую функцию, которая будет возвращать нам сумму 3-х целых чисел. Мой код такой:
int plus(int a, int b, int c){
return a+b+c;
}
Всё, что остаётся - дописать код эксторта и подключить стандартную библитеку iostream:
#include <iostream>

extern "C" __declspec(dllexport) int plus(int a, int b, int c){
return a+b+c;
}

Теперь скомпилируем код, нажав на конку дебага или клавишу F5!

Нам осталось скопировать нашу DLL в папку с игрой. Я, например, кину её в папку Cleo:


Все осталась финальная часть:
2. Теперь берём в руки наш любимый Sanny Builder и будем писать код smile
Для начала. рассмотрим опкоды, которые работают DLL-библиотекой:
  • 0AA2: 0@ = load_library "CLEO\Kukushka.dll" // IF and SET
    Опкод загружает библиотеку в память. Здесь:
    0@ — имя загруженной библиотеки
    "CLEO\Kukushka.dll" - путь с самой DLL-ке.
  • 0AA3: free_library 0@

    Опкод выгружает ранее загруженную библиотеку из памяти. ВАЖНО! Библиотеку нужно ВСЕГДА выгружать из памяти после использования. Здесь:
    0@ — имя загруженной библиотеки

    0AA4: 1@ = get_proc_address "plus" library 0@ // IF and SET
    Получить адрес функции. Здесь:
    0@ — имя загруженной библиотеки
    "plus" - имя фунции
    1@ - в переменную заносится адрес функции


  • 0AA7: call_function 1@ num_params 3 pop 3 _a= 3 _b= 4 _c=5 store_to 2@

    Опкод выполняет функцию по адресу. Здесь:
    1@ - адрес функции
    num_params 3 - количество параметров, передаваемых в функцию. Так, как наша библиотека принимает 3 параметра, то число будет тоже 3. Следует учесть, что это "плавающий" параметр и количество зависит от самих функций.
    pop 3 - количество параметров, которых нужно очистить после использования функции. Этот параметр обычно совпадает с к-вои передаваемых параметров.
    _a= 3 _b= 4 _c= 5 - перечисление параметров, которые будут переданы в функцию. К-во должно строго совпадать с к-вом параметров в нашей dll-ке. В нашем случаи мы передадим числа 3, 4 и 5.
    2@ - переменная, в которую будет возвращено значение. В нашем случае эта переменная необходимая, но если функция ничего не возвращает, то поле остаётся пустым.

    Следует обратить внимание, что этот опкод выполняет функции не только DLL-библиотек, но и GTA'шные функции.
    Код
    {$CLEO}
    0000:

    :MyDLL
    thread 'MyDLL'
    wait 5000
    if
    0AA2: 0@ = load_library "CLEO\Kukushka.dll" // IF and SET
    jf @MyDLL_END_1
    if
    0AA4: 1@ = get_proc_address "plus" library 0@ // IF and SET
    jf @MyDLL_END_2
    $PARAM_1 = 3
    $PARAM_2 = 5
    0AA7: call_function 1@ num_params 3 pop 3 $PARAM_1 $PARAM_2 10 result_to $RES    
    0ACE: show_formatted_text_box "Summ: %d" $RES
    0AA3: free_library 0@
    jump @MyDLL_END

    :MyDLL_END_1
    wait 0
    0ACE: show_formatted_text_box "FILE NOT FOUND"
    jump @MyDLL_END

    :MyDLL_END_2
    wait 0
    0ACE: show_formatted_text_box "ADDRESS NOT FOUND"

    :MyDLL_END
    wait 0
    0A93: end_custom_thread


    Проверяем!
    Нам должно вывести число 12, то есть, наша функция работает без проблем!

    Всем пока с вами был Kukushka. До скорых встреч
    Прикрепления: 1743434.png (23.2 Kb) · 9160430.png (18.1 Kb) · 9301511.png (13.5 Kb) · 6990905.png (23.0 Kb) · 4138958.png (31.8 Kb)


    НИЧЕГО НЕ ПРОДАЮ В ТЕЛЕГРАММЕ И ВК!!

    Сообщение отредактировал Kukushka - Понедельник, 18.11.2013, 01:22
  • [CM]BzzPerfect Дата: Воскресенье, 19.01.2014, 14:53 | Сообщение # 2
    Боец
    Сообщений: 147
    Статус: Offline
    Как же всё сложно smile
    danya777_kirov Дата: Понедельник, 20.01.2014, 19:38 | Сообщение # 3
    Бывалый
    Сообщений: 347
    Статус: Offline
    ой чеэт)))))))
    Прикрепления: 4539123.png (190.3 Kb)


    помогаю по пхп хтмл в лс писать <br\> верстаю сайты в лс тоже помог ставь +++ в репку
    [CM]Purix Дата: Воскресенье, 26.01.2014, 12:14 | Сообщение # 4
    Боец
    Сообщений: 50
    Статус: Offline
    Уже читал этот урок где-то в интернете.

    Бывший администратор Samp-Rp.
    Nikemmi Дата: Пятница, 13.06.2014, 12:08 | Сообщение # 5
    Хороший))0
    Сообщений: 475
    Статус: Offline
    Классный урок. А если .dll переименовать в asi, то инжект не будет требоваться?

    Delphi программирование
    [Delphi]Узнаем координаты перса
    BunnyHop для Steam/Non steam
    DexT3R Дата: Пятница, 13.06.2014, 12:30 | Сообщение # 6
    (•̪●)=ε/̵͇̿̿/’̿’̿ ̿ ̿̿ ̿ ̿””
    Сообщений: 1978
    Статус: Offline
    Nikemmi, Нет, формат ".asi" - это загрузчик ".dll" файлов.

    НИЧЕГО НЕ ПРОДАЮ В ТЕЛЕГРАММЕ И ВК!!

    Сообщение отредактировал Kukushka - Пятница, 13.06.2014, 12:30
    Cheerito Дата: Среда, 09.07.2014, 22:17 | Сообщение # 7
    Любитель
    Сообщений: 43
    Статус: Offline
    Для меня это все сложно surprised
    • Страница 1 из 1
    • 1
    Поиск:
    Статистика Форума
    Лучшие пользователи
    Admin [39113]

    GеNius [7210]

    [CM]Russel [5557]

    kenlo763 [4952]

    [CM]AGRESSOR [4639]

    Snake_Firm [4452]

    Сэс [4416]

    Artem_Buero [4223]

    [CM]Durman [3204]

    [CM]Рафаэль [3080]

    iMaddy [2855]

    sky_Woker [2854]

    getrekt [2745]

    Новые пользователи
    billienq1 [01:47]

    staciah1 [01:15]

    maksmovictimofej [00:18]

    jamiedv6 [21:25]

    billieds7 [20:51]

    aprilez9 [15:57]

    am9350450 [14:36]

    dcvfre [11:04]

    Sheroz [10:38]

    dominiquevp60 [08:59]

    derrickuy11 [05:48]

    leannaaw60 [04:45]

    nonaxn11 [23:52]