Кто может обяснить одну весчь. В статье криса от (Журнал Хакер #101 май 2007 суперклей от Хакера Статья ) был описан очень интересный метод. Дак вот пару вопросов по статье. Почему если мы в функцию dummy добавляем вызов любой другой функции то приложение падает с ошибкой. Тоесть : Code: // создаем фиктивную экспортируемую функцию, // которую потом будет импортировать дрозофила __declspec(dllexport) int dummy() { return 0; } //Вот так все работет. но если написать так __declspec(dllexport) int dummy() { MessageBox(NULL,"test msg","TEST",MB_OK); return 0; } // а вот тут мы валимся И сразу вопрос на будующее как например нам вызвать свою функцию из DLL Допустим мы обявили функцию __declspec(dllexport) int myfunc() { MessageBox(NULL,"test msg","TEST",MB_OK); return 0; } Как нам ее из нашего exe вызвать(как это на асме выглядит + как я понял ее тоже надо будут в импорт прописывать)
Для вызова функции из dll смотри следующие WinAPI: LoadLibrary, GetProcAddress Ну или через импорт. такого быть вроде не должно, так как функция dummy вообще никогда не выполняется, она существует только для того, чтобы было что прописать в таблицу импорта жертвы.
----------------- странный у вас код какойто... если учитывать это... Code: FARPROC GetProcAddress( HMODULE hModule, // handle to DLL module LPCSTR lpProcName // name of function );
Code: extern "C" __declspec(dllexport) int dummy(){ MessageBox(NULL,"test msg","TEST",MB_OK); return 0; } GetProcAddress(LoadLibrary("this.dll"),"dummy"); или подключай либу от dll...
Подгружаем свою длл Хорошо задам немного по другому вопрос. Вобщем есть у нас чужое приложение. И есть своя Dll Той длл я хочу расширить(и изменить функционал) приложения. Как я понял есть 2 способа загрузить дллку. 1) Нашел одну статейку где народ делает так. Находим код где есть пустое место изменяем на него EP Добавляем туда LoadLibrary(грузим свою длл) потом вызываем GetProcAdress и после запускаем свою функцию. и потом прыгаем на OEP 2) Добавляем длл в секцию импорта. Только вот тут я так и не понял как вызвать свою функцию. И собственно вопрос. Чем кардинально отличаются эти 2 метода. И какой в каких условиях лучше использовать. + как вызывать функции чужого приложения из своей длл если она к нему подгружена.