Отладка приложений




Общие проблемы реализации - часть 2


Что касается последней проблемы, с которой я столкнулся, то не могу сказать, была ли это ошибка в компиляторе или недопонимание с моей стороны. В LIMODSDLL.DLL применяется статический массив HOOKFUNCDESC, содержащий указатели реальных функций для DiagOutputA и DiagOutputw из BUGSLAYERUTIL.DLL. В функциях подключения используется указатель реальной функции вне структуры как пункт назначения для оператора перехода. Проблема заключалась в том, что ссылка на второй элемент в массиве создавала недействительную ссылку. Исходная строка встроенного ассемблера

JMP g_stBugslayerUtilRealFuncs [0] .рРгос

генерировала строку кода языка ассемблера

JMP g_stBugslayerUtilRealFuncs+4h

которая была правильной. Однако исходная строка, которая сослалась на второй элемент в структуре:

JMP g_stBugslayerUtilRealFuncs[l].pProc

генерировала

JMP g_stBugslayerUtilRealFuncs+5h,

тогда как я думал, что она должна генерировать

JMP g_stBugslayerUtilRealFuncs+OCh

Следовательно, генерированный код выполнял переход в "ничейную" область памяти. Я пытался разрешить эту проблему, используя в качестве ссылки оператор

JMP g_stBugslayerUtilRealFuncs[0x8].рРгос

Это частная проблема, и она может возникнуть, только если разработчик добавит к LIMODSDLL.DLL собственные специальные функции трассировки. Добавляя такие функции, используйте в качестве примеров таблицы из BUGSLAYERUTIL.DLL.




Содержание  Назад  Вперед