Всем Рептилойдам - Рен ТВ
-
Автор темы
- #1
Всем доброго времени суток!
Приступим.
1. Создаём проект нашего модуля (dll) и функцию
2. Добавляем в нашу программу импортирование этой функции
3. Используем!
Приступим.
1. Создаём проект нашего модуля (dll) и функцию
C++:
#define DllExport __declspec( dllexport )
//DllExport - экспортируем нашу функцию
//Точку входа в модуле прописывать не нужно!
DllExport bool Fun()
{
/* тело нашей функции */
int a = 55;
if (a > 10)
return true;
return false
}
2. Добавляем в нашу программу импортирование этой функции
C++:
#define Load(dll) LoadLibrary(dll)
#define Unload(dll) FreeLibrary(dll)
#define Fun(lib, namefun) GetProcAddress(lib, namefun)
bool MyModule(LPCSTR Module, LPCSTR Func) //Имя нашего модуля, имя функции
{
int Error = GetLastError();
typedef bool (*import_fun)(/*тут нужно указывать аргументы функции (по необходимости)*/); //прототип функции
HINSTANCE hinstLib = Load(Module); //загружаем наш модуль
if (!hinstLib) { // если загрузить модуль не удалось - выводим код ошибки
cout << "Load Module \"" << Module << "\"\nError: " << Error << endl;
system("pause");
}
import_fun MyFun = (import_fun)Fun(hinstLib, Func); //указываем дескриптор модуля и имя функции
if (Unload(hinstLib) == false) //выгружаем наш модуль и проверяем результат
{
cout << "Unload Module \"" << Module << xorstr_("\"\nError: ") << Error << endl;
system("pause");
}
return MyFun; // возвращаем полученный результат функции
}
3. Используем!
C++:
void Fun()
{
cout << MyModule("путь до вашего модуля (и имя)", "?Fun@@YA_NXZ") << endl;
/*откуда появились новые символы?
все просто, эти символы добавляет компилятор, в них содержится информация о функции, тип данных, аргументы и так далее.
как получить полное название?
закидываем модуль в ida и ищем в строках название нашей функции*/
}
int main()
{
Fun();
system("pause");
return 0;
}