Привет всем! У меня вот следующая проблема: есть программа, она имеет ряд функций, которые экспортирует. Вот смотрю в IDA PRO список экспортируемых функций, выбираю самую простую:
Мне кажется обычно динамические библиотеки экспортируют функции, а не "программы". Т.е. этот код заведомо рабочий и его не стоило приводить? Но код опять не приводим. Действительно, зачем? Отлично. Архив с кучей файлов, причем хрен знает, что искать в нем.
3. Код? Или лог? 4. Да. я асм плохо знаю, но когда происходит вызов функции, записывается значения точки, куда должно возвратится выполнение программы, в стек. ПС: да, судя написанного мною инсепшн рулит=) 5. Запуск программы осуществятся файломСобственно в дебаггере у него есть таблица экспорта функций. Подключаюсь к нему через LoadLibrary.
Отлично, но я бы все же предпочел полный код, который совершает вызов... Ну да ладно. Code: double __cdecl ABS(int a1, int a2) { if ( *(double *)a2 < 0.0 ) { *(double *)a1 = -1.0 * *(double *)a2; } else { *(_DWORD *)a1 = *(_DWORD *)a2; *(_DWORD *)(a1 + 4) = *(_DWORD *)(a2 + 4); } return *(double *)a1; } *(double *)a2, *(double *)a1 - что-то мне подсказывает, что в a1 и a2 требуется передавать указатели, а не значения переменных. А сей фрагмент *(_DWORD *)a1 = *(_DWORD *)a2; *(_DWORD *)(a1 + 4) = *(_DWORD *)(a2 + 4); вызывает доп подозрение, что за указателем должен скрываться не int, а какой-нибудь double или int64, или long long скажем, короче что-то 64 битное
Может приведешь уже код полностью, где ты проводишь все нужные операции и получаешь в результате ошибку?
перечитай мой прошлый комментарий. Ошибка при вызове функции. а если ошибки нету - совсем другие значения
Попробуй щас Code: typedef double (*ABS)(double *, troubl *,double *,troubl *); int _tmain(int argc,_TCHAR* argv[]) { HINSTANCE hMod = LoadLibrary(L"info.exe"); if (hMod!=NULL) { ABS func = (ABS)GetProcAddress(HMod,"ABS"); if (func!=NULL) { double x=0; double y =-2; double z = func(&x,&y); } } return 0; }