Re[5]: <app> has encountered a problem and needs to close
От: Аноним  
Дата: 11.12.06 07:22
Оценка:
Здравствуйте, 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;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.