Пытаюсь вживить свою библиотеку через пересылку всех функций на оригинальный msvcr71.dll, но наткнулся на проблему... Программа которая использует эту библиотеку обращается к адресам функций напрямую, а не по вызову... Может кто подскажет как мне вживить вызов моей функции перед msvcr71.fopen? Exe-шник трогать нельзя, т.к. это игра и она зашита защитой, причем для каждой страны своя. Поэтому единственный выход это подмена msvcr71.dll на мою, с пересылкой на оригинальную.
Показываю наглядно место где происходит ошибка: По адресу в esi неверные данные А должны быть следующие
Функция _acmdln это вовсе не функция а переменная (ссылка), как я понял на значение командной строки. Используя пересылку через jmp у меня вместо адреса переменной, лежит 0xFF2538E53400 (jmp dword ptr [$0034e538]) В итоге при обращении к _acmdln выскакивает ошибка... http://msdn.microsoft.com/en-us/library/ff770586.aspx Как выходить из этой ситуации, я ведь не буду все 837 функций проверять... на псевдопеременные...
Clerk Я делаю перехват функции fopen из библиотеки MSVCR71.DLL, через подмену оригинальной MSVCR71.DLL своей msvcr71.dll методом описаным тут http://www.wasm.ru/forum/viewtopic.php?id=9285 В моей библиотеке msvcr71.dll все функции пересылаются на копию оригинальной MSVCR71.DLL названной msvcr7.dll Проблема в том, что не все функции из MSVCR71.DLL являются функциями... многие являются переменными. А переменную нельзя переадресовать второй раз... Вопрос. Как обойти эту проблему?
Просмотрев код библиотеки msvcr71.dll следующие функции являются переменными. Код (Text): _wctype $7C37A6D8 ??_7exception@@6B@ $7C37A8E0 ??_7bad_cast@@6B@ $7C37A900 ??_7bad_typeid@@6B@ $7C37A920 ??_7__non_rtti_object@@6B@ $7C37F058 _aexit_rtn $7C38B42C _fileinfo $7C38B434 __badioinfo $7C38B438 __mb_cur_max $7C38B45C _pctype $7C38B460 _pwctype $7C38B464 __lc_clike $7C38B4E0 _iob $7C38B4E8 _timezone $7C38C780 _daylight $7C38C784 _dstbias $7C38C788 _tzname $7C38C790 _sys_errlist $7C38C818 _sys_nerr $7C38C8C8 _HUGE $7C38C8CC _osplatform $7C38C8D4 _osver $7C38C8D8 _winver $7C38C8DC _winmajor $7C38C8E0 _winminor $7C38C8E4 __argc $7C38C8E8 __argv $7C38C8EC __wargv $7C38C8F0 _environ $7C38C8F4 __initenv $7C38C8F8 _wenviron $7C38C8FC __winitenv $7C38C900 _pgmptr $7C38C904 _wpgmptr $7C38C908 _wcmdln $7C38C90C _acmdln $7C38C910 _fmode $7C38C918 __lc_handle $7C38C91C __lc_codepage $7C38C934 __lc_collate_cp $7C38C938 _commode $7C38C93C _adjust_fdiv $7C38C940 __pioinfo $7C38C960 _mbctype $7C38CA60 _mbcasemap $7C38CB80 __setlc_active $7C38CC80 __unguarded_readlc_active $7C38CC84 Реально ли сделать пересылку на переменную?
AlexBond Примерно то же самое: http://www.wasm.ru/forum/viewtopic.php?pid=359567#p359567 Для форвардинга переменных по идее подойдёт вариант со сквозным экспортом.
l_inc Как я понял идет ссылка на строку... Интересно реально ли это все организовать на Delphi? Просто у меня основной код написан там, переводить его в fasm... трудоемко...
AlexBond Про Delphi ничего не знаю, но думаю, что стандартными средствами вряд ли. А вот подредактировать директорию экспорта в готовом бинарнике вполне реально.
l_inc Попробую сделать следующую схему: Код (Text): Game.exe -> fopen -> msvcr71.dll -> MyDll.myfunc -> MyDll.dll -> fopen -> msvcr7.dll Game.exe -> anyfunc -> msvcr71.dll -> anyfunc -> msvcr7.dll может прокатит!!!