Имеется билиотека (lib), в которой вызывается ненужная мне функция. Скомпилил прогу, СофтАйсом нашел место вызова, по этим данным нашел это место в .lib, НО... В lib`е там же не чистый вызов, настройка адресов происходит при компиляции... Как затереть этот вызов в самой библиотеке? Спасибо!
lib это обычно набор obj. tlib-ом раскладываешь свой lib на кусочки, в нужном obj патчишь код и собираешь либ назад. Насчет настройки адресов - через ненужный call можно сделать short jmp (через область на которую фиксап есть) обычно это получается.
Что-то не получается tlib`ом разложить :-( делаю tlib My.lib, My.lst никаких .obj не появляется и в листинге нет нужных процедур. Дело в том, что НЕнужная процедура вызывается из самой же библиотеки из нужных процедур. Как сделать переход не понятно, т.к. вызов в библиотеке выглядит так E8 00 00 00 00. Нолики потом при сборке заменяются на реальный адрес, JMP в одном байте не запишешь...
если меня не подводит склероз то надо 2 запятые поставить. Т.е. tlib My.lib,,My.lst по поводу перехода - тут надо смотреть какая инструкция перед call, может что-то можно сократить/переписать и выиграть тот самый байт. Либо отключать релок на этот адрес, но это я не умею - надо формат obj читать.
есть еще вариант - загрузи этот либ в иду - там проще найти будет, но для патча все равно проще пересобрать библиотеку из obj. Либо как крайний вариант - патчить вызовы уже после сборки. По сигнатуре.
infern0 С двумя запятыми даже lst не создается. "Сократить/переписать" слишком круто. Крайний вариант уже пользую, но не люблю крайности
infern0 ssx Спасибо за подсказки. В Иде нашел нужное место (оказалось два). И немного выше поменял переходы - кажись работает