• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Импорт функций из Dll

  • Автор темы lifer
  • Дата начала
L

lifer

Я не особенно прошарен в длл, и у меня возникла проблема. В длл у меня есть функция, скажем, такая:

extern "C" __declspec(dllexport) bool Test(int a) {Beep(300,300);return true;}
Длл загружается динамически.
extern "C" я добавляю затем, чтобы не было искажения имени и можно было импортировать эту ф-цию в своей проге с помощью GetProcAddress.
Ну и при ее вызове я получаю следующее:The value of ESP was not properly saved across a funtion call и всякая лабуда насчет различия декларации ф-ции в длл и указателя на нее в программе.
В программе импорт выглядит так:

typedef bool (WINAPI* TEST)(int);
TEST Test;
Test=(Test)GetProcAddress(dll,"Test");
bool t=Test(4);

Причем функция выполняется, ошибка при выходе из фукции и связана с параметрами и стеком. Если сделать ф-цию без параметров, то все отлично.Calling convention в настройках длл и проги __cdecl. Если убрать extern "C" и поставить везде __fastcall или __stdcall, то вообще ничего не работает. Длл создается в CPP коде - для информации.
Подскажите пожалуйста, как решить проблему.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
typedef bool (WINAPI* TEST)(int);

смотрел как обьявлен макрос WINAPI?
 
L

lifer

Ага, спасибо за подсказку. Вместо WINAPI написал __cdecl как в настройках длл, все заработало.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!