Visual Studio: отладка библиотеки
От: Аноним  
Дата: 13.01.14 05:39
Оценка:
Добрый день!

Добрый день. Я пишу библиотеку, которая встраивается в exe-файл, скомпилированный на watcom C в 1997 году.
Мне нужно, чтобы код игры вызывал функцию, которую я написал в этой библиотеке. Делаю я это следующим образом:

В Dll main вызывается
ReplaceFunctionCall(IncViewpos, OFF_DOMOVEMENTS_CALL_DRAWPARTS); //const int OFF_DOMOVEMENTS_CALL_DRAWPARTS = 0x42AC22;

void ReplaceFunctionCall(void (*function)(void), const int offset) {
    // получаем указатель на функцию в виде int адреса
    int pointer = (int)*function-offset-ASM_CALL_LEN; //const int ASM_CALL_LEN = 5;
    // получаем указатель на функцию в виде int адреса
    WriteProcessMemory(pHandle, (int*)(offset+ASM_BYTE_SHIFT), &pointer,sizeof(int), NULL); //const int ASM_BYTE_SHIFT = 1;
    // теперь у нас по адресу offset машинная команда E8 XX XX XX XX, где последние 4 байта указывают на вызов функции IncViewpos
}


Сама же функция IncViewpos и обратный вызов выглядят так

void IncViewpos() {
    viewpos.X = actorpos.X;
    viewpos.Y = actorpos.Y;
    viewpos.Z = actorpos.Z;
    CallFunctionOffset(OFF_CALCULATEVIEWMATRICES); //const int OFF_CALCULATEVIEWMATRICES = 0x422ABC;
    CallFunctionOffset(OFF_DRAWPARTS); //const int OFF_FINDTHINGNAME = 0x441890;
}

void CallFunctionOffset(const int offset) {
    int *pointer = (int*)offset;
    __asm {call pointer}
}


Если я запускаю exe-файл по результату его работы видно, что код IncViewpos отрабатывает так, как нужно.
Проблема в том, что не получается отладить функцию IncViewpos. Дебуггер ее не видит и я не понимаю почему.
1. BreakPoint'ы не отрабатывают на функции IncViewpos
2. Создаю переменную и ставлю остановку на ее изменение — нет результата
3. if(IsDebuggerPresent()) DebugBreak(); // нет результата

При этом DllMain и ReplaceFunctionCall BreakPoint'ы ставятся и срабатывают корректно.
Подскажите, пожалуйста, есть способ поставить BreakPoint'ы на этой функции? Хотя бы на уровне ассемблера?
А то сейчас мне приходится каждый раз переключаться на Ida Pro, прогружать в ней библиотеку, это утомительно.
Зачем все это мне нужно подробно описано здесь: http://ecstatica2.livejournal.com/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.