![]() |
eXeL@B —› Вопросы новичков —› Вызов Сишной функции на Delphi |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 05 ноября 2011 22:52 · Личное сообщение · #1 Здравствуйте. Нужно вызвать одну функцию на си из проекта на делфи. В CFF Explorer информация о ней такая: Code:
Ida говорит такое: DecryptString(&v20, v13, 8, v17, &v19); С какими параметрами мне следует вызывать ее на Delphi? Спасибо. ![]() |
|
Создано: 08 ноября 2011 01:44 · Поправил: reversecode · Личное сообщение · #2 выш код совершенно не причем Code:
последняя строка, ecx затерся стеком значит this обьекта не передается функция статична для вывозова но самое главное это то что я сказал выше reversecode пишет: вся эта функция полностью построена на библиотеке cryptopp552.zip они ничего своего вроде даже не писали просто скомпоновали все примитивы с той библиотеки и получили DESDecryptString если кто то захочет сделать сигнатуры от cryptopp552.zip то ваша dll вообще по многим функциям распознается а DESDecryptString полностью ![]() |
|
Создано: 08 ноября 2011 02:30 · Поправил: r_e · Личное сообщение · #3 yanus0 Давайте глянем чо внутрях Code:
и попробуем смоделировать это все на С++ Code:
Если не будет компилироваться попробуйте StringSource(aString, true,... p.s. По поводу статики, конечно, вопрос неоднозначный. =) Тогда первым параметром по коду должен получиться или результат или исходная строка. Разбираться влом. Да и не важно это. Тырьте key + iv и пишите свой генератор. ----- старый пень ![]() |
|
Создано: 08 ноября 2011 02:39 · Поправил: reversecode · Личное сообщение · #4 r_e это не this это RVO this в нее передается вроде через ecx, но так же с успехом и затирается, тоесть не используется ![]() |
|
Создано: 08 ноября 2011 02:44 · Личное сообщение · #5 |
|
Создано: 08 ноября 2011 03:45 · Поправил: sendersu · Личное сообщение · #6 Vamit пишет: Таких утилей нету, но это довольно просто делается в студии:1. Создается dll проект с требуемым именем.2. Создается def файлик с экспортируемыми функциями.3. Создается cpp файлик с пустышками этих функций.4. Можно создать h файлик объяв этих функций для включения в свой проект, хотя и необязательно.5. Компилируем и получаем "пустой" lib файлик, который прекрасно хавается нашим проектом. сделал (експортнул весь клас-пустышку), все равно падает (Access Violation), видимо нестыковка по debug/release или другим параметрам.... но клас CCryptographer* cr = new CCryptographer(); создался ![]() возможно задаю неправильные аргументы, дайте пример прав. вызова, пожалуйста. интерфейс класса [code] #pragma once #include <string> #ifdef DLL_EXPORTS #define DLL_API __declspec(dllexport) #else #pragma message("linking to LicenseTool.lib") #pragma comment(lib, "LicenseTool.lib") #define DLL_API __declspec(dllimport) #endif class DLL_API CCryptographer { public: CCryptographer(CCryptographer const &); CCryptographer(void); virtual ~CCryptographer(); CCryptographer & operator=(CCryptographer const &); virtual std::string DESDecryptString(unsigned char const *,int,unsigned char const *, std::string const &)const; virtual std::string DESEncryptString(unsigned char const *,int,unsigned char const *, std::string const &)const; virtual void GenerateBlock(unsigned char *,int) const; virtual void GenerateRSAKey(unsigned int, std::string &, std::string &,char const *)const ; virtual void GenerateRSAKey(unsigned int,char const *,char const *,char const *)const ; virtual std::string RSADecryptString(std::string const &,char const *)const ; virtual std::string RSADecryptString(char const *,char const *)const ; virtual std::string RSAEncryptString(std::string const &,char const *,char const *)const ; virtual std::string RSAEncryptString(char const *,char const *,char const *)const ; virtual std::string RSASign(std::string const &, std::string const &)const ; virtual std::string RSASign(char const *, std::string const &)const ; virtual bool RSAVerify(char const *,char const *,char const *,int)const ; }; [/code] ![]() |
|
Создано: 08 ноября 2011 10:38 · Личное сообщение · #7 все равно падает (Access Violation), видимо нестыковка по debug/release или другим параметрам.... Ты какую студию используешь? Либа LicenseTool.dll компилилась VisualStudio 2005 name="Microsoft.VC80.CRT" version="8.0.50727.762", поэтому и для своего проекта нужно использовать эту студию или искать новую либу под соответствующую студию, иначе в передаче STL объектов из проги в либу и наоборот будут несоответсвия, что приведет к ассертам и исключениям... ----- Everything is relative... ![]() |
|
Создано: 08 ноября 2011 11:24 · Личное сообщение · #8 |
|
Создано: 08 ноября 2011 11:49 · Личное сообщение · #9 интересно влият ли еще SP на рез-т компиляциии Нет, он исправляет только ошибки самой студии, а все структуры данных остаются прежними..., по крайней мере при подключении чужих либ такого влияния не замечал. Повторюсь для работы STL важна версия студии и опции компиляции - у либы и твоего проекта они должны быть идентичны. ----- Everything is relative... ![]() |
<< . 1 . 2 . |
![]() |
eXeL@B —› Вопросы новичков —› Вызов Сишной функции на Delphi |