В аттаче библиотека, в которой находятся функция проверки лицензии. Никак не могу разобраться как она работает. Серийник по всей видимости выглядит таким образом
XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-DJVG
Последние буковки жестко задаются. А функция вот эта:
int res = VBinstall_lic(code, name, company, str1, str2 str3, str4);
Пытаюсь вызвать ее из своей программы, но она валится. Не могу понять что она делает со стеком.
Ранг: 331.1 (мудрец), 561thx Активность: 0.19↘0.06 Статус: Участник
Создано: 30 октября 2010 14:06 · Поправил: Vamit · Личное сообщение · #8
egorovshura пишет: я не могу понять какой calling convention у этой функции Это же просто - __stdcall А со стеком там всё в порядке, даже Ида правильно проводит трассировку стека. Пытаюсь вызвать ее из своей программы, но она валится. А каким образом вы её вызываете, в экспорте она отсутствует.
Да. Там последние 4 символа кода проверяются простым сравнением строк. Непонятно зачем так сделано. В VBinstall_lic передается код уже без этих символов.
Функция нормально отрабатывает и возврат из неё годный, только что сгенерил проект и проверил... Посмотри в проекте, открыв Дизасм окно, есть ли после вызова функции это add esp,1Ch если есть, то будет ошибка. Ты либу к проекту как цепляешь - динамически или статически?
Ранг: 122.2 (ветеран) Активность: 0.04↘0 Статус: Участник
Создано: 30 октября 2010 16:55 · Поправил: egorovshura · Личное сообщение · #17
add esp,1Ch есть. Либу гружу динамически. Получается что это не __stdcall? Какой у тебя calling convention? Или ты просто через push параметры передавал?
egorovshura пишет: Получается что это не __stdcall? У тебя не __stdcall, а функция имеет именно это соглашение. Я не любитель динамической загрузки либ, всегда делаю статически. Если для либы нет h файла, то делаю обертку. Далее, стандартный __stdcall для этой функции выглядит следующим образом - _VBinstall_lic@28, в экспорте же либы имеем имя VBinstall_lic, следовательно нужно через def файл обертки изменить имя в импорте создаваемой проги и всё ОК. Вызываешь любую функцию из либы как свою родную.