Здравствуйте, IID, Вы писали:
IID>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, Аноним, Вы писали:
А>>Ещё заметил, что программы падают всегда с одной и той же ошибкой Access violation, read address at 608A2A3B — адрес тоже всегда один и тот же. Можно ли как-нибудь посмотреть, кто обращается к этому адресу и в каком модуле этот адрес, не используя тяжёлых средств вроде SoftICE ?
IID>убери патчинг, пронаблюдай падения. Если исчезнут — методом исключения проверь какой перехват приводит к падению. Запусти OE под отладчиком, с бряком на любое исключение. Может быть твой AV это кульминация целой серии резрушающих событий. Сделай логгинг вызовов своих перехватов. Ну и в заключение — покажи код патча. Мож он у тя кривой и падение происходит потому что ты все время ставишь-снимаешь патч (сталкивался и с таким)
Антивируса никакого не установленно.
Да, я довольно часто ставлю-снимаю патч, а именно внутри вызова моей
new-функции, перед вызовом оригинальной функции — снимаю (возвращаю старые байты), после — устанавливаю патч опять. Возможно это и есть слабое место. Код патча такой:
bool UninstallHook (LPVOID origfaddr, CODE* poldcode)
{
__try
{
SIZE_T szt;
if (! WriteProcessMemory (
GetCurrentProcess (), // process to write to
origfaddr, // entry point of function to write to
poldcode, // original function code
sizeof (CODE), // number of bytes to write
&szt)) // number of bytes written
{
return false;
}
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
#ifdef _DEBUG
MessageBox (0, "exception in UninstallHook", "error", MB_ICONEXCLAMATION);
#endif
return false;
}
return true;
}
bool
InstallHook (LPVOID origfaddr, LPVOID newfaddr, CODE* poldcode)
{
__try
{
// reading original bytes
CODE code = *(CODE*) origfaddr;
// saving original bytes
*poldcode = code;
// preparing new code
//
// push newfaddr
// ret
//
code.push = 0x68;
code.push_arg = (DWORD) newfaddr;
code.ret = 0xC3;
// writting new code to beginning of original function
SIZE_T szt;
if (! WriteProcessMemory (
GetCurrentProcess (), // process to write to
origfaddr, // function entry point to write to
&code, // new function startup code
sizeof (CODE), // number of bytes to write
&szt)) // number of bytes written
{
return false;
}
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
#ifdef _DEBUG
MessageBox (0, "exception in InstallHook", "error", MB_ICONEXCLAMATION);
#endif
return false;
}
return true;
}